1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 14:37:46 +00:00

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
parent 9ecc78db1b
commit 90e836deae

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: