mirror of
https://github.com/servo/servo.git
synced 2025-08-03 04:30:10 +01:00
Get rid of some of our custom additional methods in favor of clonable keywords.
Now that I'm pretty convinced we can auto-generate these and make them fast, we can ditch the additional complexity.
This commit is contained in:
parent
456b05e9cf
commit
cc35d4fcce
5 changed files with 36 additions and 27 deletions
|
@ -7,7 +7,7 @@
|
||||||
<% from data import Method %>
|
<% from data import Method %>
|
||||||
|
|
||||||
<% data.new_style_struct("Border", inherited=False, gecko_ffi_name="nsStyleBorder",
|
<% data.new_style_struct("Border", inherited=False, gecko_ffi_name="nsStyleBorder",
|
||||||
additional_methods=[Method("border_" + side + "_is_none_or_hidden_and_has_nonzero_width",
|
additional_methods=[Method("border_" + side + "_has_nonzero_width",
|
||||||
"bool") for side in ["top", "right", "bottom", "left"]]) %>
|
"bool") for side in ["top", "right", "bottom", "left"]]) %>
|
||||||
|
|
||||||
% for side in ["top", "right", "bottom", "left"]:
|
% for side in ["top", "right", "bottom", "left"]:
|
||||||
|
@ -15,7 +15,7 @@
|
||||||
% endfor
|
% endfor
|
||||||
|
|
||||||
% for side in ["top", "right", "bottom", "left"]:
|
% for side in ["top", "right", "bottom", "left"]:
|
||||||
${helpers.predefined_type("border-%s-style" % side, "BorderStyle", "specified::BorderStyle::none")}
|
${helpers.predefined_type("border-%s-style" % side, "BorderStyle", "specified::BorderStyle::none", need_clone=True)}
|
||||||
% endfor
|
% endfor
|
||||||
|
|
||||||
% for side in ["top", "right", "bottom", "left"]:
|
% for side in ["top", "right", "bottom", "left"]:
|
||||||
|
|
|
@ -9,10 +9,7 @@
|
||||||
<% data.new_style_struct("Box",
|
<% data.new_style_struct("Box",
|
||||||
inherited=False,
|
inherited=False,
|
||||||
gecko_ffi_name="nsStyleDisplay",
|
gecko_ffi_name="nsStyleDisplay",
|
||||||
additional_methods=[Method("is_floated", "bool"),
|
additional_methods=[Method("transition_count", "usize")]) %>
|
||||||
Method("overflow_x_is_visible", "bool"),
|
|
||||||
Method("overflow_y_is_visible", "bool"),
|
|
||||||
Method("transition_count", "usize")]) %>
|
|
||||||
|
|
||||||
// TODO(SimonSapin): don't parse `inline-table`, since we don't support it
|
// TODO(SimonSapin): don't parse `inline-table`, since we don't support it
|
||||||
<%helpers:longhand name="display" need_clone="True" custom_cascade="${product == 'servo'}">
|
<%helpers:longhand name="display" need_clone="True" custom_cascade="${product == 'servo'}">
|
||||||
|
@ -89,7 +86,7 @@
|
||||||
|
|
||||||
${helpers.single_keyword("position", "static absolute relative fixed", need_clone=True, extra_gecko_values="sticky")}
|
${helpers.single_keyword("position", "static absolute relative fixed", need_clone=True, extra_gecko_values="sticky")}
|
||||||
|
|
||||||
<%helpers:single_keyword_computed name="float" values="none left right" gecko_ffi_name="mFloats">
|
<%helpers:single_keyword_computed name="float" values="none left right" need_clone="True" gecko_ffi_name="mFloats">
|
||||||
impl ToComputedValue for SpecifiedValue {
|
impl ToComputedValue for SpecifiedValue {
|
||||||
type ComputedValue = computed_value::T;
|
type ComputedValue = computed_value::T;
|
||||||
|
|
||||||
|
|
|
@ -9,12 +9,12 @@
|
||||||
<% data.new_style_struct("Outline",
|
<% data.new_style_struct("Outline",
|
||||||
inherited=False,
|
inherited=False,
|
||||||
gecko_ffi_name="nsStyleOutline",
|
gecko_ffi_name="nsStyleOutline",
|
||||||
additional_methods=[Method("outline_is_none_or_hidden_and_has_nonzero_width", "bool")]) %>
|
additional_methods=[Method("outline_has_nonzero_width", "bool")]) %>
|
||||||
|
|
||||||
// TODO(pcwalton): `invert`
|
// TODO(pcwalton): `invert`
|
||||||
${helpers.predefined_type("outline-color", "CSSColor", "::cssparser::Color::CurrentColor")}
|
${helpers.predefined_type("outline-color", "CSSColor", "::cssparser::Color::CurrentColor")}
|
||||||
|
|
||||||
<%helpers:longhand name="outline-style">
|
<%helpers:longhand name="outline-style" need_clone="True">
|
||||||
pub use values::specified::BorderStyle as SpecifiedValue;
|
pub use values::specified::BorderStyle as SpecifiedValue;
|
||||||
pub fn get_initial_value() -> SpecifiedValue { SpecifiedValue::none }
|
pub fn get_initial_value() -> SpecifiedValue { SpecifiedValue::none }
|
||||||
pub mod computed_value {
|
pub mod computed_value {
|
||||||
|
|
|
@ -277,10 +277,11 @@ pub mod longhands {
|
||||||
internal=True)}
|
internal=True)}
|
||||||
|
|
||||||
// FIXME(pcwalton, #2742): Implement scrolling for `scroll` and `auto`.
|
// FIXME(pcwalton, #2742): Implement scrolling for `scroll` and `auto`.
|
||||||
${helpers.single_keyword("overflow-x", "visible hidden scroll auto", gecko_constant_prefix="NS_STYLE_OVERFLOW")}
|
${helpers.single_keyword("overflow-x", "visible hidden scroll auto", need_clone=True,
|
||||||
|
gecko_constant_prefix="NS_STYLE_OVERFLOW")}
|
||||||
|
|
||||||
// FIXME(pcwalton, #2742): Implement scrolling for `scroll` and `auto`.
|
// FIXME(pcwalton, #2742): Implement scrolling for `scroll` and `auto`.
|
||||||
<%helpers:longhand name="overflow-y">
|
<%helpers:longhand name="overflow-y" need_clone="True">
|
||||||
use super::overflow_x;
|
use super::overflow_x;
|
||||||
|
|
||||||
use cssparser::ToCss;
|
use cssparser::ToCss;
|
||||||
|
@ -5719,8 +5720,10 @@ pub mod style_structs {
|
||||||
% endfor
|
% endfor
|
||||||
% if style_struct.trait_name == "Border":
|
% if style_struct.trait_name == "Border":
|
||||||
% for side in ["top", "right", "bottom", "left"]:
|
% for side in ["top", "right", "bottom", "left"]:
|
||||||
fn border_${side}_is_none_or_hidden_and_has_nonzero_width(&self) -> bool {
|
fn clone_border_${side}_style(&self) -> longhands::border_${side}_style::computed_value::T {
|
||||||
self.border_${side}_style.none_or_hidden() &&
|
self.border_${side}_style.clone()
|
||||||
|
}
|
||||||
|
fn border_${side}_has_nonzero_width(&self) -> bool {
|
||||||
self.border_${side}_width != ::app_units::Au(0)
|
self.border_${side}_width != ::app_units::Au(0)
|
||||||
}
|
}
|
||||||
% endfor
|
% endfor
|
||||||
|
@ -5731,14 +5734,14 @@ pub mod style_structs {
|
||||||
fn clone_position(&self) -> longhands::position::computed_value::T {
|
fn clone_position(&self) -> longhands::position::computed_value::T {
|
||||||
self.position.clone()
|
self.position.clone()
|
||||||
}
|
}
|
||||||
fn is_floated(&self) -> bool {
|
fn clone_float(&self) -> longhands::float::computed_value::T {
|
||||||
self.float != longhands::float::SpecifiedValue::none
|
self.float.clone()
|
||||||
}
|
}
|
||||||
fn overflow_x_is_visible(&self) -> bool {
|
fn clone_overflow_x(&self) -> longhands::overflow_x::computed_value::T {
|
||||||
self.overflow_x == longhands::overflow_x::computed_value::T::visible
|
self.overflow_x.clone()
|
||||||
}
|
}
|
||||||
fn overflow_y_is_visible(&self) -> bool {
|
fn clone_overflow_y(&self) -> longhands::overflow_y::computed_value::T {
|
||||||
self.overflow_y.0 == longhands::overflow_x::computed_value::T::visible
|
self.overflow_y.clone()
|
||||||
}
|
}
|
||||||
fn transition_count(&self) -> usize {
|
fn transition_count(&self) -> usize {
|
||||||
self.transition_property.0.len()
|
self.transition_property.0.len()
|
||||||
|
@ -5778,8 +5781,11 @@ pub mod style_structs {
|
||||||
self._servo_text_decorations_in_effect.clone()
|
self._servo_text_decorations_in_effect.clone()
|
||||||
}
|
}
|
||||||
% elif style_struct.trait_name == "Outline":
|
% elif style_struct.trait_name == "Outline":
|
||||||
fn outline_is_none_or_hidden_and_has_nonzero_width(&self) -> bool {
|
fn clone_outline_style(&self) -> longhands::outline_style::computed_value::T {
|
||||||
self.outline_style.none_or_hidden() && self.outline_width != ::app_units::Au(0)
|
self.outline_style.clone()
|
||||||
|
}
|
||||||
|
fn outline_has_nonzero_width(&self) -> bool {
|
||||||
|
self.outline_width != ::app_units::Au(0)
|
||||||
}
|
}
|
||||||
% elif style_struct.trait_name == "Text":
|
% elif style_struct.trait_name == "Text":
|
||||||
fn has_underline(&self) -> bool {
|
fn has_underline(&self) -> bool {
|
||||||
|
@ -6438,7 +6444,7 @@ pub fn cascade<C: ComputedValues>(
|
||||||
let positioned = matches!(style.get_box().clone_position(),
|
let positioned = matches!(style.get_box().clone_position(),
|
||||||
longhands::position::SpecifiedValue::absolute |
|
longhands::position::SpecifiedValue::absolute |
|
||||||
longhands::position::SpecifiedValue::fixed);
|
longhands::position::SpecifiedValue::fixed);
|
||||||
let floated = style.get_box().is_floated();
|
let floated = style.get_box().clone_float() != longhands::float::SpecifiedValue::none;
|
||||||
if positioned || floated || is_root_element {
|
if positioned || floated || is_root_element {
|
||||||
use computed_values::display::T;
|
use computed_values::display::T;
|
||||||
|
|
||||||
|
@ -6472,7 +6478,8 @@ pub fn cascade<C: ComputedValues>(
|
||||||
{
|
{
|
||||||
use computed_values::overflow_x::T as overflow;
|
use computed_values::overflow_x::T as overflow;
|
||||||
use computed_values::overflow_y;
|
use computed_values::overflow_y;
|
||||||
match (style.get_box().overflow_x_is_visible(), style.get_box().overflow_y_is_visible()) {
|
match (style.get_box().clone_overflow_x() == longhands::overflow_x::computed_value::T::visible,
|
||||||
|
style.get_box().clone_overflow_y().0 == longhands::overflow_x::computed_value::T::visible) {
|
||||||
(true, true) => {}
|
(true, true) => {}
|
||||||
(true, _) => {
|
(true, _) => {
|
||||||
style.mutate_box().set_overflow_x(overflow::auto);
|
style.mutate_box().set_overflow_x(overflow::auto);
|
||||||
|
@ -6487,13 +6494,15 @@ pub fn cascade<C: ComputedValues>(
|
||||||
// The initial value of border-*-width may be changed at computed value time.
|
// The initial value of border-*-width may be changed at computed value time.
|
||||||
% for side in ["top", "right", "bottom", "left"]:
|
% for side in ["top", "right", "bottom", "left"]:
|
||||||
// Like calling to_computed_value, which wouldn't type check.
|
// Like calling to_computed_value, which wouldn't type check.
|
||||||
if style.get_border().border_${side}_is_none_or_hidden_and_has_nonzero_width() {
|
if style.get_border().clone_border_${side}_style().none_or_hidden() &&
|
||||||
|
style.get_border().border_${side}_has_nonzero_width() {
|
||||||
style.mutate_border().set_border_${side}_width(Au(0));
|
style.mutate_border().set_border_${side}_width(Au(0));
|
||||||
}
|
}
|
||||||
% endfor
|
% endfor
|
||||||
|
|
||||||
// The initial value of outline width may be changed at computed value time.
|
// The initial value of outline width may be changed at computed value time.
|
||||||
if style.get_outline().outline_is_none_or_hidden_and_has_nonzero_width() {
|
if style.get_outline().clone_outline_style().none_or_hidden() &&
|
||||||
|
style.get_outline().outline_has_nonzero_width() {
|
||||||
style.mutate_outline().set_outline_width(Au(0));
|
style.mutate_outline().set_outline_width(Au(0));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -276,7 +276,7 @@ ${caller.body()}
|
||||||
// iteratively implement more and more methods.
|
// iteratively implement more and more methods.
|
||||||
<%self:impl_trait style_struct_name="Border"
|
<%self:impl_trait style_struct_name="Border"
|
||||||
skip_longhands="${['border-left-color', 'border-left-style']}"
|
skip_longhands="${['border-left-color', 'border-left-style']}"
|
||||||
skip_additionals="${['border_bottom_is_none_or_hidden_and_has_nonzero_width']}">
|
skip_additionals="${['border_bottom_has_nonzero_width']}">
|
||||||
fn set_border_left_color(&mut self, _: longhands::border_left_color::computed_value::T) {
|
fn set_border_left_color(&mut self, _: longhands::border_left_color::computed_value::T) {
|
||||||
unimplemented!()
|
unimplemented!()
|
||||||
}
|
}
|
||||||
|
@ -289,7 +289,10 @@ ${caller.body()}
|
||||||
fn copy_border_left_style_from(&mut self, _: &Self) {
|
fn copy_border_left_style_from(&mut self, _: &Self) {
|
||||||
unimplemented!()
|
unimplemented!()
|
||||||
}
|
}
|
||||||
fn border_bottom_is_none_or_hidden_and_has_nonzero_width(&self) -> bool {
|
fn clone_border_left_style(&self) -> longhands::border_left_style::computed_value::T {
|
||||||
|
unimplemented!()
|
||||||
|
}
|
||||||
|
fn border_bottom_has_nonzero_width(&self) -> bool {
|
||||||
unimplemented!()
|
unimplemented!()
|
||||||
}
|
}
|
||||||
</%self:impl_trait>
|
</%self:impl_trait>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue