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:
+14
-12
@@ -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 );
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user