diff --git a/api/sixtyfps-node/native/lib.rs b/api/sixtyfps-node/native/lib.rs index 65647711c..6dbc9cb99 100644 --- a/api/sixtyfps-node/native/lib.rs +++ b/api/sixtyfps-node/native/lib.rs @@ -185,12 +185,7 @@ fn to_eval_value<'cx>( .value() .parse::() .or_else(|e| cx.throw_error(&e.to_string()))?; - Ok(Value::Color(sixtyfps_corelib::Color::from_argb_u8( - (c.a * 255.) as u8, - c.r, - c.g, - c.b, - ))) + Ok((sixtyfps_corelib::Color::from_argb_u8((c.a * 255.) as u8, c.r, c.g, c.b)).into()) } Type::Array(a) => match val.downcast::() { Ok(arr) => { @@ -281,7 +276,7 @@ fn to_js_value<'cx>( } js_object.as_value(cx) } - Value::Color(c) | Value::Brush(sixtyfps_corelib::Brush::SolidColor(c)) => JsString::new( + Value::Brush(sixtyfps_corelib::Brush::SolidColor(c)) => JsString::new( cx, &format!("#{:02x}{:02x}{:02x}{:02x}", c.red(), c.green(), c.blue(), c.alpha()), ) diff --git a/sixtyfps_runtime/interpreter/eval.rs b/sixtyfps_runtime/interpreter/eval.rs index 003254948..a58f62660 100644 --- a/sixtyfps_runtime/interpreter/eval.rs +++ b/sixtyfps_runtime/interpreter/eval.rs @@ -123,9 +123,7 @@ pub enum Value { Model(ModelPtr), /// An object Object(HashMap), - /// A color - Color(Color), - /// A brush + /// Corresespond to `brush` or `color` type in .60. For color, this is then a [`Brush::SolidColor`] Brush(Brush), /// The elements of a path PathElements(PathData), @@ -179,7 +177,6 @@ declare_value_conversion!(String => [SharedString] ); declare_value_conversion!(Bool => [bool] ); declare_value_conversion!(Image => [ImageReference] ); declare_value_conversion!(Object => [HashMap] ); -declare_value_conversion!(Color => [Color] ); declare_value_conversion!(Brush => [Brush] ); declare_value_conversion!(PathElements => [PathData]); declare_value_conversion!(EasingCurve => [corelib::animations::EasingCurve]); @@ -289,6 +286,23 @@ impl TryInto<()> for Value { } } +impl From for Value { + #[inline] + fn from(c: Color) -> Self { + Value::Brush(Brush::SolidColor(c)) + } +} +impl TryInto for Value { + type Error = Value; + #[inline] + fn try_into(self) -> Result { + match self { + Value::Brush(Brush::SolidColor(c)) => Ok(c), + _ => Err(self), + } + } +} + #[derive(Copy, Clone)] enum ComponentInstance<'a, 'id> { InstanceRef(InstanceRef<'a, 'id>), @@ -386,9 +400,8 @@ pub fn eval_expression(e: &Expression, local_context: &mut EvalLocalContext) -> (Value::Number(n), Type::String) => { Value::String(SharedString::from(format!("{}", n).as_str())) } - (Value::Number(n), Type::Color) => Value::Color(Color::from_argb_encoded(n as u32)), - (Value::Color(col), Type::Brush) => Value::Brush(Brush::SolidColor(col)), - (Value::Brush(brush), Type::Color) => Value::Color(brush.color()), + (Value::Number(n), Type::Color) => Color::from_argb_encoded(n as u32).into(), + (Value::Brush(brush), Type::Color) => brush.color().into(), (v, _) => v, } } @@ -556,9 +569,9 @@ pub fn eval_expression(e: &Expression, local_context: &mut EvalLocalContext) -> if arguments.len() != 2 { panic!("internal error: incorrect argument count to ColorBrighter") } - if let Value::Color(col) = eval_expression(&arguments[0], local_context) { + if let Value::Brush(Brush::SolidColor(col)) = eval_expression(&arguments[0], local_context) { if let Value::Number(factor) = eval_expression(&arguments[1], local_context) { - Value::Color(col.brighter(factor as _)) + col.brighter(factor as _).into() } else { panic!("Second argument not a number"); } @@ -570,9 +583,9 @@ pub fn eval_expression(e: &Expression, local_context: &mut EvalLocalContext) -> if arguments.len() != 2 { panic!("internal error: incorrect argument count to ColorDarker") } - if let Value::Color(col) = eval_expression(&arguments[0], local_context) { + if let Value::Brush(Brush::SolidColor(col)) = eval_expression(&arguments[0], local_context) { if let Value::Number(factor) = eval_expression(&arguments[1], local_context) { - Value::Color(col.darker(factor as _)) + col.darker(factor as _).into() } else { panic!("Second argument not a number"); }