|
|
@ -316,93 +316,95 @@ void LIB_SHAPE::print( const RENDER_SETTINGS* aSettings, const VECTOR2I& aOffset |
|
|
|
std::swap( pt1, pt2 ); |
|
|
|
} |
|
|
|
|
|
|
|
if( forceNoFill || GetFillMode() == FILL_T::NO_FILL ) |
|
|
|
COLOR4D fillColor = COLOR4D::UNSPECIFIED; |
|
|
|
|
|
|
|
if( !forceNoFill ) |
|
|
|
{ |
|
|
|
penWidth = std::max( penWidth, aSettings->GetDefaultPenWidth() ); |
|
|
|
if( GetFillMode() == FILL_T::FILLED_SHAPE ) |
|
|
|
fillColor = color; |
|
|
|
else if( GetFillMode() == FILL_T::FILLED_WITH_BG_BODYCOLOR ) |
|
|
|
fillColor = aSettings->GetLayerColor( LAYER_DEVICE_BACKGROUND ); |
|
|
|
else if( GetFillMode() == FILL_T::FILLED_WITH_COLOR ) |
|
|
|
fillColor = GetFillColor(); |
|
|
|
} |
|
|
|
|
|
|
|
if( fillColor != COLOR4D::UNSPECIFIED ) |
|
|
|
{ |
|
|
|
switch( GetShape() ) |
|
|
|
{ |
|
|
|
case SHAPE_T::ARC: |
|
|
|
GRArc( DC, pt1, pt2, c, penWidth, color ); |
|
|
|
GRFilledArc( DC, pt1, pt2, c, 0, fillColor, fillColor ); |
|
|
|
break; |
|
|
|
|
|
|
|
case SHAPE_T::CIRCLE: |
|
|
|
GRCircle( DC, pt1, GetRadius(), penWidth, color ); |
|
|
|
GRFilledCircle( DC, pt1, GetRadius(), 0, fillColor, fillColor ); |
|
|
|
break; |
|
|
|
|
|
|
|
case SHAPE_T::RECT: |
|
|
|
GRRect( DC, pt1, pt2, penWidth, color ); |
|
|
|
GRFilledRect( DC, pt1, pt2, 0, fillColor, fillColor ); |
|
|
|
break; |
|
|
|
|
|
|
|
case SHAPE_T::POLY: |
|
|
|
GRPoly( DC, ptCount, buffer, false, penWidth, color, color ); |
|
|
|
GRPoly( DC, ptCount, buffer, true, 0, fillColor, fillColor ); |
|
|
|
break; |
|
|
|
|
|
|
|
case SHAPE_T::BEZIER: |
|
|
|
GRPoly( DC, ptCount, buffer, false, penWidth, color, color ); |
|
|
|
GRPoly( DC, ptCount, buffer, true, 0, fillColor, fillColor ); |
|
|
|
break; |
|
|
|
|
|
|
|
default: |
|
|
|
UNIMPLEMENTED_FOR( SHAPE_T_asString() ); |
|
|
|
} |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
COLOR4D fillColor = color; |
|
|
|
|
|
|
|
if( GetFillMode() == FILL_T::FILLED_WITH_BG_BODYCOLOR ) |
|
|
|
fillColor = aSettings->GetLayerColor( LAYER_DEVICE_BACKGROUND ); |
|
|
|
else if( GetFillMode() == FILL_T::FILLED_WITH_COLOR ) |
|
|
|
fillColor = GetFillColor(); |
|
|
|
penWidth = std::max( penWidth, aSettings->GetDefaultPenWidth() ); |
|
|
|
|
|
|
|
if( GetEffectiveLineStyle() == PLOT_DASH_TYPE::SOLID ) |
|
|
|
{ |
|
|
|
switch( GetShape() ) |
|
|
|
{ |
|
|
|
case SHAPE_T::ARC: |
|
|
|
// If we stroke in GRFilledArc it will stroke the two radials too, so we have to
|
|
|
|
// fill and stroke separately
|
|
|
|
|
|
|
|
GRFilledArc( DC, pt1, pt2, c, 0, fillColor, fillColor ); |
|
|
|
|
|
|
|
if( penWidth > 0 ) |
|
|
|
GRArc( DC, pt1, pt2, c, penWidth, color ); |
|
|
|
|
|
|
|
GRArc( DC, pt1, pt2, c, penWidth, color ); |
|
|
|
break; |
|
|
|
|
|
|
|
case SHAPE_T::CIRCLE: |
|
|
|
GRFilledCircle( DC, pt1, GetRadius(), penWidth, color, fillColor ); |
|
|
|
GRCircle( DC, pt1, GetRadius(), penWidth, color ); |
|
|
|
break; |
|
|
|
|
|
|
|
case SHAPE_T::RECT: |
|
|
|
// GRFilledRect seems to have issues printing a border over the background colour,
|
|
|
|
// so we fill and stroke separately
|
|
|
|
|
|
|
|
GRFilledRect( DC, pt1, pt2, 0, color, fillColor ); |
|
|
|
|
|
|
|
if( penWidth > 0 ) |
|
|
|
GRRect( DC, pt1, pt2, penWidth, color ); |
|
|
|
|
|
|
|
GRRect( DC, pt1, pt2, penWidth, color ); |
|
|
|
break; |
|
|
|
|
|
|
|
case SHAPE_T::POLY: |
|
|
|
|
|
|
|
GRPoly( DC, ptCount, buffer, true, 0, fillColor, fillColor ); |
|
|
|
|
|
|
|
if( penWidth > 0 ) |
|
|
|
GRPoly( DC, ptCount, buffer, false, penWidth, color, fillColor ); |
|
|
|
|
|
|
|
GRPoly( DC, ptCount, buffer, false, penWidth, color, color ); |
|
|
|
break; |
|
|
|
|
|
|
|
case SHAPE_T::BEZIER: |
|
|
|
if( penWidth > 0 ) |
|
|
|
GRPoly( DC, ptCount, buffer, true, penWidth, color, fillColor ); |
|
|
|
else |
|
|
|
GRPoly( DC, ptCount, buffer, true, 0, fillColor, fillColor ); |
|
|
|
GRPoly( DC, ptCount, buffer, false, penWidth, color, color ); |
|
|
|
break; |
|
|
|
|
|
|
|
default: |
|
|
|
UNIMPLEMENTED_FOR( SHAPE_T_asString() ); |
|
|
|
} |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
std::vector<SHAPE*> shapes = MakeEffectiveShapes( true ); |
|
|
|
|
|
|
|
for( SHAPE* shape : shapes ) |
|
|
|
{ |
|
|
|
STROKE_PARAMS::Stroke( shape, GetEffectiveLineStyle(), penWidth, aSettings, |
|
|
|
[&]( const VECTOR2I& a, const VECTOR2I& b ) |
|
|
|
{ |
|
|
|
VECTOR2I pts = aTransform.TransformCoordinate( a ) + aOffset; |
|
|
|
VECTOR2I pte = aTransform.TransformCoordinate( b ) + aOffset; |
|
|
|
GRLine( DC, pts.x, pts.y, pte.x, pte.y, penWidth, color ); |
|
|
|
} ); |
|
|
|
} |
|
|
|
|
|
|
|
for( SHAPE* shape : shapes ) |
|
|
|
delete shape; |
|
|
|
} |
|
|
|
|
|
|
|
delete[] buffer; |
|
|
|
} |
|
|
|