From c7027e2676e670d5c4b9b53a4cf6a5a817e8c4d4 Mon Sep 17 00:00:00 2001 From: Boris Chiou Date: Wed, 31 Oct 2018 10:57:48 +0000 Subject: [PATCH] style: Use alias for StyleFillRule. This needs to update the "fill-rule" and "clip-rule" to use predefined_type to avoid some compilation errors. Differential Revision: https://phabricator.services.mozilla.com/D10142 --- components/style/gecko/conversions.rs | 18 ++++-------------- components/style/properties/data.py | 1 + components/style/properties/gecko.mako.rs | 7 +++---- .../properties/longhands/inherited_svg.mako.rs | 14 ++++++++------ .../style/values/computed/basic_shape.rs | 3 +++ components/style/values/computed/mod.rs | 1 + .../style/values/specified/basic_shape.rs | 5 ++++- components/style/values/specified/mod.rs | 1 + 8 files changed, 25 insertions(+), 25 deletions(-) diff --git a/components/style/gecko/conversions.rs b/components/style/gecko/conversions.rs index dff1aef30cc..8cfe0c98169 100644 --- a/components/style/gecko/conversions.rs +++ b/components/style/gecko/conversions.rs @@ -649,7 +649,7 @@ pub mod basic_shape { use gecko::values::GeckoStyleCoordConvertible; use gecko_bindings::structs; - use gecko_bindings::structs::{StyleBasicShape, StyleBasicShapeType, StyleFillRule}; + use gecko_bindings::structs::{StyleBasicShape, StyleBasicShapeType}; use gecko_bindings::structs::{StyleGeometryBox, StyleShapeSource, StyleShapeSourceType}; use gecko_bindings::structs::{nsStyleCoord, nsStyleCorners}; use gecko_bindings::sugar::ns_style_coord::{CoordDataMut, CoordDataValue}; @@ -662,7 +662,7 @@ pub mod basic_shape { use values::computed::position; use values::computed::url::ComputedUrl; use values::generics::basic_shape::{BasicShape as GenericBasicShape, InsetRect, Polygon}; - use values::generics::basic_shape::{Circle, Ellipse, FillRule, Path, PolygonCoord}; + use values::generics::basic_shape::{Circle, Ellipse, Path, PolygonCoord}; use values::generics::basic_shape::{GeometryBox, ShapeBox, ShapeSource}; use values::generics::border::BorderRadius as GenericBorderRadius; use values::generics::rect::Rect; @@ -693,12 +693,7 @@ pub mod basic_shape { StyleShapeSourceType::URL | StyleShapeSourceType::Image => None, StyleShapeSourceType::Path => { let path = self.to_svg_path().expect("expect an SVGPathData"); - let gecko_path = unsafe { &*self.__bindgen_anon_1.mSVGPath.as_ref().mPtr }; - let fill = if gecko_path.mFillRule == StyleFillRule::Evenodd { - FillRule::Evenodd - } else { - FillRule::Nonzero - }; + let fill = unsafe { &*self.__bindgen_anon_1.mSVGPath.as_ref().mPtr }.mFillRule; Some(ShapeSource::Path(Path { fill, path })) }, } @@ -805,11 +800,6 @@ pub mod basic_shape { position: (&other.mPosition).into(), }), StyleBasicShapeType::Polygon => { - let fill_rule = if other.mFillRule == StyleFillRule::Evenodd { - FillRule::Evenodd - } else { - FillRule::Nonzero - }; let mut coords = Vec::with_capacity(other.mCoordinates.len() / 2); for i in 0..(other.mCoordinates.len() / 2) { let x = 2 * i; @@ -828,7 +818,7 @@ pub mod basic_shape { )) } GenericBasicShape::Polygon(Polygon { - fill: fill_rule, + fill: other.mFillRule, coordinates: coords, }) }, diff --git a/components/style/properties/data.py b/components/style/properties/data.py index 4d3e4ad2177..38b5273db26 100644 --- a/components/style/properties/data.py +++ b/components/style/properties/data.py @@ -298,6 +298,7 @@ class Longhand(object): "ColumnCount", "Contain", "Display", + "FillRule", "Float", "FontSizeAdjust", "FontStretch", diff --git a/components/style/properties/gecko.mako.rs b/components/style/properties/gecko.mako.rs index b9eb6830777..6f112343b0e 100644 --- a/components/style/properties/gecko.mako.rs +++ b/components/style/properties/gecko.mako.rs @@ -1397,6 +1397,7 @@ impl Clone for ${style_struct.gecko_struct_name} { "length::LengthOrNormal": impl_style_coord, "length::NonNegativeLengthOrAuto": impl_style_coord, "length::NonNegativeLengthOrPercentageOrNormal": impl_style_coord, + "FillRule": impl_simple, "FlexBasis": impl_style_coord, "Length": impl_absolute_length, "LengthOrNormal": impl_style_coord, @@ -4953,8 +4954,7 @@ fn set_style_svg_path( gecko_path.mPath.assign_from_iter_pod(iter); // Setup fill-rule. - // unsafe: cbindgen ensures the representation is the same. - gecko_path.mFillRule = unsafe { transmute(fill) }; + gecko_path.mFillRule = fill; } <%def name="impl_shape_source(ident, gecko_ffi_name)"> @@ -5059,8 +5059,7 @@ fn set_style_svg_path( coord.0.to_gecko_style_coord(&mut shape.mCoordinates[2 * i]); coord.1.to_gecko_style_coord(&mut shape.mCoordinates[2 * i + 1]); } - // unsafe: cbindgen ensures the representation is the same. - shape.mFillRule = unsafe { transmute(poly.fill) }; + shape.mFillRule = poly.fill; } } diff --git a/components/style/properties/longhands/inherited_svg.mako.rs b/components/style/properties/longhands/inherited_svg.mako.rs index 40c61b10129..3cdc5e76569 100644 --- a/components/style/properties/longhands/inherited_svg.mako.rs +++ b/components/style/properties/longhands/inherited_svg.mako.rs @@ -55,10 +55,11 @@ ${helpers.predefined_type( spec="https://www.w3.org/TR/SVG11/painting.html#FillOpacityProperty", )} -${helpers.single_keyword( +${helpers.predefined_type( "fill-rule", - "nonzero evenodd", - gecko_enum_prefix="StyleFillRule", + "FillRule", + "Default::default()", + needs_context=False, products="gecko", animation_value_type="discrete", spec="https://www.w3.org/TR/SVG11/painting.html#FillRuleProperty", @@ -142,11 +143,12 @@ ${helpers.predefined_type( )} // Section 14 - Clipping, Masking and Compositing -${helpers.single_keyword( +${helpers.predefined_type( "clip-rule", - "nonzero evenodd", + "FillRule", + "Default::default()", + needs_context=False, products="gecko", - gecko_enum_prefix="StyleFillRule", animation_value_type="discrete", spec="https://www.w3.org/TR/SVG11/masking.html#ClipRuleProperty", )} diff --git a/components/style/values/computed/basic_shape.rs b/components/style/values/computed/basic_shape.rs index c140439af4e..e0409a9d904 100644 --- a/components/style/values/computed/basic_shape.rs +++ b/components/style/values/computed/basic_shape.rs @@ -13,6 +13,9 @@ use values::computed::{Image, LengthOrPercentage}; use values::computed::url::ComputedUrl; use values::generics::basic_shape as generic; +/// A computed alias for FillRule. +pub use values::generics::basic_shape::FillRule; + /// A computed clipping shape. pub type ClippingShape = generic::ClippingShape; diff --git a/components/style/values/computed/mod.rs b/components/style/values/computed/mod.rs index d1787decf46..8b9a33f0df2 100644 --- a/components/style/values/computed/mod.rs +++ b/components/style/values/computed/mod.rs @@ -36,6 +36,7 @@ pub use self::align::{AlignContent, AlignItems, JustifyContent, JustifyItems, Se pub use self::align::{AlignSelf, JustifySelf}; pub use self::angle::Angle; pub use self::background::{BackgroundRepeat, BackgroundSize}; +pub use self::basic_shape::FillRule; pub use self::border::{BorderImageRepeat, BorderImageSideWidth, BorderImageSlice, BorderImageWidth}; pub use self::border::{BorderCornerRadius, BorderRadius, BorderSpacing}; pub use self::font::{FontSize, FontSizeAdjust, FontStretch, FontSynthesis, FontVariantAlternates, FontWeight}; diff --git a/components/style/values/specified/basic_shape.rs b/components/style/values/specified/basic_shape.rs index 52343621b5e..dcf04dcc0df 100644 --- a/components/style/values/specified/basic_shape.rs +++ b/components/style/values/specified/basic_shape.rs @@ -14,7 +14,7 @@ use std::fmt::{self, Write}; use style_traits::{CssWriter, ParseError, StyleParseErrorKind, ToCss}; use values::computed::Percentage; use values::generics::basic_shape as generic; -use values::generics::basic_shape::{FillRule, GeometryBox, Path, PolygonCoord}; +use values::generics::basic_shape::{GeometryBox, Path, PolygonCoord}; use values::generics::basic_shape::{ShapeBox, ShapeSource}; use values::generics::rect::Rect; use values::specified::LengthOrPercentage; @@ -25,6 +25,9 @@ use values::specified::position::{HorizontalPosition, Position, PositionComponen use values::specified::position::{Side, VerticalPosition}; use values::specified::url::SpecifiedUrl; +/// A specified alias for FillRule. +pub use values::generics::basic_shape::FillRule; + /// A specified clipping shape. pub type ClippingShape = generic::ClippingShape; diff --git a/components/style/values/specified/mod.rs b/components/style/values/specified/mod.rs index 9955f7232be..0a910f9ce6a 100644 --- a/components/style/values/specified/mod.rs +++ b/components/style/values/specified/mod.rs @@ -29,6 +29,7 @@ pub use self::align::{AlignContent, AlignItems, AlignSelf, ContentDistribution}; #[cfg(feature = "gecko")] pub use self::align::{JustifyContent, JustifyItems, JustifySelf, SelfAlignment}; pub use self::background::{BackgroundRepeat, BackgroundSize}; +pub use self::basic_shape::FillRule; pub use self::border::{BorderCornerRadius, BorderImageSlice, BorderImageWidth}; pub use self::border::{BorderImageRepeat, BorderImageSideWidth}; pub use self::border::{BorderRadius, BorderSideWidth, BorderSpacing};