Bug 1386963 - Part 1: make paint-order animatable. r?hiro draft
authorDaisuke Akatsuka <dakatsuka@mozilla.com>
Thu, 03 Aug 2017 22:15:50 +0900
changeset 620479 f919f37e9f5229f72901b538e45b9449daa5ef89
parent 620463 223e4179fdd11808f38f1d05134d823c41b4706e
child 620480 96c647e4e2ce529eabcff12ccd73f5892251d266
push id72044
push userbmo:dakatsuka@mozilla.com
push dateThu, 03 Aug 2017 13:23:58 +0000
reviewershiro
bugs1386963
milestone57.0a1
Bug 1386963 - Part 1: make paint-order animatable. r?hiro MozReview-Commit-ID: KCX3c7SVQWr
servo/components/style/properties/gecko.mako.rs
servo/components/style/properties/longhand/inherited_svg.mako.rs
--- 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;