Преглед изворни кода

LibWeb: Normalize the angle delta in `CanvasPath::ellipse()`

This fixes both the incorrect arc and ellipse from #22817.
MacDue пре 1 година
родитељ
комит
c6899b79b6

+ 22 - 0
Tests/LibWeb/Ref/canvas-arcs-and-ellipses.html

@@ -0,0 +1,22 @@
+<link rel="match" href="reference/canvas-arcs-and-ellipses-ref.html" />
+<style>
+  canvas {
+    border: 1px solid black;
+    image-rendering: pixelated;
+  }
+</style>
+<canvas id="canvas" width="125" height="125"></canvas>
+<script>
+  const canvas = document.getElementById("canvas")
+
+  const context = canvas.getContext("2d");
+  context.beginPath();
+  context.arc(59, 55, 38, 5.3849570248895775, 2.9421639085067177);
+  context.stroke();
+  context.fill();
+
+  context.beginPath();
+  context.ellipse(20,20,15,8,1.2273132071162383,4.1926143018618225,2.8853539230051624);
+  context.stroke();
+  context.fill();
+</script>

+ 9 - 0
Tests/LibWeb/Ref/reference/canvas-arcs-and-ellipses-ref.html

@@ -0,0 +1,9 @@
+<style>
+  * {
+    margin: 0;
+  }
+  body {
+    background-color: white;
+  }
+</style>
+<img src="./images/canvas-arcs-and-ellipses-ref.png">

BIN
Tests/LibWeb/Ref/reference/images/canvas-arcs-and-ellipses-ref.png


+ 2 - 0
Userland/Libraries/LibWeb/HTML/Canvas/CanvasPath.cpp

@@ -157,6 +157,8 @@ WebIDL::ExceptionOr<void> CanvasPath::ellipse(float x, float y, float radius_x,
     auto end_point = resolve_point_with_angle(end_angle);
 
     auto delta_theta = end_angle - start_angle;
+    if (delta_theta < 0)
+        delta_theta += AK::Pi<float> * 2;
 
     auto transform = active_transform();