Bug 1386963 - Part 1: make paint-order animatable. r?hiro
MozReview-Commit-ID: KCX3c7SVQWr
--- a/servo/components/style/properties/gecko.mako.rs
+++ b/servo/components/style/properties/gecko.mako.rs
@@ -5077,16 +5077,40 @@ clip-path
}
self.gecko.mPaintOrder = order;
}
}
${impl_simple_copy('paint_order', 'mPaintOrder')}
+ pub fn clone_paint_order(&self) -> longhands::paint_order::computed_value::T {
+ use self::longhands::paint_order::{COUNT, FILL, MARKERS, NORMAL, SHIFT, STROKE};
+ use self::longhands::paint_order::computed_value::T;
+
+ if self.gecko.mPaintOrder == structs::NS_STYLE_PAINT_ORDER_NORMAL as u8 {
+ return T(NORMAL);
+ }
+
+ const PAINT_ORDER_BITWIDTH: u8 = structs::NS_STYLE_PAINT_ORDER_BITWIDTH as u8;
+ let mask = (1 << PAINT_ORDER_BITWIDTH) - 1;
+ let mut order = 0;
+ for pos in 0..COUNT {
+ let value =
+ match (self.gecko.mPaintOrder >> pos * PAINT_ORDER_BITWIDTH & mask) as u32 {
+ structs::NS_STYLE_PAINT_ORDER_FILL => FILL,
+ structs::NS_STYLE_PAINT_ORDER_STROKE => STROKE,
+ structs::NS_STYLE_PAINT_ORDER_MARKERS => MARKERS,
+ _ => unreachable!(),
+ };
+ order |= value << (pos * SHIFT);
+ };
+ T(order)
+ }
+
pub fn set_stroke_dasharray(&mut self, v: longhands::stroke_dasharray::computed_value::T) {
use gecko_bindings::structs::nsStyleSVG_STROKE_DASHARRAY_CONTEXT as CONTEXT_VALUE;
use values::generics::svg::SVGStrokeDashArray;
match v {
SVGStrokeDashArray::Values(v) => {
let v = v.into_iter();
self.gecko.mContextFlags &= !CONTEXT_VALUE;
--- a/servo/components/style/properties/longhand/inherited_svg.mako.rs
+++ b/servo/components/style/properties/longhand/inherited_svg.mako.rs
@@ -128,17 +128,17 @@
${helpers.predefined_type("marker-end", "UrlOrNone", "Either::Second(None_)",
products="gecko",
boxed="True" if product == "gecko" else "False",
animation_value_type="discrete",
spec="https://www.w3.org/TR/SVG2/painting.html#VertexMarkerProperties")}
<%helpers:longhand name="paint-order"
- animation_value_type="none"
+ animation_value_type="discrete"
products="gecko"
spec="https://www.w3.org/TR/SVG2/painting.html#PaintOrder">
use values::computed::ComputedValueAsSpecified;
use std::fmt;
use style_traits::ToCss;
pub const NORMAL: u8 = 0;