diff --git a/src/builtin/color/rgb.rs b/src/builtin/color/rgb.rs index 350795b..8f8c5a1 100644 --- a/src/builtin/color/rgb.rs +++ b/src/builtin/color/rgb.rs @@ -39,7 +39,7 @@ fn inner_rgb( .into()); } - let blue = match channels.pop() { + let blue = match channels.pop().map(|v| v.eval(args.span()).unwrap().node) { Some(Value::Dimension(n, Unit::None)) => n, Some(Value::Dimension(n, Unit::Percent)) => (n / Number::from(100)) * Number::from(255), Some(v) if v.is_special_function() => { @@ -66,7 +66,7 @@ fn inner_rgb( None => return Err(("Missing element $blue.", args.span()).into()), }; - let green = match channels.pop() { + let green = match channels.pop().map(|v| v.eval(args.span()).unwrap().node) { Some(Value::Dimension(n, Unit::None)) => n, Some(Value::Dimension(n, Unit::Percent)) => (n / Number::from(100)) * Number::from(255), Some(v) if v.is_special_function() => { @@ -92,7 +92,7 @@ fn inner_rgb( None => return Err(("Missing element $green.", args.span()).into()), }; - let red = match channels.pop() { + let red = match channels.pop().map(|v| v.eval(args.span()).unwrap().node) { Some(Value::Dimension(n, Unit::None)) => n, Some(Value::Dimension(n, Unit::Percent)) => (n / Number::from(100)) * Number::from(255), Some(v) if v.is_special_function() => { diff --git a/tests/color.rs b/tests/color.rs index 8bd523e..4443206 100644 --- a/tests/color.rs +++ b/tests/color.rs @@ -572,3 +572,8 @@ test!( "a {\n color: opacity(transparent);\n}\n", "a {\n color: 0;\n}\n" ); +test!( + negative_values_in_rgb, + "a {\n color: rgb(-1 -1 -1);\n}\n", + "a {\n color: black;\n}\n" +);