Point editor: show dragged points with a highlight
Take points editor colors from color theme Also fix an issue where the edited object sometimes didn't update when a point is dragged. Fixes https://gitlab.com/kicad/code/kicad/-/issues/4600
This commit is contained in:
parent
7240b3e4d3
commit
713cd4a47a
|
@ -198,7 +198,7 @@ wxString LayerName( int aLayer )
|
||||||
return _( "Cursor" );
|
return _( "Cursor" );
|
||||||
|
|
||||||
case LAYER_AUX_ITEMS:
|
case LAYER_AUX_ITEMS:
|
||||||
return _( "Aux Items" );
|
return _( "Helper items" );
|
||||||
|
|
||||||
case LAYER_GRID:
|
case LAYER_GRID:
|
||||||
return _( "Grid" );
|
return _( "Grid" );
|
||||||
|
|
|
@ -243,19 +243,32 @@ void EDIT_POINTS::ViewDraw( int aLayer, KIGFX::VIEW* aView ) const
|
||||||
{
|
{
|
||||||
auto gal = aView->GetGAL();
|
auto gal = aView->GetGAL();
|
||||||
|
|
||||||
if( aView->GetGAL()->GetClearColor().GetBrightness() > 0.5 )
|
KIGFX::COLOR4D drawColor = aView->GetPainter()->GetSettings()->GetLayerColor( LAYER_AUX_ITEMS );
|
||||||
gal->SetFillColor( KIGFX::COLOR4D( 0, 0, 0, 1.0 ) );
|
|
||||||
else
|
KIGFX::COLOR4D highlightColor =
|
||||||
gal->SetFillColor( KIGFX::COLOR4D( 1.0, 1.0, 1.0, 1.0 ) );
|
aView->GetPainter()->GetSettings()->GetLayerColor( LAYER_SELECT_OVERLAY );
|
||||||
|
|
||||||
|
gal->SetFillColor( drawColor );
|
||||||
gal->SetIsFill( true );
|
gal->SetIsFill( true );
|
||||||
gal->SetIsStroke( false );
|
gal->SetIsStroke( false );
|
||||||
gal->PushDepth();
|
gal->PushDepth();
|
||||||
gal->SetLayerDepth( gal->GetMinDepth() );
|
gal->SetLayerDepth( gal->GetMinDepth() );
|
||||||
|
|
||||||
float size = aView->ToWorld( EDIT_POINT::POINT_SIZE );
|
float size = aView->ToWorld( EDIT_POINT::POINT_SIZE );
|
||||||
|
float shadowSize = aView->ToWorld( EDIT_POINT::POINT_SIZE * 1.5 );
|
||||||
|
|
||||||
for( const EDIT_POINT& point : m_points )
|
for( const EDIT_POINT& point : m_points )
|
||||||
|
{
|
||||||
|
if( point.IsActive() )
|
||||||
|
{
|
||||||
|
gal->SetFillColor( highlightColor );
|
||||||
|
gal->DrawRectangle( point.GetPosition() - shadowSize / 2,
|
||||||
|
point.GetPosition() + shadowSize / 2 );
|
||||||
|
gal->SetFillColor( drawColor );
|
||||||
|
}
|
||||||
|
|
||||||
gal->DrawRectangle( point.GetPosition() - size / 2, point.GetPosition() + size / 2 );
|
gal->DrawRectangle( point.GetPosition() - size / 2, point.GetPosition() + size / 2 );
|
||||||
|
}
|
||||||
|
|
||||||
for( const EDIT_LINE& line : m_lines )
|
for( const EDIT_LINE& line : m_lines )
|
||||||
{
|
{
|
||||||
|
|
|
@ -53,7 +53,8 @@ public:
|
||||||
*/
|
*/
|
||||||
EDIT_POINT( const VECTOR2I& aPoint, EDA_ITEM* aConnection = nullptr ) :
|
EDIT_POINT( const VECTOR2I& aPoint, EDA_ITEM* aConnection = nullptr ) :
|
||||||
m_position( aPoint ),
|
m_position( aPoint ),
|
||||||
m_connection( aConnection )
|
m_connection( aConnection ),
|
||||||
|
m_isActive( false )
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -176,6 +177,16 @@ public:
|
||||||
m_constraint->Apply();
|
m_constraint->Apply();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline bool IsActive() const
|
||||||
|
{
|
||||||
|
return m_isActive;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void SetActive( bool aActive = true )
|
||||||
|
{
|
||||||
|
m_isActive = aActive;
|
||||||
|
}
|
||||||
|
|
||||||
bool operator==( const EDIT_POINT& aOther ) const
|
bool operator==( const EDIT_POINT& aOther ) const
|
||||||
{
|
{
|
||||||
return m_position == aOther.m_position;
|
return m_position == aOther.m_position;
|
||||||
|
@ -194,6 +205,9 @@ private:
|
||||||
|
|
||||||
///> Constraint for the point, NULL if none
|
///> Constraint for the point, NULL if none
|
||||||
std::shared_ptr<EDIT_CONSTRAINT<EDIT_POINT> > m_constraint;
|
std::shared_ptr<EDIT_CONSTRAINT<EDIT_POINT> > m_constraint;
|
||||||
|
|
||||||
|
///> True if this point is being manipulated
|
||||||
|
bool m_isActive;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -361,6 +361,7 @@ int POINT_EDITOR::OnSelectionChange( const TOOL_EVENT& aEvent )
|
||||||
controls->SetAutoPan( true );
|
controls->SetAutoPan( true );
|
||||||
inDrag = true;
|
inDrag = true;
|
||||||
grid.SetAuxAxes( true, m_original.GetPosition() );
|
grid.SetAuxAxes( true, m_original.GetPosition() );
|
||||||
|
m_editedPoint->SetActive();
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO: unify the constraints to solve simultaneously instead of sequentially
|
//TODO: unify the constraints to solve simultaneously instead of sequentially
|
||||||
|
@ -387,6 +388,12 @@ int POINT_EDITOR::OnSelectionChange( const TOOL_EVENT& aEvent )
|
||||||
|
|
||||||
else if( inDrag && evt->IsMouseUp( BUT_LEFT ) )
|
else if( inDrag && evt->IsMouseUp( BUT_LEFT ) )
|
||||||
{
|
{
|
||||||
|
if( m_editedPoint )
|
||||||
|
{
|
||||||
|
m_editedPoint->SetActive( false );
|
||||||
|
getView()->Update( m_editPoints.get() );
|
||||||
|
}
|
||||||
|
|
||||||
controls->SetAutoPan( false );
|
controls->SetAutoPan( false );
|
||||||
setAltConstraint( false );
|
setAltConstraint( false );
|
||||||
|
|
||||||
|
@ -649,6 +656,8 @@ void POINT_EDITOR::updateItem() const
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getView()->Update( item );
|
||||||
|
|
||||||
if( frame() )
|
if( frame() )
|
||||||
frame()->SetMsgPanel( item );
|
frame()->SetMsgPanel( item );
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue