Bug 1367283 - Part 8: Implements box related properties. r=hiro
In this patch, implements following position box properties
that type is single keyword.
* clear
* page-break-after
* page-break-before
* transform-box
* -moz-orient
MozReview-Commit-ID: BTMOs7WCJrp
--- a/servo/components/style/properties/gecko.mako.rs
+++ b/servo/components/style/properties/gecko.mako.rs
@@ -2166,49 +2166,47 @@ fn static_assert() {
.expect("Expected length or percentage for vertical-align");
T::LengthOrPercentage(v)
}
}
}
<%call expr="impl_coord_copy('vertical_align', 'mVerticalAlign')"></%call>
+ % for kind in ["before", "after"]:
// Temp fix for Bugzilla bug 24000.
// Map 'auto' and 'avoid' to false, and 'always', 'left', and 'right' to true.
// "A conforming user agent may interpret the values 'left' and 'right'
// as 'always'." - CSS2.1, section 13.3.1
- pub fn set_page_break_before(&mut self, v: longhands::page_break_before::computed_value::T) {
- use computed_values::page_break_before::T;
+ pub fn set_page_break_${kind}(&mut self, v: longhands::page_break_${kind}::computed_value::T) {
+ use computed_values::page_break_${kind}::T;
+
let result = match v {
T::auto => false,
T::always => true,
T::avoid => false,
T::left => true,
T::right => true
};
- self.gecko.mBreakBefore = result;
- }
-
- ${impl_simple_copy('page_break_before', 'mBreakBefore')}
+ self.gecko.mBreak${kind.title()} = result;
+ }
+
+ ${impl_simple_copy('page_break_' + kind, 'mBreak' + kind.title())}
// Temp fix for Bugzilla bug 24000.
- // See set_page_break_before for detail.
- pub fn set_page_break_after(&mut self, v: longhands::page_break_after::computed_value::T) {
- use computed_values::page_break_after::T;
- let result = match v {
- T::auto => false,
- T::always => true,
- T::avoid => false,
- T::left => true,
- T::right => true
- };
- self.gecko.mBreakAfter = result;
- }
-
- ${impl_simple_copy('page_break_after', 'mBreakAfter')}
+ // See set_page_break_before/after for detail.
+ pub fn clone_page_break_${kind}(&self) -> longhands::page_break_${kind}::computed_value::T {
+ use computed_values::page_break_${kind}::T;
+
+ match self.gecko.mBreak${kind.title()} {
+ true => T::always,
+ false => T::auto,
+ }
+ }
+ % endfor
pub fn set_scroll_snap_points_x(&mut self, v: longhands::scroll_snap_points_x::computed_value::T) {
match v.0 {
None => self.gecko.mScrollSnapPointsX.set_value(CoordDataValue::None),
Some(l) => l.to_gecko_style_coord(&mut self.gecko.mScrollSnapPointsX),
};
}
--- a/servo/components/style/properties/longhand/box.mako.rs
+++ b/servo/components/style/properties/longhand/box.mako.rs
@@ -196,17 +196,18 @@
}
</%helpers:single_keyword_computed>
<%helpers:single_keyword_computed name="clear"
values="none left right both"
// https://drafts.csswg.org/css-logical-props/#float-clear
extra_specified="inline-start inline-end"
needs_conversion="True"
- animation_value_type="none"
+ gecko_inexhaustive="True"
+ animation_value_type="discrete"
gecko_enum_prefix="StyleClear"
gecko_ffi_name="mBreakType"
spec="https://www.w3.org/TR/CSS2/visuren.html#flow-control">
no_viewport_percentage!(SpecifiedValue);
impl ToComputedValue for SpecifiedValue {
type ComputedValue = computed_value::T;
#[inline]
@@ -2029,22 +2030,22 @@
flags="CREATES_STACKING_CONTEXT",
animation_value_type="discrete")}
// TODO add support for logical values recto and verso
${helpers.single_keyword("page-break-after",
"auto always avoid left right",
products="gecko",
spec="https://drafts.csswg.org/css2/page.html#propdef-page-break-after",
- animation_value_type="none")}
+ animation_value_type="discrete")}
${helpers.single_keyword("page-break-before",
"auto always avoid left right",
products="gecko",
spec="https://drafts.csswg.org/css2/page.html#propdef-page-break-before",
- animation_value_type="none")}
+ animation_value_type="discrete")}
${helpers.single_keyword("page-break-inside",
"auto avoid",
products="gecko",
gecko_ffi_name="mBreakInside",
gecko_constant_prefix="NS_STYLE_PAGE_BREAK",
spec="https://drafts.csswg.org/css2/page.html#propdef-page-break-inside",
animation_value_type="discrete")}
@@ -2082,17 +2083,18 @@
extra_prefixes="moz webkit",
animation_value_type="discrete")}
${helpers.single_keyword("transform-box",
"border-box fill-box view-box",
gecko_enum_prefix="StyleGeometryBox",
products="gecko",
spec="https://drafts.csswg.org/css-transforms/#transform-box",
- animation_value_type="none")}
+ gecko_inexhaustive="True",
+ animation_value_type="discrete")}
// `auto` keyword is not supported in gecko yet.
${helpers.single_keyword("transform-style",
"auto flat preserve-3d" if product == "servo" else
"flat preserve-3d",
spec="https://drafts.csswg.org/css-transforms/#transform-style-property",
extra_prefixes="moz webkit",
flags="CREATES_STACKING_CONTEXT FIXPOS_CB",
@@ -2352,17 +2354,18 @@
disable_when_testing="True")}
${helpers.single_keyword("-moz-orient",
"inline block horizontal vertical",
products="gecko",
gecko_ffi_name="mOrient",
gecko_enum_prefix="StyleOrient",
spec="Nonstandard (https://developer.mozilla.org/en-US/docs/Web/CSS/-moz-orient)",
- animation_value_type="none")}
+ gecko_inexhaustive="True",
+ animation_value_type="discrete")}
<%helpers:longhand name="will-change" products="gecko" animation_value_type="none"
spec="https://drafts.csswg.org/css-will-change/#will-change">
use cssparser::serialize_identifier;
use std::fmt;
use style_traits::ToCss;
use values::computed::ComputedValueAsSpecified;