mirror of
https://gitlab.com/kicad/code/kicad.git
synced 2025-09-14 02:03:12 +02:00
EEschema: avoid DNP and EXCLUDE from SIM markers blinking when moving an object
They were redrawn multiple times, and not always on the right graphic layer, thus creating draw artifacts. Fixes https://gitlab.com/kicad/code/kicad/-/issues/20483
This commit is contained in:
parent
c71adb0a89
commit
b8d2bdb3d2
@ -2286,8 +2286,7 @@ void SCH_PAINTER::draw( const SCH_SYMBOL* aSymbol, int aLayer )
|
||||
tempPin->SetOperatingPoint( symbolPin->GetOperatingPoint() );
|
||||
}
|
||||
|
||||
draw( &tempSymbol, aLayer, false, aSymbol->GetUnit(), aSymbol->GetBodyStyle(),
|
||||
DNP );
|
||||
draw( &tempSymbol, aLayer, false, aSymbol->GetUnit(), aSymbol->GetBodyStyle(), DNP );
|
||||
|
||||
for( unsigned i = 0; i < tempPins.size(); ++i )
|
||||
{
|
||||
@ -2300,9 +2299,12 @@ void SCH_PAINTER::draw( const SCH_SYMBOL* aSymbol, int aLayer )
|
||||
// IS_SHOWN_AS_BITMAP
|
||||
}
|
||||
|
||||
if( DNP )
|
||||
// Draw DNP and EXCLUDE from SIM markers.
|
||||
// These drawings are associated to the symbol body, so draw them only when the LAYER_DEVICE
|
||||
// is drawn (to avoid draw artifacts).
|
||||
if( DNP && aLayer == LAYER_DEVICE )
|
||||
{
|
||||
int layer = LAYER_DNP_MARKER;
|
||||
COLOR4D marker_color = m_schSettings.GetLayerColor( LAYER_DNP_MARKER );
|
||||
BOX2I bbox = aSymbol->GetBodyBoundingBox();
|
||||
BOX2I pins = aSymbol->GetBodyAndPinsBoundingBox();
|
||||
VECTOR2D margins( std::max( bbox.GetX() - pins.GetX(), pins.GetEnd().x - bbox.GetEnd().x ),
|
||||
@ -2321,17 +2323,17 @@ void SCH_PAINTER::draw( const SCH_SYMBOL* aSymbol, int aLayer )
|
||||
m_gal->AdvanceDepth();
|
||||
m_gal->SetIsStroke( true );
|
||||
m_gal->SetIsFill( true );
|
||||
m_gal->SetStrokeColor( m_schSettings.GetLayerColor( layer ) );
|
||||
m_gal->SetFillColor( m_schSettings.GetLayerColor( layer ) );
|
||||
m_gal->SetStrokeColor( marker_color );
|
||||
m_gal->SetFillColor( marker_color );
|
||||
|
||||
m_gal->DrawSegment( pt1, pt2, strokeWidth );
|
||||
std::swap( pt1.x, pt2.x );
|
||||
m_gal->DrawSegment( pt1, pt2, strokeWidth );
|
||||
}
|
||||
|
||||
if( markExclusion )
|
||||
if( markExclusion && aLayer == LAYER_DEVICE )
|
||||
{
|
||||
int layer = LAYER_EXCLUDED_FROM_SIM;
|
||||
COLOR4D marker_color = m_schSettings.GetLayerColor( LAYER_EXCLUDED_FROM_SIM );
|
||||
BOX2I bbox = aSymbol->GetBodyBoundingBox();
|
||||
int strokeWidth = schIUScale.MilsToIU( ADVANCED_CFG::GetCfg().m_ExcludeFromSimulationLineWidth );
|
||||
|
||||
@ -2341,8 +2343,8 @@ void SCH_PAINTER::draw( const SCH_SYMBOL* aSymbol, int aLayer )
|
||||
m_gal->AdvanceDepth();
|
||||
m_gal->SetIsStroke( true );
|
||||
m_gal->SetIsFill( true );
|
||||
m_gal->SetStrokeColor( m_schSettings.GetLayerColor( layer ).WithAlpha( 0.5 ) );
|
||||
m_gal->SetFillColor( m_schSettings.GetLayerColor( layer ).WithAlpha( 0.5 ) );
|
||||
m_gal->SetStrokeColor( marker_color );
|
||||
m_gal->SetFillColor( marker_color );
|
||||
|
||||
m_gal->DrawSegment( bbox.GetPosition(), VECTOR2D( bbox.GetEnd().x, bbox.GetY() ), strokeWidth );
|
||||
m_gal->DrawSegment( VECTOR2D( bbox.GetEnd().x, bbox.GetY() ), bbox.GetEnd(), strokeWidth );
|
||||
@ -2356,10 +2358,10 @@ void SCH_PAINTER::draw( const SCH_SYMBOL* aSymbol, int aLayer )
|
||||
VECTOR2D top = center + VECTOR2D( 0, offset );
|
||||
VECTOR2D bottom = center + VECTOR2D( 0, -offset );
|
||||
|
||||
m_gal->SetFillColor( m_schSettings.GetLayerColor( layer ).WithAlpha( 0.1 ) );
|
||||
m_gal->SetFillColor( marker_color.WithAlpha( 0.1 ) );
|
||||
m_gal->DrawCircle( center, offset );
|
||||
m_gal->AdvanceDepth();
|
||||
m_gal->SetFillColor( m_schSettings.GetLayerColor( layer ).WithAlpha( 0.5 ) );
|
||||
m_gal->SetFillColor( marker_color );
|
||||
m_gal->DrawCurve( left, top, bottom, right, 1 );
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user