summaryrefslogtreecommitdiff
path: root/src/library
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2020-12-17 12:16:17 +0100
committerLaurenz <laurmaedje@gmail.com>2020-12-17 12:17:34 +0100
commitb02ba84264831ee97e7852f1e33cc78941dba13c (patch)
treea9a33145de61d0b8b1f6a5bd65dae73b97f81f00 /src/library
parent0adbfe894ae1252758d1d7fff1df5514824347eb (diff)
Test [rgb] 🎨
Diffstat (limited to 'src/library')
-rw-r--r--src/library/style.rs29
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,
))
}