use math::{ Point, Vec2, Radians };
use super::ArcFlags;
#[derive(Copy, Clone, Debug, PartialEq)]
pub enum SvgEvent {
MoveTo(Point),
RelativeMoveTo(Vec2),
LineTo(Point),
RelativeLineTo(Vec2),
QuadraticTo(Point, Point),
RelativeQuadraticTo(Vec2, Vec2),
CubicTo(Point, Point, Point),
RelativeCubicTo(Vec2, Vec2, Vec2),
ArcTo(Point, Vec2, Radians<f32>, ArcFlags),
RelativeArcTo(Vec2, Vec2, Radians<f32>, ArcFlags),
HorizontalLineTo(f32),
VerticalLineTo(f32),
RelativeHorizontalLineTo(f32),
RelativeVerticalLineTo(f32),
SmoothQuadraticTo(Point),
SmoothRelativeQuadraticTo(Vec2),
SmoothCubicTo(Point, Point),
SmoothRelativeCubicTo(Vec2, Vec2),
Close,
}
#[derive(Copy, Clone, Debug, PartialEq)]
pub enum PathEvent {
MoveTo(Point),
LineTo(Point),
QuadraticTo(Point, Point),
CubicTo(Point, Point, Point),
Close,
}
#[derive(Copy, Clone, Debug, PartialEq)]
pub enum QuadraticPathEvent {
MoveTo,
LineTo,
QuadraticTo(Point, Point),
Close,
}
#[derive(Copy, Clone, Debug, PartialEq)]
pub enum FlattenedEvent {
MoveTo(Point),
LineTo(Point),
Close,
}
impl PathEvent {
pub fn to_svg_event(self) -> SvgEvent {
return match self {
PathEvent::MoveTo(to) => { SvgEvent::MoveTo(to) }
PathEvent::LineTo(to) => { SvgEvent::LineTo(to) }
PathEvent::QuadraticTo(ctrl, to) => { SvgEvent::QuadraticTo(ctrl, to) }
PathEvent::CubicTo(ctrl1, ctrl2, to) => { SvgEvent::CubicTo(ctrl1, ctrl2, to) }
PathEvent::Close => { SvgEvent::Close }
};
}
pub fn destination(self) -> Option<Point> {
return match self {
PathEvent::MoveTo(to) => Some(to),
PathEvent::LineTo(to) => Some(to),
PathEvent::QuadraticTo(_, to) => Some(to),
PathEvent::CubicTo(_, _, to) => Some(to),
PathEvent::Close => None,
}
}
}
impl FlattenedEvent {
pub fn to_svg_event(self) -> SvgEvent {
return match self {
FlattenedEvent::MoveTo(to) => { SvgEvent::MoveTo(to) }
FlattenedEvent::LineTo(to) => { SvgEvent::LineTo(to) }
FlattenedEvent::Close => { SvgEvent::Close }
}
}
pub fn to_path_event(self) -> PathEvent {
return match self {
FlattenedEvent::MoveTo(to) => { PathEvent::MoveTo(to) }
FlattenedEvent::LineTo(to) => { PathEvent::LineTo(to) }
FlattenedEvent::Close => { PathEvent::Close }
}
}
}