diff --git a/pcbnew/tools/edit_points.h b/pcbnew/tools/edit_points.h index 5aabb41117..bdcf5ec55a 100644 --- a/pcbnew/tools/edit_points.h +++ b/pcbnew/tools/edit_points.h @@ -456,7 +456,7 @@ public: * @param aConstrained is the point that is put under constrain. * @param aConstrainer is the point that is the source of the constrain. */ - EPC_45DEGREE ( EDIT_POINT& aConstrained, const EDIT_POINT& aConstrainer ) : + EPC_45DEGREE( EDIT_POINT& aConstrained, const EDIT_POINT& aConstrainer ) : EDIT_POINT_CONSTRAINT( aConstrained ), m_constrainer( aConstrainer ) {} diff --git a/pcbnew/tools/point_editor.cpp b/pcbnew/tools/point_editor.cpp index 2e87717411..4415aae5a0 100644 --- a/pcbnew/tools/point_editor.cpp +++ b/pcbnew/tools/point_editor.cpp @@ -62,7 +62,6 @@ public: case S_SEGMENT: points->AddPoint( segment->GetStart() ); points->AddPoint( segment->GetEnd() ); - break; case S_ARC: @@ -194,12 +193,14 @@ int POINT_EDITOR::OnSelectionChange( TOOL_EVENT& aEvent ) controls->ShowCursor( true ); controls->SetAutoPan( true ); controls->SetSnapping( true ); + controls->ForceCursorPosition( true, point->GetPosition() ); } else { controls->ShowCursor( false ); controls->SetAutoPan( 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 editFrame->OnModify(); editFrame->SaveCopyInUndoList( selection.items, UR_CHANGED ); + controls->ForceCursorPosition( false ); modified = true; } @@ -299,11 +301,11 @@ void POINT_EDITOR::updateItem() const switch( segment->GetShape() ) { case S_SEGMENT: - if( &(*m_editPoints)[0] == m_dragPoint ) + if( isModified( (*m_editPoints)[0] ) ) segment->SetStart( wxPoint( (*m_editPoints)[0].GetPosition().x, (*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, (*m_editPoints)[1].GetPosition().y ) ); @@ -351,7 +353,7 @@ void POINT_EDITOR::updateItem() const const VECTOR2I& center = (*m_editPoints)[0].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(); segment->Move( moveVector ); diff --git a/pcbnew/tools/point_editor.h b/pcbnew/tools/point_editor.h index f0a9405e01..054d6b444e 100644 --- a/pcbnew/tools/point_editor.h +++ b/pcbnew/tools/point_editor.h @@ -74,6 +74,12 @@ private: ///> Updates edit points with item's points. 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. EDIT_POINT get45DegConstrainer() const;