Browse Source

Cairo GAL: fix incorrect arc position in mirror mode.

It happens in print mode and also when the Pcb view is flipped.

Fixes: lp:1824720
https://bugs.launchpad.net/kicad/+bug/1824720

Fixes: lp:1822772
https://bugs.launchpad.net/kicad/+bug/1822772

Fixes: lp:1823147
https://bugs.launchpad.net/kicad/+bug/1823147
pull/15/head
jean-pierre charras 7 years ago
parent
commit
2e43c6c64e
  1. 23
      common/gal/cairo/cairo_gal.cpp

23
common/gal/cairo/cairo_gal.cpp

@ -259,6 +259,17 @@ void CAIRO_GAL_BASE::DrawArc( const VECTOR2D& aCenterPoint, double aRadius, doub
{
syncLineWidth();
// When the view is flipped, the coordinates are flipped by the matrix transform
// However, arc angles need a small change: swapping start and end, *without changing*
// the arc orientation.
// TODO: see the changes if the flip is for the Y axis
if( IsFlippedX() )
{
double delta = aEndAngle - aStartAngle;
aEndAngle = aStartAngle;
aStartAngle -= delta;
}
SWAP( aStartAngle, >, aEndAngle );
auto startAngleS = angle_xform( aStartAngle );
auto endAngleS = angle_xform( aEndAngle );
@ -304,6 +315,18 @@ void CAIRO_GAL_BASE::DrawArcSegment( const VECTOR2D& aCenterPoint, double aRadiu
}
syncLineWidth();
// When the view is flipped, the coordinates are flipped by the matrix transform
// However, arc angles need a small change: swapping start and end, *without changing*
// the arc orientation.
// TODO: see the changes if the flip is for the Y axis
if( IsFlippedX() )
{
double delta = aEndAngle - aStartAngle;
aEndAngle = aStartAngle;
aStartAngle -= delta;
}
SWAP( aStartAngle, >, aEndAngle );
auto startAngleS = angle_xform( aStartAngle );
auto endAngleS = angle_xform( aEndAngle );

Loading…
Cancel
Save