From bc81f0983355cd99782c10f0a35588bd3583ea8f Mon Sep 17 00:00:00 2001 From: Xidorn Quan Date: Fri, 20 Apr 2018 19:13:16 +1000 Subject: [PATCH] style: Add GETCS_NEEDS_LAYOUT_FLUSH flag in Servo side and propagate it to ServoCSSPropList.h. Bug: 1454830 Reviewed-by: emilio MozReview-Commit-ID: 5k08FWjobCg --- .../style/properties/longhand/border.mako.rs | 24 +++--- .../style/properties/longhand/box.mako.rs | 78 +++++++++++-------- .../longhand/inherited_text.mako.rs | 17 ++-- .../style/properties/longhand/margin.mako.rs | 21 +++-- .../style/properties/longhand/padding.mako.rs | 21 ++--- .../properties/longhand/position.mako.rs | 48 ++++++++---- .../style/properties/longhand/ui.mako.rs | 34 ++++---- .../style/properties/properties.mako.rs | 7 ++ 8 files changed, 152 insertions(+), 98 deletions(-) diff --git a/components/style/properties/longhand/border.mako.rs b/components/style/properties/longhand/border.mako.rs index bf2e8e9210b..9bb3dbcec28 100644 --- a/components/style/properties/longhand/border.mako.rs +++ b/components/style/properties/longhand/border.mako.rs @@ -43,17 +43,19 @@ needs_context=False, )} - ${helpers.predefined_type("border-%s-width" % side_name, - "BorderSideWidth", - "::values::computed::NonNegativeLength::new(3.)", - computed_type="::values::computed::NonNegativeLength", - alias=maybe_moz_logical_alias(product, side, "-moz-border-%s-width"), - spec=maybe_logical_spec(side, "width"), - animation_value_type="NonNegativeLength", - logical=is_logical, - flags="APPLIES_TO_FIRST_LETTER", - allow_quirks=not is_logical, - servo_restyle_damage = "reflow rebuild_and_reflow_inline")} + ${helpers.predefined_type( + "border-%s-width" % side_name, + "BorderSideWidth", + "::values::computed::NonNegativeLength::new(3.)", + computed_type="::values::computed::NonNegativeLength", + alias=maybe_moz_logical_alias(product, side, "-moz-border-%s-width"), + spec=maybe_logical_spec(side, "width"), + animation_value_type="NonNegativeLength", + logical=is_logical, + flags="APPLIES_TO_FIRST_LETTER GETCS_NEEDS_LAYOUT_FLUSH", + allow_quirks=not is_logical, + servo_restyle_damage="reflow rebuild_and_reflow_inline" + )} % endfor ${helpers.gecko_keyword_conversion(Keyword('border-style', diff --git a/components/style/properties/longhand/box.mako.rs b/components/style/properties/longhand/box.mako.rs index f671144b126..35aff050663 100644 --- a/components/style/properties/longhand/box.mako.rs +++ b/components/style/properties/longhand/box.mako.rs @@ -403,14 +403,17 @@ ${helpers.predefined_type( <% transform_extra_prefixes = "moz:layout.css.prefixes.transforms webkit" %> -${helpers.predefined_type("transform", "Transform", - "generics::transform::Transform::none()", - extra_prefixes=transform_extra_prefixes, - animation_value_type="ComputedValue", - gecko_ffi_name="mSpecifiedTransform", - flags="CREATES_STACKING_CONTEXT FIXPOS_CB", - spec="https://drafts.csswg.org/css-transforms/#propdef-transform", - servo_restyle_damage = "reflow_out_of_flow")} +${helpers.predefined_type( + "transform", + "Transform", + "generics::transform::Transform::none()", + extra_prefixes=transform_extra_prefixes, + animation_value_type="ComputedValue", + gecko_ffi_name="mSpecifiedTransform", + flags="CREATES_STACKING_CONTEXT FIXPOS_CB GETCS_NEEDS_LAYOUT_FLUSH", + spec="https://drafts.csswg.org/css-transforms/#propdef-transform", + servo_restyle_damage="reflow_out_of_flow" +)} ${helpers.predefined_type("rotate", "Rotate", "generics::transform::Rotate::None", @@ -430,14 +433,17 @@ ${helpers.predefined_type("scale", "Scale", spec="https://drafts.csswg.org/css-transforms-2/#individual-transforms", servo_restyle_damage = "reflow_out_of_flow")} -${helpers.predefined_type("translate", "Translate", - "generics::transform::Translate::None", - animation_value_type="ComputedValue", - boxed=True, - flags="CREATES_STACKING_CONTEXT FIXPOS_CB", - gecko_pref="layout.css.individual-transform.enabled", - spec="https://drafts.csswg.org/css-transforms-2/#individual-transforms", - servo_restyle_damage = "reflow_out_of_flow")} +${helpers.predefined_type( + "translate", + "Translate", + "generics::transform::Translate::None", + animation_value_type="ComputedValue", + boxed=True, + flags="CREATES_STACKING_CONTEXT FIXPOS_CB GETCS_NEEDS_LAYOUT_FLUSH", + gecko_pref="layout.css.individual-transform.enabled", + spec="https://drafts.csswg.org/css-transforms-2/#individual-transforms", + servo_restyle_damage="reflow_out_of_flow" +)} // CSSOM View Module // https://www.w3.org/TR/cssom-view-1/ @@ -529,14 +535,17 @@ ${helpers.predefined_type( servo_restyle_damage = "reflow_out_of_flow", )} -${helpers.predefined_type("perspective-origin", - "position::Position", - "computed::position::Position::center()", - boxed=True, - extra_prefixes=transform_extra_prefixes, - spec="https://drafts.csswg.org/css-transforms-2/#perspective-origin-property", - animation_value_type="ComputedValue", - servo_restyle_damage = "reflow_out_of_flow")} +${helpers.predefined_type( + "perspective-origin", + "position::Position", + "computed::position::Position::center()", + boxed=True, + extra_prefixes=transform_extra_prefixes, + spec="https://drafts.csswg.org/css-transforms-2/#perspective-origin-property", + flags="GETCS_NEEDS_LAYOUT_FLUSH", + animation_value_type="ComputedValue", + servo_restyle_damage="reflow_out_of_flow" +)} ${helpers.single_keyword("backface-visibility", "visible hidden", @@ -565,15 +574,18 @@ ${helpers.predefined_type( servo_restyle_damage = "reflow_out_of_flow", )} -${helpers.predefined_type("transform-origin", - "TransformOrigin", - "computed::TransformOrigin::initial_value()", - animation_value_type="ComputedValue", - extra_prefixes=transform_extra_prefixes, - gecko_ffi_name="mTransformOrigin", - boxed=True, - spec="https://drafts.csswg.org/css-transforms/#transform-origin-property", - servo_restyle_damage = "reflow_out_of_flow")} +${helpers.predefined_type( + "transform-origin", + "TransformOrigin", + "computed::TransformOrigin::initial_value()", + animation_value_type="ComputedValue", + extra_prefixes=transform_extra_prefixes, + gecko_ffi_name="mTransformOrigin", + boxed=True, + flags="GETCS_NEEDS_LAYOUT_FLUSH", + spec="https://drafts.csswg.org/css-transforms/#transform-origin-property", + servo_restyle_damage="reflow_out_of_flow" +)} ${helpers.predefined_type("contain", "Contain", diff --git a/components/style/properties/longhand/inherited_text.mako.rs b/components/style/properties/longhand/inherited_text.mako.rs index 99efd55c60f..abf1054675c 100644 --- a/components/style/properties/longhand/inherited_text.mako.rs +++ b/components/style/properties/longhand/inherited_text.mako.rs @@ -6,13 +6,16 @@ <% from data import Keyword %> <% data.new_style_struct("InheritedText", inherited=True, gecko_name="Text") %> -${helpers.predefined_type("line-height", - "LineHeight", - "computed::LineHeight::normal()", - animation_value_type="LineHeight", - flags="APPLIES_TO_FIRST_LETTER APPLIES_TO_FIRST_LINE APPLIES_TO_PLACEHOLDER", - spec="https://drafts.csswg.org/css2/visudet.html#propdef-line-height", - servo_restyle_damage = "reflow")} +${helpers.predefined_type( + "line-height", + "LineHeight", + "computed::LineHeight::normal()", + animation_value_type="LineHeight", + flags="APPLIES_TO_FIRST_LETTER APPLIES_TO_FIRST_LINE \ + APPLIES_TO_PLACEHOLDER GETCS_NEEDS_LAYOUT_FLUSH", + spec="https://drafts.csswg.org/css2/visudet.html#propdef-line-height", + servo_restyle_damage="reflow" +)} // CSS Text Module Level 3 diff --git a/components/style/properties/longhand/margin.mako.rs b/components/style/properties/longhand/margin.mako.rs index 5c0d06f8206..1a964bcbb74 100644 --- a/components/style/properties/longhand/margin.mako.rs +++ b/components/style/properties/longhand/margin.mako.rs @@ -12,12 +12,17 @@ if side[1]: spec = "https://drafts.csswg.org/css-logical-props/#propdef-margin-%s" % side[1] %> - ${helpers.predefined_type("margin-%s" % side[0], "LengthOrPercentageOrAuto", - "computed::LengthOrPercentageOrAuto::Length(computed::Length::new(0.))", - alias=maybe_moz_logical_alias(product, side, "-moz-margin-%s"), - allow_quirks=not side[1], - animation_value_type="ComputedValue", logical = side[1], spec = spec, - flags="APPLIES_TO_FIRST_LETTER", - allowed_in_page_rule=True, - servo_restyle_damage = "reflow")} + ${helpers.predefined_type( + "margin-%s" % side[0], + "LengthOrPercentageOrAuto", + "computed::LengthOrPercentageOrAuto::Length(computed::Length::new(0.))", + alias=maybe_moz_logical_alias(product, side, "-moz-margin-%s"), + allow_quirks=not side[1], + animation_value_type="ComputedValue", + logical=side[1], + spec=spec, + flags="APPLIES_TO_FIRST_LETTER GETCS_NEEDS_LAYOUT_FLUSH", + allowed_in_page_rule=True, + servo_restyle_damage="reflow" + )} % endfor diff --git a/components/style/properties/longhand/padding.mako.rs b/components/style/properties/longhand/padding.mako.rs index be0f9553cd2..3d2467c0ca0 100644 --- a/components/style/properties/longhand/padding.mako.rs +++ b/components/style/properties/longhand/padding.mako.rs @@ -14,13 +14,16 @@ if side[1]: spec = "https://drafts.csswg.org/css-logical-props/#propdef-padding-%s" % side[1] %> - ${helpers.predefined_type("padding-%s" % side[0], "NonNegativeLengthOrPercentage", - "computed::NonNegativeLengthOrPercentage::zero()", - alias=maybe_moz_logical_alias(product, side, "-moz-padding-%s"), - animation_value_type="NonNegativeLengthOrPercentage", - logical = side[1], - spec = spec, - flags="APPLIES_TO_FIRST_LETTER APPLIES_TO_PLACEHOLDER", - allow_quirks=not side[1], - servo_restyle_damage = "reflow rebuild_and_reflow_inline")} + ${helpers.predefined_type( + "padding-%s" % side[0], + "NonNegativeLengthOrPercentage", + "computed::NonNegativeLengthOrPercentage::zero()", + alias=maybe_moz_logical_alias(product, side, "-moz-padding-%s"), + animation_value_type="NonNegativeLengthOrPercentage", + logical=side[1], + spec=spec, + flags="APPLIES_TO_FIRST_LETTER APPLIES_TO_PLACEHOLDER GETCS_NEEDS_LAYOUT_FLUSH", + allow_quirks=not side[1], + servo_restyle_damage="reflow rebuild_and_reflow_inline" + )} % endfor diff --git a/components/style/properties/longhand/position.mako.rs b/components/style/properties/longhand/position.mako.rs index bfda37e8a19..cbff436e4bf 100644 --- a/components/style/properties/longhand/position.mako.rs +++ b/components/style/properties/longhand/position.mako.rs @@ -10,18 +10,28 @@ // "top" / "left" / "bottom" / "right" % for side in PHYSICAL_SIDES: - ${helpers.predefined_type(side, "LengthOrPercentageOrAuto", - "computed::LengthOrPercentageOrAuto::Auto", - spec="https://www.w3.org/TR/CSS2/visuren.html#propdef-%s" % side, - animation_value_type="ComputedValue", - allow_quirks=True, servo_restyle_damage = "reflow_out_of_flow")} + ${helpers.predefined_type( + side, + "LengthOrPercentageOrAuto", + "computed::LengthOrPercentageOrAuto::Auto", + spec="https://www.w3.org/TR/CSS2/visuren.html#propdef-%s" % side, + flags="GETCS_NEEDS_LAYOUT_FLUSH", + animation_value_type="ComputedValue", + allow_quirks=True, + servo_restyle_damage="reflow_out_of_flow" + )} % endfor // offset-* logical properties, map to "top" / "left" / "bottom" / "right" % for side in LOGICAL_SIDES: - ${helpers.predefined_type("offset-%s" % side, "LengthOrPercentageOrAuto", - "computed::LengthOrPercentageOrAuto::Auto", - spec="https://drafts.csswg.org/css-logical-props/#propdef-offset-%s" % side, - animation_value_type="ComputedValue", logical=True)} + ${helpers.predefined_type( + "offset-%s" % side, + "LengthOrPercentageOrAuto", + "computed::LengthOrPercentageOrAuto::Auto", + spec="https://drafts.csswg.org/css-logical-props/#propdef-offset-%s" % side, + flags="GETCS_NEEDS_LAYOUT_FLUSH", + animation_value_type="ComputedValue", + logical=True, + )} % endfor #[cfg(feature = "gecko")] @@ -213,7 +223,8 @@ ${helpers.predefined_type( allow_quirks=not logical, spec=spec % size, animation_value_type="MozLength", - servo_restyle_damage = "reflow" + flags="GETCS_NEEDS_LAYOUT_FLUSH", + servo_restyle_damage="reflow" )} // min-width, min-height, min-block-size, min-inline-size, ${helpers.predefined_type( @@ -318,13 +329,16 @@ ${helpers.predefined_type("object-position", products="gecko", boxed=True)} - ${helpers.predefined_type("grid-template-%ss" % kind, - "GridTemplateComponent", - "specified::GenericGridTemplateComponent::None", - products="gecko", - spec="https://drafts.csswg.org/css-grid/#propdef-grid-template-%ss" % kind, - boxed=True, - animation_value_type="discrete")} + ${helpers.predefined_type( + "grid-template-%ss" % kind, + "GridTemplateComponent", + "specified::GenericGridTemplateComponent::None", + products="gecko", + spec="https://drafts.csswg.org/css-grid/#propdef-grid-template-%ss" % kind, + boxed=True, + flags="GETCS_NEEDS_LAYOUT_FLUSH", + animation_value_type="discrete" + )} % endfor diff --git a/components/style/properties/longhand/ui.mako.rs b/components/style/properties/longhand/ui.mako.rs index cddc689e6a6..683a8967ea3 100644 --- a/components/style/properties/longhand/ui.mako.rs +++ b/components/style/properties/longhand/ui.mako.rs @@ -48,21 +48,29 @@ ${helpers.predefined_type("-moz-window-opacity", "Opacity", "1.0", products="gec spec="None (Nonstandard internal property)")} // TODO(bug 1419695) This should be hidden from content. -${helpers.predefined_type("-moz-window-transform", "Transform", - "generics::transform::Transform::none()", - products="gecko", gecko_ffi_name="mSpecifiedWindowTransform", - animation_value_type="ComputedValue", - spec="None (Nonstandard internal property)")} +${helpers.predefined_type( + "-moz-window-transform", + "Transform", + "generics::transform::Transform::none()", + products="gecko", + gecko_ffi_name="mSpecifiedWindowTransform", + flags="GETCS_NEEDS_LAYOUT_FLUSH", + animation_value_type="ComputedValue", + spec="None (Nonstandard internal property)" +)} // TODO(bug 1419695) This should be hidden from content. -${helpers.predefined_type("-moz-window-transform-origin", - "TransformOrigin", - "computed::TransformOrigin::initial_value()", - animation_value_type="ComputedValue", - gecko_ffi_name="mWindowTransformOrigin", - products="gecko", - boxed=True, - spec="None (Nonstandard internal property)")} +${helpers.predefined_type( + "-moz-window-transform-origin", + "TransformOrigin", + "computed::TransformOrigin::initial_value()", + animation_value_type="ComputedValue", + gecko_ffi_name="mWindowTransformOrigin", + products="gecko", + boxed=True, + flags="GETCS_NEEDS_LAYOUT_FLUSH", + spec="None (Nonstandard internal property)" +)} // TODO(emilio): Probably also should be hidden from content. ${helpers.predefined_type("-moz-force-broken-image-icon", diff --git a/components/style/properties/properties.mako.rs b/components/style/properties/properties.mako.rs index a27a2d2e579..39e639317f3 100644 --- a/components/style/properties/properties.mako.rs +++ b/components/style/properties/properties.mako.rs @@ -781,6 +781,13 @@ bitflags! { const APPLIES_TO_FIRST_LINE = 1 << 4; /// This longhand property applies to ::placeholder. const APPLIES_TO_PLACEHOLDER = 1 << 5; + + /* The following flags are currently not used in Rust code, they + * only need to be listed in corresponding properties so that + * they can be checked in the C++ side via ServoCSSPropList.h. */ + /// This property's getComputedStyle implementation requires layout + /// to be flushed. + const GETCS_NEEDS_LAYOUT_FLUSH = 0; } }