diff options
| author | Laurenz <laurmaedje@gmail.com> | 2020-12-17 12:16:17 +0100 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2020-12-17 12:17:34 +0100 |
| commit | b02ba84264831ee97e7852f1e33cc78941dba13c (patch) | |
| tree | a9a33145de61d0b8b1f6a5bd65dae73b97f81f00 /src/library | |
| parent | 0adbfe894ae1252758d1d7fff1df5514824347eb (diff) | |
Test [rgb] 🎨
Diffstat (limited to 'src/library')
| -rw-r--r-- | src/library/style.rs | 29 |
1 files changed, 16 insertions, 13 deletions
diff --git a/src/library/style.rs b/src/library/style.rs index bb472536..804e9424 100644 --- a/src/library/style.rs +++ b/src/library/style.rs @@ -117,30 +117,33 @@ pub fn font(mut args: Args, ctx: &mut EvalContext) -> Value { /// `rgb`: Create an RGB(A) color. /// /// # Positional arguments -/// - The red component (integer between 0 and 255). -/// - The green component (integer between 0 and 255). -/// - The blue component (integer between 0 and 255). -/// - The alpha component (optional, integer between 0 and 255). +/// - The red component (float between 0.0 and 1.0). +/// - The green component (float between 0.0 and 1.0). +/// - The blue component (float between 0.0 and 1.0). +/// - The alpha component (optional, float between 0.0 and 1.0). pub fn rgb(mut args: Args, ctx: &mut EvalContext) -> Value { - let r = args.need::<_, Spanned<i64>>(ctx, 0, "red value"); - let g = args.need::<_, Spanned<i64>>(ctx, 1, "green value"); - let b = args.need::<_, Spanned<i64>>(ctx, 2, "blue value"); - let a = args.get::<_, Spanned<i64>>(ctx, 3); + let r = args.need::<_, Spanned<f64>>(ctx, 0, "red component"); + let g = args.need::<_, Spanned<f64>>(ctx, 1, "green component"); + let b = args.need::<_, Spanned<f64>>(ctx, 2, "blue component"); + let a = args.get::<_, Spanned<f64>>(ctx, 3); args.done(ctx); - let mut clamp = |component: Option<Spanned<i64>>, default| { + let mut healed = r.is_none() || g.is_none() || b.is_none(); + let mut clamp = |component: Option<Spanned<f64>>, default| { component.map_or(default, |c| { - if c.v < 0 || c.v > 255 { - ctx.diag(error!(c.span, "should be between 0 and 255")); + if c.v < 0.0 || c.v > 1.0 { + ctx.diag(error!(c.span, "should be between 0.0 and 1.0")); + healed = true; } - c.v.max(0).min(255) as u8 + (c.v.max(0.0).min(1.0) * 255.0).round() as u8 }) }; - Value::Color(RgbaColor::new( + Value::Color(RgbaColor::with_healed( clamp(r, 0), clamp(g, 0), clamp(b, 0), clamp(a, 255), + healed, )) } |
