diff options
| author | Laurenz <laurmaedje@gmail.com> | 2020-10-03 15:07:57 +0200 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2020-10-03 15:07:57 +0200 |
| commit | 95bae5725cf6495644e2593f8492f1cd0e5bd3c1 (patch) | |
| tree | 919dd90cac7623bcbbc09d9c92399eaa65e537f2 /src/library | |
| parent | 0fc25d732d7cbc37cf801645849d1060f2cec4a3 (diff) | |
Int, Float, Relative and Linear values 🍉
Diffstat (limited to 'src/library')
| -rw-r--r-- | src/library/boxed.rs | 18 | ||||
| -rw-r--r-- | src/library/color.rs | 24 | ||||
| -rw-r--r-- | src/library/font.rs | 15 | ||||
| -rw-r--r-- | src/library/page.rs | 22 | ||||
| -rw-r--r-- | src/library/spacing.rs | 6 |
5 files changed, 41 insertions, 44 deletions
diff --git a/src/library/boxed.rs b/src/library/boxed.rs index ac0bc19e..b36a151b 100644 --- a/src/library/boxed.rs +++ b/src/library/boxed.rs @@ -1,5 +1,5 @@ use super::*; -use crate::length::ScaleLength; +use crate::geom::Linear; /// `box`: Layouts its contents into a box. /// @@ -19,17 +19,17 @@ pub async fn boxed( ctx.spaces.truncate(1); ctx.repeat = false; - if let Some(width) = args.take_key::<ScaleLength>("width", &mut f) { - let length = width.raw_scaled(ctx.base.width); - ctx.base.width = length; - ctx.spaces[0].size.width = length; + if let Some(width) = args.take_key::<Linear>("width", &mut f) { + let abs = width.eval(ctx.base.width); + ctx.base.width = abs; + ctx.spaces[0].size.width = abs; ctx.spaces[0].expansion.horizontal = true; } - if let Some(height) = args.take_key::<ScaleLength>("height", &mut f) { - let length = height.raw_scaled(ctx.base.height); - ctx.base.height = length; - ctx.spaces[0].size.height = length; + if let Some(height) = args.take_key::<Linear>("height", &mut f) { + let abs = height.eval(ctx.base.height); + ctx.base.height = abs; + ctx.spaces[0].size.height = abs; ctx.spaces[0].expansion.vertical = true; } diff --git a/src/library/color.rs b/src/library/color.rs index 43d9253f..a11966ea 100644 --- a/src/library/color.rs +++ b/src/library/color.rs @@ -5,20 +5,18 @@ use crate::color::RgbaColor; pub async fn rgb(span: Span, mut args: DictValue, _: LayoutContext<'_>) -> Pass<Value> { let mut f = Feedback::new(); - let r = args.expect::<Spanned<f64>>("red value", span, &mut f); - let g = args.expect::<Spanned<f64>>("green value", span, &mut f); - let b = args.expect::<Spanned<f64>>("blue value", span, &mut f); - let a = args.take::<Spanned<f64>>(); + let r = args.expect::<Spanned<i64>>("red value", span, &mut f); + let g = args.expect::<Spanned<i64>>("green value", span, &mut f); + let b = args.expect::<Spanned<i64>>("blue value", span, &mut f); + let a = args.take::<Spanned<i64>>(); - let mut clamp = |component: Option<Spanned<f64>>, default| { - component - .map(|c| { - if c.v < 0.0 || c.v > 255.0 { - error!(@f, c.span, "should be between 0 and 255") - } - c.v.min(255.0).max(0.0).round() as u8 - }) - .unwrap_or(default) + let mut clamp = |component: Option<Spanned<i64>>, default| { + component.map_or(default, |c| { + if c.v < 0 || c.v > 255 { + error!(@f, c.span, "should be between 0 and 255") + } + c.v.max(0).min(255) as u8 + }) }; let color = RgbaColor::new(clamp(r, 0), clamp(g, 0), clamp(b, 0), clamp(a, 255)); diff --git a/src/library/font.rs b/src/library/font.rs index 1d58c4ce..e12bda2f 100644 --- a/src/library/font.rs +++ b/src/library/font.rs @@ -2,7 +2,7 @@ use fontdock::{FontStretch, FontStyle, FontWeight}; use super::*; use crate::eval::StringLike; -use crate::length::ScaleLength; +use crate::geom::Linear; /// `font`: Configure the font. /// @@ -56,13 +56,12 @@ pub async fn font(_: Span, mut args: DictValue, ctx: LayoutContext<'_>) -> Pass< let content = args.take::<SynTree>(); - if let Some(s) = args.take::<ScaleLength>() { - match s { - ScaleLength::Absolute(length) => { - text.base_font_size = length.as_raw(); - text.font_scale = 1.0; - } - ScaleLength::Scaled(scale) => text.font_scale = scale, + if let Some(linear) = args.take::<Linear>() { + if linear.rel == 0.0 { + text.font_size.base = linear.abs; + text.font_size.scale = Linear::rel(1.0); + } else { + text.font_size.scale = linear; } } diff --git a/src/library/page.rs b/src/library/page.rs index 8188bb67..77eb6244 100644 --- a/src/library/page.rs +++ b/src/library/page.rs @@ -1,8 +1,8 @@ use std::mem; use super::*; -use crate::geom::Sides; -use crate::length::{Length, ScaleLength}; +use crate::eval::Abs; +use crate::geom::{Linear, Sides}; use crate::paper::{Paper, PaperClass}; /// `page`: Configure pages. @@ -28,33 +28,33 @@ pub async fn page(_: Span, mut args: DictValue, ctx: LayoutContext<'_>) -> Pass< style.size = paper.size(); } - if let Some(width) = args.take_key::<Length>("width", &mut f) { + if let Some(Abs(width)) = args.take_key::<Abs>("width", &mut f) { style.class = PaperClass::Custom; - style.size.width = width.as_raw(); + style.size.width = width; } - if let Some(height) = args.take_key::<Length>("height", &mut f) { + if let Some(Abs(height)) = args.take_key::<Abs>("height", &mut f) { style.class = PaperClass::Custom; - style.size.height = height.as_raw(); + style.size.height = height; } - if let Some(margins) = args.take_key::<ScaleLength>("margins", &mut f) { + if let Some(margins) = args.take_key::<Linear>("margins", &mut f) { style.margins = Sides::uniform(Some(margins)); } - if let Some(left) = args.take_key::<ScaleLength>("left", &mut f) { + if let Some(left) = args.take_key::<Linear>("left", &mut f) { style.margins.left = Some(left); } - if let Some(top) = args.take_key::<ScaleLength>("top", &mut f) { + if let Some(top) = args.take_key::<Linear>("top", &mut f) { style.margins.top = Some(top); } - if let Some(right) = args.take_key::<ScaleLength>("right", &mut f) { + if let Some(right) = args.take_key::<Linear>("right", &mut f) { style.margins.right = Some(right); } - if let Some(bottom) = args.take_key::<ScaleLength>("bottom", &mut f) { + if let Some(bottom) = args.take_key::<Linear>("bottom", &mut f) { style.margins.bottom = Some(bottom); } diff --git a/src/library/spacing.rs b/src/library/spacing.rs index 6596717b..03f52ba4 100644 --- a/src/library/spacing.rs +++ b/src/library/spacing.rs @@ -1,6 +1,6 @@ use super::*; +use crate::geom::Linear; use crate::layout::SpacingKind; -use crate::length::ScaleLength; /// `h`: Add horizontal spacing. /// @@ -26,10 +26,10 @@ fn spacing( ) -> Pass<Value> { let mut f = Feedback::new(); - let spacing = args.expect::<ScaleLength>("spacing", name, &mut f); + let spacing = args.expect::<Linear>("spacing", name, &mut f); let commands = if let Some(spacing) = spacing { let axis = axis.to_gen(ctx.sys); - let spacing = spacing.raw_scaled(ctx.style.text.font_size()); + let spacing = spacing.eval(ctx.style.text.font_size()); vec![AddSpacing(spacing, SpacingKind::Hard, axis)] } else { vec![] |
