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

This fixes both the incorrect arc and ellipse from #22817.
This commit is contained in:
MacDue 2024-03-24 15:17:50 +00:00 committed by Andreas Kling
parent b31fb36ed3
commit c6899b79b6
Notes: sideshowbarker 2024-07-17 02:56:25 +09:00
4 changed files with 33 additions and 0 deletions

View file

@ -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>

View file

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 999 B

View file

@ -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();