From 404ebf5b3a83c4b69e4e09f253f5b6400ab87cbb Mon Sep 17 00:00:00 2001 From: Manish Goregaokar Date: Sun, 12 Feb 2017 16:02:29 -0800 Subject: [PATCH] stylo: Support color presentation attributes --- ports/geckolib/glue.rs | 44 ++++++++++++++++++++++++++++++++++++------ 1 file changed, 38 insertions(+), 6 deletions(-) diff --git a/ports/geckolib/glue.rs b/ports/geckolib/glue.rs index 41302587fb20..94877a11fa03 100644 --- a/ports/geckolib/glue.rs +++ b/ports/geckolib/glue.rs @@ -1103,18 +1103,50 @@ pub extern "C" fn Servo_DeclarationBlock_SetAutoValue(declarations: } #[no_mangle] -pub extern "C" fn Servo_DeclarationBlock_SetCurrentColor(_: +pub extern "C" fn Servo_DeclarationBlock_SetCurrentColor(declarations: RawServoDeclarationBlockBorrowed, - _: nsCSSPropertyID) { + property: nsCSSPropertyID) { + use cssparser::Color; + use style::properties::{DeclaredValue, PropertyDeclaration, LonghandId}; + use style::values::specified::CSSColor; + let declarations = RwLock::::as_arc(&declarations); + let long = get_longhand_from_id!(property); + let cc = CSSColor { parsed: Color::CurrentColor, authored: None }; + + let prop = match_wrap_declared! { long, + BorderTopColor => cc, + BorderRightColor => cc, + BorderBottomColor => cc, + BorderLeftColor => cc, + }; + declarations.write().declarations.push((prop, Default::default())); } #[no_mangle] -pub extern "C" fn Servo_DeclarationBlock_SetColorValue(_: - RawServoDeclarationBlockBorrowed, - _: nsCSSPropertyID, - _: structs::nscolor) { +pub extern "C" fn Servo_DeclarationBlock_SetColorValue(declarations: + RawServoDeclarationBlockBorrowed, + property: nsCSSPropertyID, + value: structs::nscolor) { + use cssparser::Color; + use style::gecko::values::convert_nscolor_to_rgba; + use style::properties::{DeclaredValue, PropertyDeclaration, LonghandId}; + use style::values::specified::{CSSColor, CSSRGBA}; + + let declarations = RwLock::::as_arc(&declarations); + let long = get_longhand_from_id!(property); + let rgba = convert_nscolor_to_rgba(value); + let color = CSSColor { parsed: Color::RGBA(rgba), authored: None }; + let prop = match_wrap_declared! { long, + BorderTopColor => color, + BorderRightColor => color, + BorderBottomColor => color, + BorderLeftColor => color, + Color => CSSRGBA { parsed: rgba, authored: None }, + BackgroundColor => color, + }; + declarations.write().declarations.push((prop, Default::default())); } #[no_mangle]