makepad_vector/path/
path_command.rs

1use crate::geometry::{Point, Transform, Transformation};
2
3/// A command in a path
4#[derive(Clone, Copy, Debug, PartialEq)]
5pub enum PathCommand {
6    MoveTo(Point),
7    LineTo(Point),
8    QuadraticTo(Point, Point),
9    CubicTo(Point, Point, Point),
10    Close,
11}
12
13impl Transform for PathCommand {
14    fn transform<T>(self, t: &T) -> PathCommand
15    where
16        T: Transformation,
17    {
18        match self {
19            PathCommand::MoveTo(p) => PathCommand::MoveTo(p.transform(t)),
20            PathCommand::LineTo(p) => PathCommand::LineTo(p.transform(t)),
21            PathCommand::QuadraticTo(p1, p) => {
22                PathCommand::QuadraticTo(p1.transform(t), p.transform(t))
23            }
24            PathCommand::CubicTo(p1, p2, p) => {
25                PathCommand::CubicTo(p1.transform(t), p2.transform(t), p.transform(t))
26            }
27            PathCommand::Close => PathCommand::Close,
28        }
29    }
30
31    fn transform_mut<T>(&mut self, t: &T)
32    where
33        T: Transformation,
34    {
35        *self = self.transform(t);
36    }
37}
38