diff --git a/components/style/properties/data.py b/components/style/properties/data.py index 0c9321d004c9..9365b6e62275 100644 --- a/components/style/properties/data.py +++ b/components/style/properties/data.py @@ -175,6 +175,7 @@ def __init__(self, style_struct, name, spec=None, animation_value_type=None, key predefined_type=None, servo_pref=None, gecko_pref=None, enabled_in="content", need_index=False, gecko_ffi_name=None, + has_effect_on_gecko_scrollbars=None, allowed_in_keyframe_block=True, cast_type='u8', logical=False, logical_group=None, alias=None, extra_prefixes=None, boxed=False, flags=None, allowed_in_page_rule=False, allow_quirks="No", @@ -192,6 +193,14 @@ def __init__(self, style_struct, name, spec=None, animation_value_type=None, key self.style_struct = style_struct self.servo_pref = servo_pref self.gecko_pref = gecko_pref + self.has_effect_on_gecko_scrollbars = has_effect_on_gecko_scrollbars + assert ( + has_effect_on_gecko_scrollbars in [None, False, True] and + not style_struct.inherited or + (gecko_pref is None) == (has_effect_on_gecko_scrollbars is None)), ( + "Property " + name + ": has_effect_on_gecko_scrollbars must be " + + "specified, and must have a value of True or False, iff a " + + "property is inherited and is behind a Gecko pref") # For enabled_in, the setup is as follows: # It needs to be one of the four values: ["", "ua", "chrome", "content"] # * "chrome" implies "ua", and implies that they're explicitly diff --git a/components/style/properties/longhands/font.mako.rs b/components/style/properties/longhands/font.mako.rs index d65afad693d8..0323b892115f 100644 --- a/components/style/properties/longhands/font.mako.rs +++ b/components/style/properties/longhands/font.mako.rs @@ -192,6 +192,7 @@ ${helpers.predefined_type( "FontVariationSettings", products="gecko", gecko_pref="layout.css.font-variations.enabled", + has_effect_on_gecko_scrollbars=False, initial_value="computed::FontVariationSettings::normal()", initial_specified_value="specified::FontVariationSettings::normal()", animation_value_type="ComputedValue", @@ -216,6 +217,7 @@ ${helpers.single_keyword_system( "auto none", products="gecko", gecko_pref="layout.css.font-variations.enabled", + has_effect_on_gecko_scrollbars=False, gecko_ffi_name="mFont.opticalSizing", gecko_constant_prefix="NS_FONT_OPTICAL_SIZING", animation_value_type="discrete", @@ -512,6 +514,7 @@ ${helpers.single_keyword( gecko_constant_prefix="NS_FONT_SMOOTHING", gecko_ffi_name="mFont.smoothing", gecko_pref="layout.css.osx-font-smoothing.enabled", + has_effect_on_gecko_scrollbars=False, products="gecko", spec="Nonstandard (https://developer.mozilla.org/en-US/docs/Web/CSS/font-smooth)", flags="APPLIES_TO_CUE APPLIES_TO_FIRST_LETTER APPLIES_TO_FIRST_LINE APPLIES_TO_PLACEHOLDER APPLIES_TO_MARKER", diff --git a/components/style/properties/longhands/inherited_text.mako.rs b/components/style/properties/longhands/inherited_text.mako.rs index 63596b7e653c..614685f38d5f 100644 --- a/components/style/properties/longhands/inherited_text.mako.rs +++ b/components/style/properties/longhands/inherited_text.mako.rs @@ -103,7 +103,8 @@ ${helpers.predefined_type( gecko_enum_prefix="StyleTextJustify" animation_value_type="discrete" gecko_pref="layout.css.text-justify.enabled" - flags="APPLIES_TO_PLACEHOLDER", + has_effect_on_gecko_scrollbars="False" + flags="APPLIES_TO_PLACEHOLDER" spec="https://drafts.csswg.org/css-text/#propdef-text-justify" servo_restyle_damage="rebuild_and_reflow" > @@ -383,6 +384,7 @@ ${helpers.predefined_type( products="gecko", animation_value_type="ComputedValue", gecko_pref="layout.css.text-underline-offset.enabled", + has_effect_on_gecko_scrollbars=False, spec="https://drafts.csswg.org/css-text-decor-4/#underline-offset", )} @@ -395,5 +397,6 @@ ${helpers.predefined_type( needs_context=False, animation_value_type="discrete", gecko_pref="layout.css.text-decoration-skip-ink.enabled", + has_effect_on_gecko_scrollbars=False, spec="https://drafts.csswg.org/css-text-decor-4/#text-decoration-skip-ink-property", )} diff --git a/components/style/properties/longhands/inherited_ui.mako.rs b/components/style/properties/longhands/inherited_ui.mako.rs index 072643729959..2bdb267ffb23 100644 --- a/components/style/properties/longhands/inherited_ui.mako.rs +++ b/components/style/properties/longhands/inherited_ui.mako.rs @@ -74,6 +74,10 @@ ${helpers.predefined_type( "Default::default()", spec="https://drafts.csswg.org/css-scrollbars-1/#scrollbar-color", gecko_pref="layout.css.scrollbar-color.enabled", + # Surprisingly, yes the computed value of scrollbar-color has no effect on + # Gecko scrollbar elements, since the value only matters on the scrollable + # element itself. + has_effect_on_gecko_scrollbars=False, animation_value_type="ScrollbarColor", boxed=True, ignored_when_colors_disabled=True, diff --git a/components/style/properties/properties.mako.rs b/components/style/properties/properties.mako.rs index 4f07d6feb841..5139d887bbbb 100644 --- a/components/style/properties/properties.mako.rs +++ b/components/style/properties/properties.mako.rs @@ -812,6 +812,22 @@ impl LonghandIdSet { &IGNORED_WHEN_COLORS_DISABLED } + /// Returns the set of properties that are declared as having no effect on + /// Gecko elements or their descendant scrollbar parts. + #[cfg(debug_assertions)] + #[cfg(feature = "gecko")] + #[inline] + pub fn has_no_effect_on_gecko_scrollbars() -> &'static Self { + // data.py asserts that has_no_effect_on_gecko_scrollbars is True or + // False for properties that are inherited and Gecko pref controlled, + // and is None for all other properties. + ${static_longhand_id_set( + "HAS_NO_EFFECT_ON_SCROLLBARS", + lambda p: p.has_effect_on_gecko_scrollbars is False + )} + &HAS_NO_EFFECT_ON_SCROLLBARS + } + /// Iterate over the current longhand id set. pub fn iter(&self) -> LonghandIdSetIterator { LonghandIdSetIterator { longhands: self, cur: 0, }