Loading pcbnew/tools/edit_tool.cpp +25 −5 Original line number Diff line number Diff line Loading @@ -147,7 +147,7 @@ int EDIT_TOOL::Main( TOOL_EVENT& aEvent ) // Drag items to the current cursor position for( unsigned int i = 0; i < selection.items.GetCount(); ++i ) selection.Item<BOARD_ITEM>( i )->Move( movement ); selection.Item<BOARD_ITEM>( i )->Move( movement + m_offset ); updateRatsnest( true ); } Loading @@ -157,9 +157,21 @@ int EDIT_TOOL::Main( TOOL_EVENT& aEvent ) editFrame->OnModify(); editFrame->SaveCopyInUndoList( selection.items, UR_CHANGED ); if( evt->Modifier( MD_CTRL ) ) { // Set the current cursor position to the first dragged item origin, so the // movement vector could be computed later m_cursor = VECTOR2I( selection.Item<BOARD_ITEM>( 0 )->GetPosition() ); m_offset.x = 0; m_offset.y = 0; } else { // Update dragging offset (distance between cursor and the first dragged item) m_offset = static_cast<BOARD_ITEM*>( selection.items.GetPickedItem( 0 ) )->GetPosition() - wxPoint( m_cursor.x, m_cursor.y ); } m_dragging = true; } Loading Loading @@ -309,6 +321,10 @@ int EDIT_TOOL::Rotate( TOOL_EVENT& aEvent ) updateRatsnest( m_dragging ); // Update dragging offset (distance between cursor and the first dragged item) m_offset = static_cast<BOARD_ITEM*>( selection.items.GetPickedItem( 0 ) )->GetPosition() - rotatePoint; if( m_dragging ) selection.group->ViewUpdate( KIGFX::VIEW_ITEM::GEOMETRY ); else Loading Loading @@ -359,6 +375,10 @@ int EDIT_TOOL::Flip( TOOL_EVENT& aEvent ) updateRatsnest( m_dragging ); // Update dragging offset (distance between cursor and the first dragged item) m_offset = static_cast<BOARD_ITEM*>( selection.items.GetPickedItem( 0 ) )->GetPosition() - flipPoint; if( m_dragging ) selection.group->ViewUpdate( KIGFX::VIEW_ITEM::GEOMETRY ); else Loading Loading @@ -491,7 +511,7 @@ wxPoint EDIT_TOOL::getModificationPoint( const SELECTION_TOOL::SELECTION& aSelec { if( aSelection.Size() == 1 ) { return aSelection.Item<BOARD_ITEM>( 0 )->GetPosition(); return aSelection.Item<BOARD_ITEM>( 0 )->GetPosition() - m_offset; } else { Loading pcbnew/tools/edit_tool.h +3 −0 Original line number Diff line number Diff line Loading @@ -98,6 +98,9 @@ private: ///> Flag determining if anything is being dragged right now bool m_dragging; ///> Offset from the dragged item's center (anchor) wxPoint m_offset; ///> Last cursor position (needed for getModificationPoint() to avoid changes ///> of edit reference point). VECTOR2I m_cursor; Loading Loading
pcbnew/tools/edit_tool.cpp +25 −5 Original line number Diff line number Diff line Loading @@ -147,7 +147,7 @@ int EDIT_TOOL::Main( TOOL_EVENT& aEvent ) // Drag items to the current cursor position for( unsigned int i = 0; i < selection.items.GetCount(); ++i ) selection.Item<BOARD_ITEM>( i )->Move( movement ); selection.Item<BOARD_ITEM>( i )->Move( movement + m_offset ); updateRatsnest( true ); } Loading @@ -157,9 +157,21 @@ int EDIT_TOOL::Main( TOOL_EVENT& aEvent ) editFrame->OnModify(); editFrame->SaveCopyInUndoList( selection.items, UR_CHANGED ); if( evt->Modifier( MD_CTRL ) ) { // Set the current cursor position to the first dragged item origin, so the // movement vector could be computed later m_cursor = VECTOR2I( selection.Item<BOARD_ITEM>( 0 )->GetPosition() ); m_offset.x = 0; m_offset.y = 0; } else { // Update dragging offset (distance between cursor and the first dragged item) m_offset = static_cast<BOARD_ITEM*>( selection.items.GetPickedItem( 0 ) )->GetPosition() - wxPoint( m_cursor.x, m_cursor.y ); } m_dragging = true; } Loading Loading @@ -309,6 +321,10 @@ int EDIT_TOOL::Rotate( TOOL_EVENT& aEvent ) updateRatsnest( m_dragging ); // Update dragging offset (distance between cursor and the first dragged item) m_offset = static_cast<BOARD_ITEM*>( selection.items.GetPickedItem( 0 ) )->GetPosition() - rotatePoint; if( m_dragging ) selection.group->ViewUpdate( KIGFX::VIEW_ITEM::GEOMETRY ); else Loading Loading @@ -359,6 +375,10 @@ int EDIT_TOOL::Flip( TOOL_EVENT& aEvent ) updateRatsnest( m_dragging ); // Update dragging offset (distance between cursor and the first dragged item) m_offset = static_cast<BOARD_ITEM*>( selection.items.GetPickedItem( 0 ) )->GetPosition() - flipPoint; if( m_dragging ) selection.group->ViewUpdate( KIGFX::VIEW_ITEM::GEOMETRY ); else Loading Loading @@ -491,7 +511,7 @@ wxPoint EDIT_TOOL::getModificationPoint( const SELECTION_TOOL::SELECTION& aSelec { if( aSelection.Size() == 1 ) { return aSelection.Item<BOARD_ITEM>( 0 )->GetPosition(); return aSelection.Item<BOARD_ITEM>( 0 )->GetPosition() - m_offset; } else { Loading
pcbnew/tools/edit_tool.h +3 −0 Original line number Diff line number Diff line Loading @@ -98,6 +98,9 @@ private: ///> Flag determining if anything is being dragged right now bool m_dragging; ///> Offset from the dragged item's center (anchor) wxPoint m_offset; ///> Last cursor position (needed for getModificationPoint() to avoid changes ///> of edit reference point). VECTOR2I m_cursor; Loading