From 66c8cd9cf36518533633a546ca8c9dc2b490869a Mon Sep 17 00:00:00 2001 From: Manish Goregaokar Date: Fri, 2 Sep 2016 20:27:33 +0530 Subject: [PATCH] stylo: support corner linear-gradients --- components/style/properties/gecko.mako.rs | 30 ++++++++++++++++++++--- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/components/style/properties/gecko.mako.rs b/components/style/properties/gecko.mako.rs index 509f710174f9..7e330cbd2305 100644 --- a/components/style/properties/gecko.mako.rs +++ b/components/style/properties/gecko.mako.rs @@ -1162,6 +1162,7 @@ fn static_assert() { use gecko_bindings::structs::nsStyleCoord; use values::computed::Image; use values::specified::AngleOrCorner; + use values::specified::{HorizontalDirection, VerticalDirection}; use cssparser::Color as CSSColor; unsafe { @@ -1198,10 +1199,31 @@ fn static_assert() { stop_count as u32) }; - // TODO: figure out what gecko does in the `corner` case. - if let AngleOrCorner::Angle(angle) = gradient.angle_or_corner { - unsafe { - (*gecko_gradient).mAngle.set(angle); + match gradient.angle_or_corner { + AngleOrCorner::Angle(angle) => { + unsafe { + (*gecko_gradient).mAngle.set(angle); + (*gecko_gradient).mBgPosX.set_value(CoordDataValue::None); + (*gecko_gradient).mBgPosY.set_value(CoordDataValue::None); + } + } + AngleOrCorner::Corner(horiz, vert) => { + let percent_x = match horiz { + HorizontalDirection::Left => 0.0, + HorizontalDirection::Right => 1.0, + }; + let percent_y = match vert { + VerticalDirection::Top => 0.0, + VerticalDirection::Bottom => 1.0, + }; + + unsafe { + (*gecko_gradient).mAngle.set_value(CoordDataValue::None); + (*gecko_gradient).mBgPosX + .set_value(CoordDataValue::Percent(percent_x)); + (*gecko_gradient).mBgPosY + .set_value(CoordDataValue::Percent(percent_y)); + } } }