diff --git a/canvas/src/lib.rs b/canvas/src/lib.rs index e5a448a2..efbb9df9 100644 --- a/canvas/src/lib.rs +++ b/canvas/src/lib.rs @@ -25,6 +25,7 @@ use pathfinder_renderer::scene::{PathObject, Scene}; use pathfinder_text::{SceneExt, TextRenderMode}; use skribo::{FontCollection, FontFamily, Layout, TextStyle}; use std::default::Default; +use std::f32::consts::PI; use std::mem; use std::sync::Arc; @@ -325,6 +326,24 @@ impl Path2D { self.current_contour.close(); } + pub fn ellipse(&mut self, + center: Point2DF, + axes: Point2DF, + rotation: f32, + start_angle: f32, + end_angle: f32) { + self.flush_current_contour(); + + let mut transform = Transform2DF::from_rotation(rotation); + transform = transform.post_mul(&Transform2DF::from_scale(axes)); + transform = transform.post_mul(&Transform2DF::from_translation(center)); + self.current_contour.push_arc(&transform, start_angle, end_angle); + + if end_angle - start_angle >= 2.0 * PI { + self.current_contour.close(); + } + } + fn into_outline(mut self) -> Outline { self.flush_current_contour(); self.outline diff --git a/examples/canvas_moire/src/main.rs b/examples/canvas_moire/src/main.rs index c231aec6..a8618098 100644 --- a/examples/canvas_moire/src/main.rs +++ b/examples/canvas_moire/src/main.rs @@ -152,7 +152,7 @@ impl MoireRenderer { for index in 0..CIRCLE_COUNT { let radius = (index + 1) as f32 * CIRCLE_SPACING * self.device_pixel_ratio; let mut path = Path2D::new(); - path.arc(center, radius, 0.0, PI * 2.0); + path.ellipse(center, Point2DF::splat(radius), 0.0, 0.0, PI * 2.0); canvas.stroke_path(path); } }