diff options
| author | Laurenz <laurmaedje@gmail.com> | 2022-04-07 18:04:29 +0200 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2022-04-07 18:04:29 +0200 |
| commit | 4bb6240b401605ef6d905273db07545e14f9a21f (patch) | |
| tree | b01163a5fce3fe62d16abcbdabf37bc373617ff1 /src/library/graphics | |
| parent | 1192132dc0a9e991953fd29e93f87c8437a53ea0 (diff) | |
Make `Relative` generic
Diffstat (limited to 'src/library/graphics')
| -rw-r--r-- | src/library/graphics/line.rs | 17 | ||||
| -rw-r--r-- | src/library/graphics/shape.rs | 2 | ||||
| -rw-r--r-- | src/library/graphics/transform.rs | 8 |
3 files changed, 15 insertions, 12 deletions
diff --git a/src/library/graphics/line.rs b/src/library/graphics/line.rs index 1ca25bd9..571506c1 100644 --- a/src/library/graphics/line.rs +++ b/src/library/graphics/line.rs @@ -3,8 +3,10 @@ use crate::library::prelude::*; /// Display a line without affecting the layout. #[derive(Debug, Hash)] pub struct LineNode { - origin: Spec<Relative>, - delta: Spec<Relative>, + /// Where the line starts. + origin: Spec<Relative<Length>>, + /// The offset from the `origin` where the line ends. + delta: Spec<Relative<Length>>, } #[node] @@ -15,14 +17,15 @@ impl LineNode { pub const THICKNESS: Length = Length::pt(1.0); fn construct(_: &mut Context, args: &mut Args) -> TypResult<Content> { - let origin = args.named::<Spec<Relative>>("origin")?.unwrap_or_default(); - let delta = match args.named::<Spec<Relative>>("to")? { + let origin = args.named("origin")?.unwrap_or_default(); + let delta = match args.named::<Spec<Relative<Length>>>("to")? { Some(to) => to.zip(origin).map(|(to, from)| to - from), None => { - let length = - args.named::<Relative>("length")?.unwrap_or(Length::cm(1.0).into()); - let angle = args.named::<Angle>("angle")?.unwrap_or_default(); + let length = args + .named::<Relative<Length>>("length")? + .unwrap_or(Length::cm(1.0).into()); + let angle = args.named::<Angle>("angle")?.unwrap_or_default(); let x = angle.cos() * length; let y = angle.sin() * length; diff --git a/src/library/graphics/shape.rs b/src/library/graphics/shape.rs index 3f338d1a..9faa4c52 100644 --- a/src/library/graphics/shape.rs +++ b/src/library/graphics/shape.rs @@ -28,7 +28,7 @@ impl<const S: ShapeKind> ShapeNode<S> { /// The stroke's thickness. pub const THICKNESS: Length = Length::pt(1.0); /// How much to pad the shape's content. - pub const PADDING: Relative = Relative::zero(); + pub const PADDING: Relative<Length> = Relative::zero(); fn construct(_: &mut Context, args: &mut Args) -> TypResult<Content> { let size = match S { diff --git a/src/library/graphics/transform.rs b/src/library/graphics/transform.rs index 1ce91f28..eb419a7e 100644 --- a/src/library/graphics/transform.rs +++ b/src/library/graphics/transform.rs @@ -29,11 +29,11 @@ impl<const T: TransformKind> TransformNode<T> { MOVE => { let tx = args.named("x")?.unwrap_or_default(); let ty = args.named("y")?.unwrap_or_default(); - Transform::translation(tx, ty) + Transform::translate(tx, ty) } ROTATE => { let angle = args.named_or_find("angle")?.unwrap_or_default(); - Transform::rotation(angle) + Transform::rotate(angle) } SCALE | _ => { let all = args.find()?; @@ -62,9 +62,9 @@ impl<const T: TransformKind> Layout for TransformNode<T> { for frame in &mut frames { let Spec { x, y } = origin.zip(frame.size).map(|(o, s)| o.resolve(s)); - let transform = Transform::translation(x, y) + let transform = Transform::translate(x, y) .pre_concat(self.transform) - .pre_concat(Transform::translation(-x, -y)); + .pre_concat(Transform::translate(-x, -y)); Arc::make_mut(frame).transform(transform); } |
