diff --git a/common/gal/cairo/cairo_gal.cpp b/common/gal/cairo/cairo_gal.cpp index 76a9da7e8d..fd66fd46a1 100644 --- a/common/gal/cairo/cairo_gal.cpp +++ b/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 );