From 3cab0e691956257b7d175b4311f28e4e9983082d Mon Sep 17 00:00:00 2001 From: Manish Goregaokar Date: Mon, 14 Nov 2016 23:53:14 -0800 Subject: [PATCH] Delegate logical bitfield setters to physical to fix cascade (fixes #14222) --- components/style/properties/helpers.mako.rs | 13 ++++++++----- .../style/properties/properties.mako.rs | 19 +++++++++++++++++++ 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/components/style/properties/helpers.mako.rs b/components/style/properties/helpers.mako.rs index 6eae58418d7..2b402df9696 100644 --- a/components/style/properties/helpers.mako.rs +++ b/components/style/properties/helpers.mako.rs @@ -207,11 +207,17 @@ } _ => panic!("entered the wrong cascade_property() implementation"), }; + + % if property.logical: + let wm = context.style.writing_mode; + % endif + <% maybe_wm = "wm" if property.logical else "" %> + <% maybe_physical = "_physical" if property.logical else "" %> % if not property.derived_from: - if seen.get_${property.ident}() { + if seen.get${maybe_physical}_${property.ident}(${maybe_wm}) { return } - seen.set_${property.ident}(); + seen.set${maybe_physical}_${property.ident}(${maybe_wm}); { let custom_props = context.style().custom_properties(); ::properties::substitute_variables_${property.ident}( @@ -221,9 +227,6 @@ cascade_info.on_cascade_property(&declaration, &value); } - % if property.logical: - let wm = context.style.writing_mode; - % endif <% maybe_wm = ", wm" if property.logical else "" %> match *value { DeclaredValue::Value(ref specified_value) => { diff --git a/components/style/properties/properties.mako.rs b/components/style/properties/properties.mako.rs index ec6eef352c7..907a493404b 100644 --- a/components/style/properties/properties.mako.rs +++ b/components/style/properties/properties.mako.rs @@ -149,6 +149,7 @@ pub mod animated_properties { // TODO(SimonSapin): Convert this to a syntax extension rather than a Mako template. // Maybe submit for inclusion in libstd? mod property_bit_field { + use logical_geometry::WritingMode; pub struct PropertyBitField { storage: [u32; (${len(data.longhands)} - 1 + 32) / 32] @@ -181,6 +182,24 @@ mod property_bit_field { self.set(${i}) } % endif + % if property.logical: + #[allow(non_snake_case)] + pub fn get_physical_${property.ident}(&self, wm: WritingMode) -> bool { + <%helpers:logical_setter_helper name="${property.name}"> + <%def name="inner(physical_ident)"> + self.get_${physical_ident}() + + + } + #[allow(non_snake_case)] + pub fn set_physical_${property.ident}(&mut self, wm: WritingMode) { + <%helpers:logical_setter_helper name="${property.name}"> + <%def name="inner(physical_ident)"> + self.set_${physical_ident}() + + + } + % endif % endfor } }