summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/library/color.rs31
1 files changed, 18 insertions, 13 deletions
diff --git a/src/library/color.rs b/src/library/color.rs
index eab84fd0..12bebdc9 100644
--- a/src/library/color.rs
+++ b/src/library/color.rs
@@ -5,22 +5,27 @@ use super::*;
pub async fn rgb(span: Span, mut args: TableValue, _: 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 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 color = RgbaColor::new(
- clamp(args.expect::<Spanned<f64>>("red value", span, &mut f), &mut f),
- clamp(args.expect::<Spanned<f64>>("green value", span, &mut f), &mut f),
- clamp(args.expect::<Spanned<f64>>("blue value", span, &mut f), &mut f),
- clamp(args.take::<Spanned<f64>>(), &mut f),
+ clamp(r, 0),
+ clamp(g, 0),
+ clamp(b, 0),
+ clamp(a, 255),
);
args.unexpected(&mut f);
Pass::new(Value::Color(color), f)
}
-
-fn clamp(component: Option<Spanned<f64>>, f: &mut Feedback) -> u8 {
- 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()
-}