summaryrefslogtreecommitdiff
path: root/src/library/graphics
diff options
context:
space:
mode:
authorMartin Haug <mhaug@live.de>2022-03-17 10:50:51 +0100
committerMartin Haug <mhaug@live.de>2022-03-17 10:50:51 +0100
commit6f5b721fe56fe6e3735d03b07e3716fc39572639 (patch)
tree002ed75565e02baeb1ce1b9ec53f0a92491d17ab /src/library/graphics
parent4d617bcd67f9e42218da190dc9a0bf2f10d4b78d (diff)
CR: I'm gonna make him a refactor he can't refuse
Diffstat (limited to 'src/library/graphics')
-rw-r--r--src/library/graphics/line.rs29
1 files changed, 16 insertions, 13 deletions
diff --git a/src/library/graphics/line.rs b/src/library/graphics/line.rs
index 141abb08..a650c76c 100644
--- a/src/library/graphics/line.rs
+++ b/src/library/graphics/line.rs
@@ -2,18 +2,21 @@ use crate::library::prelude::*;
/// Display a line without affecting the layout.
#[derive(Debug, Hash)]
-pub struct LineNode(Spec<Linear>, Spec<Linear>);
+pub struct LineNode {
+ origin: Spec<Linear>,
+ delta: Spec<Linear>,
+}
#[node]
impl LineNode {
/// How the stroke the line.
- pub const STROKE: Smart<Paint> = Smart::Auto;
+ pub const STROKE: Paint = Color::BLACK.into();
/// The line's thickness.
pub const THICKNESS: Length = Length::pt(1.0);
fn construct(_: &mut Context, args: &mut Args) -> TypResult<Content> {
let origin = args.named::<Spec<Linear>>("origin")?.unwrap_or_default();
- let to = match args.named::<Spec<Linear>>("to")? {
+ let delta = match args.named::<Spec<Linear>>("to")? {
Some(to) => to.zip(origin).map(|(to, from)| to - from),
None => {
let length =
@@ -27,7 +30,7 @@ impl LineNode {
}
};
- Ok(Content::inline(Self(origin, to)))
+ Ok(Content::inline(Self { origin, delta }))
}
}
@@ -38,23 +41,23 @@ impl Layout for LineNode {
regions: &Regions,
styles: StyleChain,
) -> TypResult<Vec<Arc<Frame>>> {
- let target = regions.expand.select(regions.first, Size::zero());
- let mut frame = Frame::new(target);
-
let thickness = styles.get(Self::THICKNESS);
let stroke = Some(Stroke {
- paint: styles.get(Self::STROKE).unwrap_or(Color::BLACK.into()),
+ paint: styles.get(Self::STROKE),
thickness,
});
let resolved_origin =
- self.0.zip(regions.base).map(|(l, b)| Linear::resolve(l, b));
- let resolved_to = self.1.zip(regions.base).map(|(l, b)| Linear::resolve(l, b));
-
- let geometry = Geometry::Line(resolved_to.into());
+ self.origin.zip(regions.base).map(|(l, b)| Linear::resolve(l, b));
+ let resolved_delta =
+ self.delta.zip(regions.base).map(|(l, b)| Linear::resolve(l, b));
+ let geometry = Geometry::Line(resolved_delta.to_point());
let shape = Shape { geometry, fill: None, stroke };
- frame.prepend(resolved_origin.into(), Element::Shape(shape));
+
+ let target = regions.expand.select(regions.first, Size::zero());
+ let mut frame = Frame::new(target);
+ frame.push(resolved_origin.to_point(), Element::Shape(shape));
Ok(vec![Arc::new(frame)])
}