diff --git a/components/layout/construct.rs b/components/layout/construct.rs index 8efeeb97e83..f369d41daaf 100644 --- a/components/layout/construct.rs +++ b/components/layout/construct.rs @@ -1485,7 +1485,7 @@ impl<'a, ConcreteThreadSafeLayoutNode> PostorderNodeMutTraversal { let style = node.style(self.style_context()); - let original_display = style.get_box()._servo_display_for_hypothetical_box; + let original_display = style.get_box().original_display; let munged_display = match original_display { Display::Inline | Display::InlineBlock => original_display, _ => style.get_box().display, diff --git a/components/style/properties/gecko.mako.rs b/components/style/properties/gecko.mako.rs index bb67759a554..e74c2f6fd1f 100644 --- a/components/style/properties/gecko.mako.rs +++ b/components/style/properties/gecko.mako.rs @@ -3113,33 +3113,23 @@ fn static_assert() { gecko_enum_prefix="StyleDisplay", gecko_strip_moz_prefix=False) %> - pub fn set_display(&mut self, v: longhands::display::computed_value::T) { + fn match_display_keyword( + v: longhands::display::computed_value::T + ) -> structs::root::mozilla::StyleDisplay { use properties::longhands::display::computed_value::T as Keyword; // FIXME(bholley): Align binary representations and ditch |match| for cast + static_asserts - let result = match v { + match v { % for value in display_keyword.values_for('gecko'): Keyword::${to_camel_case(value)} => structs::${display_keyword.gecko_constant(value)}, % endfor - }; - self.gecko.mDisplay = result; - self.gecko.mOriginalDisplay = result; + } } - /// Set the display value from the style adjustment code. This is pretty - /// much like set_display, but without touching the mOriginalDisplay field, - /// which we want to keep. - pub fn set_adjusted_display(&mut self, - v: longhands::display::computed_value::T, - _is_item_or_root: bool) { - use properties::longhands::display::computed_value::T as Keyword; - let result = match v { - % for value in display_keyword.values_for('gecko'): - Keyword::${to_camel_case(value)} => - structs::${display_keyword.gecko_constant(value)}, - % endfor - }; + pub fn set_display(&mut self, v: longhands::display::computed_value::T) { + let result = Self::match_display_keyword(v); self.gecko.mDisplay = result; + self.gecko.mOriginalDisplay = result; } pub fn copy_display_from(&mut self, other: &Self) { @@ -3151,6 +3141,14 @@ fn static_assert() { self.copy_display_from(other) } + pub fn set_adjusted_display( + &mut self, + v: longhands::display::computed_value::T, + _is_item_or_root: bool + ) { + self.gecko.mDisplay = Self::match_display_keyword(v); + } + <%call expr="impl_keyword_clone('display', 'mDisplay', display_keyword)"> <% overflow_x = data.longhands_by_name["overflow-x"] %> diff --git a/components/style/properties/longhand/box.mako.rs b/components/style/properties/longhand/box.mako.rs index 2810f5a513b..62dea66052d 100644 --- a/components/style/properties/longhand/box.mako.rs +++ b/components/style/properties/longhand/box.mako.rs @@ -161,27 +161,6 @@ ${helpers.single_keyword("position", "static absolute relative fixed sticky", } -<%helpers:longhand name="-servo-display-for-hypothetical-box" - animation_value_type="none" - derived_from="display" - products="servo" - spec="Internal (not web-exposed)"> - pub use super::display::{SpecifiedValue, get_initial_value}; - pub use super::display::{parse}; - - pub mod computed_value { - pub type T = super::SpecifiedValue; - } - - #[inline] - pub fn derive_from_display(context: &mut Context) { - let d = context.style().get_box().clone_display(); - context.builder.set__servo_display_for_hypothetical_box(d); - } - - - - ${helpers.predefined_type( "vertical-align", "VerticalAlign", diff --git a/components/style/properties/properties.mako.rs b/components/style/properties/properties.mako.rs index 3bca3b05939..c75fd6db958 100644 --- a/components/style/properties/properties.mako.rs +++ b/components/style/properties/properties.mako.rs @@ -1863,6 +1863,11 @@ pub mod style_structs { /// The font hash, used for font caching. pub hash: u64, % endif + % if style_struct.name == "Box": + /// The display value specified by the CSS stylesheets (without any style adjustments), + /// which is needed for hypothetical layout boxes. + pub original_display: longhands::display::computed_value::T, + % endif } % if style_struct.name == "Font": @@ -1893,6 +1898,17 @@ pub mod style_structs { self.${longhand.ident} = longhands::${longhand.ident}::computed_value ::T(v.into_iter().collect()); } + % elif longhand.ident == "display": + /// Set `display`. + /// + /// We need to keep track of the original display for hypothetical boxes, + /// so we need to special-case this. + #[allow(non_snake_case)] + #[inline] + pub fn set_display(&mut self, v: longhands::display::computed_value::T) { + self.display = v; + self.original_display = v; + } % else: /// Set ${longhand.name}. #[allow(non_snake_case)] @@ -1901,13 +1917,25 @@ pub mod style_structs { self.${longhand.ident} = v; } % endif - /// Set ${longhand.name} from other struct. - #[allow(non_snake_case)] - #[inline] - pub fn copy_${longhand.ident}_from(&mut self, other: &Self) { - self.${longhand.ident} = other.${longhand.ident}.clone(); - } - + % if longhand.ident == "display": + /// Set `display` from other struct. + /// + /// Same as `set_display` above. + /// Thus, we need to special-case this. + #[allow(non_snake_case)] + #[inline] + pub fn copy_display_from(&mut self, other: &Self) { + self.display = other.display.clone(); + self.original_display = other.display.clone(); + } + % else: + /// Set ${longhand.name} from other struct. + #[allow(non_snake_case)] + #[inline] + pub fn copy_${longhand.ident}_from(&mut self, other: &Self) { + self.${longhand.ident} = other.${longhand.ident}.clone(); + } + % endif /// Reset ${longhand.name} from the initial struct. #[allow(non_snake_case)] #[inline] @@ -2002,15 +2030,16 @@ pub mod style_structs { self.text_decoration_line.contains(longhands::text_decoration_line::SpecifiedValue::LINE_THROUGH) } % elif style_struct.name == "Box": - /// Sets the display property, but without touching - /// __servo_display_for_hypothetical_box, except when the - /// adjustment comes from root or item display fixups. - pub fn set_adjusted_display(&mut self, - dpy: longhands::display::computed_value::T, - is_item_or_root: bool) { - self.set_display(dpy); + /// Sets the display property, but without touching original_display, + /// except when the adjustment comes from root or item display fixups. + pub fn set_adjusted_display( + &mut self, + dpy: longhands::display::computed_value::T, + is_item_or_root: bool + ) { + self.display = dpy; if is_item_or_root { - self.set__servo_display_for_hypothetical_box(dpy); + self.original_display = dpy; } } % endif @@ -3048,6 +3077,9 @@ mod lazy_static_module { % if style_struct.name == "Font": hash: 0, % endif + % if style_struct.name == "Box": + original_display: longhands::display::get_initial_value(), + % endif }), % endfor custom_properties: None, diff --git a/components/style/values/specified/box.rs b/components/style/values/specified/box.rs index 1ba23a2c9b5..a141855d62f 100644 --- a/components/style/values/specified/box.rs +++ b/components/style/values/specified/box.rs @@ -228,7 +228,6 @@ impl Display { _declaration: &PropertyDeclaration, context: &mut Context ) { - longhands::_servo_display_for_hypothetical_box::derive_from_display(context); longhands::_servo_text_decorations_in_effect::derive_from_display(context); } }