LibGfx: Fix elliptical arcs after non orientation preserving transform

That is flipping/reflecting the arc.
This commit is contained in:
MacDue 2023-07-07 22:18:58 +01:00 committed by Andreas Kling
commit 90e836deae
Notes: sideshowbarker 2024-07-17 00:16:31 +09:00

View file

@ -347,15 +347,16 @@ Path Path::copy_transformed(Gfx::AffineTransform const& transform) const
}
case Segment::Type::EllipticalArcTo: {
auto const& arc_segment = static_cast<EllipticalArcSegment const&>(*segment);
auto det_negative = transform.determinant() < 0;
result.elliptical_arc_to(
transform.map(segment->point()),
transform.map(arc_segment.center()),
transform.map(arc_segment.radii()),
arc_segment.x_axis_rotation() + transform.rotation(),
arc_segment.theta_1(),
arc_segment.theta_delta(),
det_negative ? AK::Pi<float> * 2 - arc_segment.theta_1() : arc_segment.theta_1(),
det_negative ? -arc_segment.theta_delta() : arc_segment.theta_delta(),
arc_segment.large_arc(),
arc_segment.sweep());
det_negative ? !arc_segment.sweep() : arc_segment.sweep());
break;
}
case Segment::Type::Invalid: