Don't include text in locked-item-shadow-calc for footprints.

And make shadow margins consistent for all objects.

Fixes https://gitlab.com/kicad/code/kicad/issues/11545
This commit is contained in:
Jeff Young 2022-08-23 23:25:55 +01:00
parent 27c31061b1
commit ae86c6f3a7
2 changed files with 21 additions and 9 deletions

View File

@ -448,6 +448,7 @@ bool PCB_PAINTER::Draw( const VIEW_ITEM* aItem, int aLayer )
BOARD_DESIGN_SETTINGS& bds = board->GetDesignSettings();
m_maxError = bds.m_MaxError;
m_holePlatingThickness = bds.GetHolePlatingThickness();
m_lockedShadowMargin = bds.GetLineThickness( F_SilkS ) * 4;
if( item->GetParentFootprint() && !board->IsFootprintHolder() )
{
@ -698,7 +699,7 @@ void PCB_PAINTER::draw( const PCB_TRACK* aTrack, int aLayer )
m_gal->SetLineWidth( m_pcbSettings.m_outlineWidth );
if( aLayer == LAYER_LOCKED_ITEM_SHADOW )
track_width = track_width * 1.5;
track_width = track_width + m_lockedShadowMargin;
m_gal->DrawSegment( start, end, track_width );
}
@ -745,7 +746,7 @@ void PCB_PAINTER::draw( const PCB_ARC* aArc, int aLayer )
m_gal->SetLineWidth( m_pcbSettings.m_outlineWidth );
if( aLayer == LAYER_LOCKED_ITEM_SHADOW )
width = width * 1.5;
width = width + m_lockedShadowMargin;
m_gal->DrawArcSegment( center, radius, start_angle, start_angle + angle, width,
m_maxError );
@ -950,10 +951,9 @@ void PCB_PAINTER::draw( const PCB_VIA* aVia, int aLayer )
}
else if( aLayer == LAYER_LOCKED_ITEM_SHADOW ) // draw a ring around the via
{
int ring_width = aVia->GetWidth() * 0.2;
m_gal->SetLineWidth( ring_width );
m_gal->SetLineWidth( m_lockedShadowMargin );
m_gal->DrawCircle( center, ( aVia->GetWidth() + ring_width ) / 2.0 );
m_gal->DrawCircle( center, ( aVia->GetWidth() + m_lockedShadowMargin ) / 2.0 );
}
// Clearance lines
@ -1453,7 +1453,7 @@ void PCB_PAINTER::draw( const PCB_SHAPE* aShape, int aLayer )
if( aLayer == LAYER_LOCKED_ITEM_SHADOW )
{
color = m_pcbSettings.GetColor( aShape, aLayer );
thickness = std::max( thickness * 3, Millimeter2iu( 0.2 ) );
thickness = thickness + m_lockedShadowMargin;
}
if( outline_mode )
@ -1754,8 +1754,9 @@ void PCB_PAINTER::draw( const PCB_TEXT* aText, int aLayer )
const COLOR4D color = m_pcbSettings.GetColor( aText, aLayer );
m_gal->SetIsFill( true );
m_gal->SetIsStroke( false );
m_gal->SetIsStroke( true );
m_gal->SetFillColor( color );
m_gal->SetLineWidth( m_lockedShadowMargin );
SHAPE_POLY_SET poly;
aText->TransformShapeWithClearanceToPolygon( poly, aText->GetLayer(), 0, m_maxError,
@ -1897,7 +1898,7 @@ void PCB_PAINTER::draw( const PCB_TEXTBOX* aTextBox, int aLayer )
const COLOR4D sh_color = m_pcbSettings.GetColor( aTextBox, aLayer );
m_gal->SetFillColor( sh_color );
m_gal->SetStrokeColor( sh_color );
attrs.m_StrokeWidth *= 3;
attrs.m_StrokeWidth += m_lockedShadowMargin;
}
if( cache )
@ -2085,7 +2086,17 @@ void PCB_PAINTER::draw( const FOOTPRINT* aFootprint, int aLayer )
const SHAPE_POLY_SET& poly = aFootprint->GetBoundingHull();
m_gal->DrawPolygon( poly );
#else
m_gal->DrawRectangle( aFootprint->GetBoundingBox( true, false ) );
EDA_RECT bbox = aFootprint->GetBoundingBox( false, false );
VECTOR2I topLeft = bbox.GetPosition();
VECTOR2I botRight = bbox.GetPosition() + bbox.GetSize();
m_gal->DrawRectangle( topLeft, botRight );
// Use segments to produce a margin with rounded corners
m_gal->DrawSegment( topLeft, VECTOR2I( botRight.x, topLeft.y ), m_lockedShadowMargin );
m_gal->DrawSegment( VECTOR2I( botRight.x, topLeft.y ), botRight, m_lockedShadowMargin );
m_gal->DrawSegment( botRight, VECTOR2I( topLeft.x, botRight.y ), m_lockedShadowMargin );
m_gal->DrawSegment( VECTOR2I( topLeft.x, botRight.y ), topLeft, m_lockedShadowMargin );
#endif
}

View File

@ -219,6 +219,7 @@ protected:
int m_maxError;
int m_holePlatingThickness;
int m_lockedShadowMargin;
};
} // namespace KIGFX