Change persistent 45° state to only drawing

Move/edit points have a lossy state that holds only for the time in
which the tool is active.  It reverts back to non-constrained after
completion of the move/point edit

Fixes https://gitlab.com/kicad/code/kicad/issues/9574
This commit is contained in:
Seth Hillbrand 2021-11-17 15:36:39 -08:00
parent bfad40bdcc
commit 1d2fd6d271
3 changed files with 16 additions and 4 deletions

View File

@ -845,6 +845,7 @@ int EDIT_TOOL::doMoveSelection( TOOL_EVENT aEvent, bool aPickReference )
TOOL_EVENT* evt = &aEvent; TOOL_EVENT* evt = &aEvent;
VECTOR2I prevPos; VECTOR2I prevPos;
bool lock45 = false;
bool eatFirstMouseUp = true; bool eatFirstMouseUp = true;
bool hasRedrawn3D = false; bool hasRedrawn3D = false;
bool allowRedraw3D = editFrame->GetDisplayOptions().m_Live3DRefresh; bool allowRedraw3D = editFrame->GetDisplayOptions().m_Live3DRefresh;
@ -890,7 +891,7 @@ int EDIT_TOOL::doMoveSelection( TOOL_EVENT aEvent, bool aPickReference )
if( !selection.HasReferencePoint() ) if( !selection.HasReferencePoint() )
originalPos = m_cursor; originalPos = m_cursor;
if( Is45Limited() ) if( lock45 )
{ {
VECTOR2I moveVector = m_cursor - originalPos; VECTOR2I moveVector = m_cursor - originalPos;
m_cursor = originalPos + GetVectorSnapped45( moveVector ); m_cursor = originalPos + GetVectorSnapped45( moveVector );
@ -976,7 +977,7 @@ int EDIT_TOOL::doMoveSelection( TOOL_EVENT aEvent, bool aPickReference )
// start moving with the reference point attached to the cursor // start moving with the reference point attached to the cursor
grid.SetAuxAxes( false ); grid.SetAuxAxes( false );
if( Is45Limited() ) if( lock45 )
{ {
VECTOR2I moveVector = m_cursor - originalPos; VECTOR2I moveVector = m_cursor - originalPos;
m_cursor = originalPos + GetVectorSnapped45( moveVector ); m_cursor = originalPos + GetVectorSnapped45( moveVector );
@ -1091,6 +1092,11 @@ int EDIT_TOOL::doMoveSelection( TOOL_EVENT aEvent, bool aPickReference )
break; // finish break; // finish
} }
else if( evt->IsAction( &PCB_ACTIONS::toggle45 ) )
{
lock45 = !lock45;
evt->SetPassEvent( false );
}
else else
{ {
evt->SetPassEvent(); evt->SetPassEvent();

View File

@ -429,6 +429,7 @@ int PCB_POINT_EDITOR::OnSelectionChange( const TOOL_EVENT& aEvent )
updateEditedPoint( aEvent ); updateEditedPoint( aEvent );
m_refill = false; m_refill = false;
bool inDrag = false; bool inDrag = false;
bool lock45 = false;
BOARD_COMMIT commit( editFrame ); BOARD_COMMIT commit( editFrame );
LSET snapLayers = item->GetLayerSet(); LSET snapLayers = item->GetLayerSet();
@ -524,7 +525,7 @@ int PCB_POINT_EDITOR::OnSelectionChange( const TOOL_EVENT& aEvent )
} }
// The alternative constraint limits to 45 degrees // The alternative constraint limits to 45 degrees
if( Is45Limited() ) if( lock45 )
m_altConstraint->Apply(); m_altConstraint->Apply();
else else
m_editedPoint->ApplyConstraint(); m_editedPoint->ApplyConstraint();
@ -570,6 +571,11 @@ int PCB_POINT_EDITOR::OnSelectionChange( const TOOL_EVENT& aEvent )
m_refill = true; m_refill = true;
} }
else if( evt->IsAction( &PCB_ACTIONS::toggle45 ) )
{
lock45 = !lock45;
evt->SetPassEvent( false );
}
else if( evt->IsCancelInteractive() || evt->IsActivate() ) else if( evt->IsCancelInteractive() || evt->IsActivate() )
{ {
if( inDrag ) // Restore the last change if( inDrag ) // Restore the last change

View File

@ -107,7 +107,7 @@ public:
* Should the tool use its 45° mode option? * Should the tool use its 45° mode option?
* @return True if set to use 45° * @return True if set to use 45°
*/ */
bool Is45Limited() const; virtual bool Is45Limited() const;
protected: protected:
/** /**