From 90e836deae0e71265b8d5a641232f4ba5fdf45c8 Mon Sep 17 00:00:00 2001 From: MacDue Date: Fri, 7 Jul 2023 22:18:58 +0100 Subject: [PATCH] LibGfx: Fix elliptical arcs after non orientation preserving transform That is flipping/reflecting the arc. --- Userland/Libraries/LibGfx/Path.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Userland/Libraries/LibGfx/Path.cpp b/Userland/Libraries/LibGfx/Path.cpp index a389c718dc..ff849c3a4e 100644 --- a/Userland/Libraries/LibGfx/Path.cpp +++ b/Userland/Libraries/LibGfx/Path.cpp @@ -347,15 +347,16 @@ Path Path::copy_transformed(Gfx::AffineTransform const& transform) const } case Segment::Type::EllipticalArcTo: { auto const& arc_segment = static_cast(*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 * 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: