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
This commit is contained in:
parent
cc439f9ab0
commit
2e43c6c64e
|
@ -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…
Reference in New Issue