Cursor snaps to EDIT_POINTs.

Added POINT_EDITOR::isModified().
This commit is contained in:
Maciej Suminski 2014-03-10 16:25:40 +01:00
parent ecb3aebce3
commit 5ac6579a87
3 changed files with 13 additions and 5 deletions

View File

@ -62,7 +62,6 @@ public:
case S_SEGMENT: case S_SEGMENT:
points->AddPoint( segment->GetStart() ); points->AddPoint( segment->GetStart() );
points->AddPoint( segment->GetEnd() ); points->AddPoint( segment->GetEnd() );
break; break;
case S_ARC: case S_ARC:
@ -194,12 +193,14 @@ int POINT_EDITOR::OnSelectionChange( TOOL_EVENT& aEvent )
controls->ShowCursor( true ); controls->ShowCursor( true );
controls->SetAutoPan( true ); controls->SetAutoPan( true );
controls->SetSnapping( true ); controls->SetSnapping( true );
controls->ForceCursorPosition( true, point->GetPosition() );
} }
else else
{ {
controls->ShowCursor( false ); controls->ShowCursor( false );
controls->SetAutoPan( false ); controls->SetAutoPan( false );
controls->SetSnapping( false ); controls->SetSnapping( false );
controls->ForceCursorPosition( false );
} }
} }
@ -213,6 +214,7 @@ int POINT_EDITOR::OnSelectionChange( TOOL_EVENT& aEvent )
// Save items, so changes can be undone // Save items, so changes can be undone
editFrame->OnModify(); editFrame->OnModify();
editFrame->SaveCopyInUndoList( selection.items, UR_CHANGED ); editFrame->SaveCopyInUndoList( selection.items, UR_CHANGED );
controls->ForceCursorPosition( false );
modified = true; modified = true;
} }
@ -299,11 +301,11 @@ void POINT_EDITOR::updateItem() const
switch( segment->GetShape() ) switch( segment->GetShape() )
{ {
case S_SEGMENT: case S_SEGMENT:
if( &(*m_editPoints)[0] == m_dragPoint ) if( isModified( (*m_editPoints)[0] ) )
segment->SetStart( wxPoint( (*m_editPoints)[0].GetPosition().x, segment->SetStart( wxPoint( (*m_editPoints)[0].GetPosition().x,
(*m_editPoints)[0].GetPosition().y ) ); (*m_editPoints)[0].GetPosition().y ) );
else if( &(*m_editPoints)[1] == m_dragPoint ) else if( isModified( (*m_editPoints)[1] ) )
segment->SetEnd( wxPoint( (*m_editPoints)[1].GetPosition().x, segment->SetEnd( wxPoint( (*m_editPoints)[1].GetPosition().x,
(*m_editPoints)[1].GetPosition().y ) ); (*m_editPoints)[1].GetPosition().y ) );
@ -351,7 +353,7 @@ void POINT_EDITOR::updateItem() const
const VECTOR2I& center = (*m_editPoints)[0].GetPosition(); const VECTOR2I& center = (*m_editPoints)[0].GetPosition();
const VECTOR2I& end = (*m_editPoints)[1].GetPosition(); const VECTOR2I& end = (*m_editPoints)[1].GetPosition();
if( m_dragPoint == &(*m_editPoints)[0] ) if( isModified( (*m_editPoints)[0] ) )
{ {
wxPoint moveVector = wxPoint( center.x, center.y ) - segment->GetCenter(); wxPoint moveVector = wxPoint( center.x, center.y ) - segment->GetCenter();
segment->Move( moveVector ); segment->Move( moveVector );

View File

@ -74,6 +74,12 @@ private:
///> Updates edit points with item's points. ///> Updates edit points with item's points.
void updatePoints() const; void updatePoints() const;
///> Returns true if aPoint is the currently modified point.
inline bool isModified( const EDIT_POINT& aPoint ) const
{
return m_dragPoint == &aPoint;
}
///> Returns a point that should be used as a constrainer for 45 degrees mode. ///> Returns a point that should be used as a constrainer for 45 degrees mode.
EDIT_POINT get45DegConstrainer() const; EDIT_POINT get45DegConstrainer() const;