Dragging items by their origin is optional (activated by dragging elements with Ctrl held).
This commit is contained in:
parent
b4e0a5cbbf
commit
95a6e8deb2
|
@ -147,7 +147,7 @@ int EDIT_TOOL::Main( TOOL_EVENT& aEvent )
|
||||||
|
|
||||||
// Drag items to the current cursor position
|
// Drag items to the current cursor position
|
||||||
for( unsigned int i = 0; i < selection.items.GetCount(); ++i )
|
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 );
|
updateRatsnest( true );
|
||||||
}
|
}
|
||||||
|
@ -157,9 +157,21 @@ int EDIT_TOOL::Main( TOOL_EVENT& aEvent )
|
||||||
editFrame->OnModify();
|
editFrame->OnModify();
|
||||||
editFrame->SaveCopyInUndoList( selection.items, UR_CHANGED );
|
editFrame->SaveCopyInUndoList( selection.items, UR_CHANGED );
|
||||||
|
|
||||||
// Set the current cursor position to the first dragged item origin, so the
|
if( evt->Modifier( MD_CTRL ) )
|
||||||
// movement vector could be computed later
|
{
|
||||||
m_cursor = VECTOR2I( selection.Item<BOARD_ITEM>( 0 )->GetPosition() );
|
// 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;
|
m_dragging = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -309,6 +321,10 @@ int EDIT_TOOL::Rotate( TOOL_EVENT& aEvent )
|
||||||
|
|
||||||
updateRatsnest( m_dragging );
|
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 )
|
if( m_dragging )
|
||||||
selection.group->ViewUpdate( KIGFX::VIEW_ITEM::GEOMETRY );
|
selection.group->ViewUpdate( KIGFX::VIEW_ITEM::GEOMETRY );
|
||||||
else
|
else
|
||||||
|
@ -359,6 +375,10 @@ int EDIT_TOOL::Flip( TOOL_EVENT& aEvent )
|
||||||
|
|
||||||
updateRatsnest( m_dragging );
|
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 )
|
if( m_dragging )
|
||||||
selection.group->ViewUpdate( KIGFX::VIEW_ITEM::GEOMETRY );
|
selection.group->ViewUpdate( KIGFX::VIEW_ITEM::GEOMETRY );
|
||||||
else
|
else
|
||||||
|
@ -491,7 +511,7 @@ wxPoint EDIT_TOOL::getModificationPoint( const SELECTION_TOOL::SELECTION& aSelec
|
||||||
{
|
{
|
||||||
if( aSelection.Size() == 1 )
|
if( aSelection.Size() == 1 )
|
||||||
{
|
{
|
||||||
return aSelection.Item<BOARD_ITEM>( 0 )->GetPosition();
|
return aSelection.Item<BOARD_ITEM>( 0 )->GetPosition() - m_offset;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -98,6 +98,9 @@ private:
|
||||||
///> Flag determining if anything is being dragged right now
|
///> Flag determining if anything is being dragged right now
|
||||||
bool m_dragging;
|
bool m_dragging;
|
||||||
|
|
||||||
|
///> Offset from the dragged item's center (anchor)
|
||||||
|
wxPoint m_offset;
|
||||||
|
|
||||||
///> Last cursor position (needed for getModificationPoint() to avoid changes
|
///> Last cursor position (needed for getModificationPoint() to avoid changes
|
||||||
///> of edit reference point).
|
///> of edit reference point).
|
||||||
VECTOR2I m_cursor;
|
VECTOR2I m_cursor;
|
||||||
|
|
Loading…
Reference in New Issue