fix another discrepancy with HTML5 arcTo

HTML5's arcTo does not draw a line from the end of the arc to `b`, so
this should not either.
This commit is contained in:
ThatsNoMoon 2022-06-04 09:31:28 -06:00 committed by Héctor Ramón Jiménez
parent 20b58e0214
commit 53d93a37dd
No known key found for this signature in database
GPG key ID: 140CC052C94F138E

View file

@ -42,9 +42,16 @@ impl Builder {
/// Adds a circular arc to the [`Path`] with the given control points and
/// radius.
///
/// This essentially draws two straight line segments, from the current
/// position to `a`, and from `a` to `b`, but smooths out the corner by
/// fitting a circular arc of `radius` tangent to both segments.
/// This essentially draws a straight line segment from the current
/// position to `a`, but fits a circular arc of `radius` tangent to that
/// segment and tangent to the line between `a` and `b`.
///
/// With another `.line_to(b)`, the result will be a path connecting the
/// starting point and `b` with straight line segments towards `a` and a
/// circular arc smoothing out the corner at `a`.
///
/// See [the HTML5 specification of `arcTo`](https://html.spec.whatwg.org/multipage/canvas.html#building-paths:dom-context-2d-arcto)
/// for more details and examples.
pub fn arc_to(&mut self, a: Point, b: Point, radius: f32) {
use lyon::{math, path};
@ -53,7 +60,7 @@ impl Builder {
let end = math::Point::new(b.x, b.y);
if start == mid || mid == end || radius == 0.0 {
let _ = self.raw.line_to(end);
let _ = self.raw.line_to(mid);
return;
}
@ -62,7 +69,7 @@ impl Builder {
+ end.x * (start.y - mid.y);
if double_area == 0.0 {
let _ = self.raw.line_to(end);
let _ = self.raw.line_to(mid);
return;
}
@ -91,8 +98,6 @@ impl Builder {
},
arc_end,
);
let _ = self.raw.line_to(end);
}
/// Adds an ellipse to the [`Path`] using a clockwise direction.