diff --git a/components/style/gecko/media_queries.rs b/components/style/gecko/media_queries.rs index 954463ae91d..625802eecf6 100644 --- a/components/style/gecko/media_queries.rs +++ b/components/style/gecko/media_queries.rs @@ -263,13 +263,15 @@ impl PartialEq for Expression { /// A resolution. #[derive(Clone, Debug, PartialEq, ToCss)] -#[css(dimension)] pub enum Resolution { /// Dots per inch. + #[css(dimension)] Dpi(CSSFloat), /// Dots per pixel. + #[css(dimension)] Dppx(CSSFloat), /// Dots per centimeter. + #[css(dimension)] Dpcm(CSSFloat), } diff --git a/components/style/gecko/values.rs b/components/style/gecko/values.rs index 4f1b3cbb851..fc5d75bbe4b 100644 --- a/components/style/gecko/values.rs +++ b/components/style/gecko/values.rs @@ -214,7 +214,7 @@ impl GeckoStyleCoordConvertible for TrackBreadth< fn to_gecko_style_coord(&self, coord: &mut T) { match *self { TrackBreadth::Breadth(ref lop) => lop.to_gecko_style_coord(coord), - TrackBreadth::Flex(fr) => coord.set_value(CoordDataValue::FlexFraction(fr)), + TrackBreadth::Fr(fr) => coord.set_value(CoordDataValue::FlexFraction(fr)), TrackBreadth::Keyword(TrackKeyword::Auto) => coord.set_value(CoordDataValue::Auto), TrackBreadth::Keyword(TrackKeyword::MinContent) => coord.set_value(CoordDataValue::Enumerated(StyleGridTrackBreadth::MinContent as u32)), @@ -235,7 +235,7 @@ impl GeckoStyleCoordConvertible for TrackBreadth< None } }, - CoordDataValue::FlexFraction(fr) => Some(TrackBreadth::Flex(fr)), + CoordDataValue::FlexFraction(fr) => Some(TrackBreadth::Fr(fr)), CoordDataValue::Auto => Some(TrackBreadth::Keyword(TrackKeyword::Auto)), _ => L::from_gecko_style_coord(coord).map(TrackBreadth::Breadth), } diff --git a/components/style/values/computed/angle.rs b/components/style/values/computed/angle.rs index 1896a530d5a..7cc10e97c4d 100644 --- a/components/style/values/computed/angle.rs +++ b/components/style/values/computed/angle.rs @@ -16,15 +16,18 @@ use values::distance::{ComputeSquaredDistance, SquaredDistance}; #[cfg_attr(feature = "servo", derive(Deserialize, Serialize))] #[derive(Animate, Clone, Copy, Debug, MallocSizeOf, PartialEq, ToCss)] #[derive(PartialOrd, ToAnimatedZero)] -#[css(dimension)] pub enum Angle { /// An angle with degree unit. + #[css(dimension)] Deg(CSSFloat), /// An angle with gradian unit. + #[css(dimension)] Grad(CSSFloat), /// An angle with radian unit. + #[css(dimension)] Rad(CSSFloat), /// An angle with turn unit. + #[css(dimension)] Turn(CSSFloat), } diff --git a/components/style/values/generics/grid.rs b/components/style/values/generics/grid.rs index db2e4721075..bd0dc82507f 100644 --- a/components/style/values/generics/grid.rs +++ b/components/style/values/generics/grid.rs @@ -9,7 +9,7 @@ use cssparser::Parser; use parser::{Parse, ParserContext}; use std::{fmt, mem, usize}; use style_traits::{ToCss, ParseError, StyleParseErrorKind}; -use values::{CSSFloat, CustomIdent, serialize_dimension}; +use values::{CSSFloat, CustomIdent}; use values::computed::{Context, ToComputedValue}; use values::specified; use values::specified::grid::parse_line_names; @@ -143,12 +143,13 @@ add_impls_for_keyword_enum!(TrackKeyword); /// avoid re-implementing it for the computed type. /// /// -#[derive(Clone, Debug, MallocSizeOf, PartialEq, ToComputedValue)] +#[derive(Clone, Debug, MallocSizeOf, PartialEq, ToComputedValue, ToCss)] pub enum TrackBreadth { /// The generic type is almost always a non-negative `` Breadth(L), /// A flex fraction specified in `fr` units. - Flex(CSSFloat), + #[css(dimension)] + Fr(CSSFloat), /// One of the track-sizing keywords (`auto`, `min-content`, `max-content`) Keyword(TrackKeyword), } @@ -166,16 +167,6 @@ impl TrackBreadth { } } -impl ToCss for TrackBreadth { - fn to_css(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - match *self { - TrackBreadth::Breadth(ref lop) => lop.to_css(dest), - TrackBreadth::Flex(ref value) => serialize_dimension(*value, "fr", dest), - TrackBreadth::Keyword(ref k) => k.to_css(dest), - } - } -} - /// A `` type for explicit grid track sizing. Like ``, this is /// generic only to avoid code bloat. It only takes `` /// @@ -212,7 +203,7 @@ impl TrackSize { } match *breadth_1 { - TrackBreadth::Flex(_) => false, // should be at this point + TrackBreadth::Fr(_) => false, // should be at this point _ => breadth_2.is_fixed(), } }, @@ -242,7 +233,7 @@ impl ToCss for TrackSize { // According to gecko minmax(auto, ) is equivalent to , // and both are serialized as . if let TrackBreadth::Keyword(TrackKeyword::Auto) = *min { - if let TrackBreadth::Flex(_) = *max { + if let TrackBreadth::Fr(_) = *max { return max.to_css(dest); } } @@ -268,7 +259,7 @@ impl ToComputedValue for TrackSize { #[inline] fn to_computed_value(&self, context: &Context) -> Self::ComputedValue { match *self { - TrackSize::Breadth(TrackBreadth::Flex(ref f)) => { + TrackSize::Breadth(TrackBreadth::Fr(ref f)) => { // outside `minmax()` expands to `mimmax(auto, )` // https://drafts.csswg.org/css-grid/#valdef-grid-template-columns-flex // FIXME(nox): This sounds false, the spec just says that @@ -276,7 +267,7 @@ impl ToComputedValue for TrackSize { // into `minmax` at computed value time. TrackSize::Minmax( TrackBreadth::Keyword(TrackKeyword::Auto), - TrackBreadth::Flex(f.to_computed_value(context)), + TrackBreadth::Fr(f.to_computed_value(context)), ) }, TrackSize::Breadth(ref b) => { diff --git a/components/style/values/mod.rs b/components/style/values/mod.rs index 7a690662acc..0aa1ae4ccf3 100644 --- a/components/style/values/mod.rs +++ b/components/style/values/mod.rs @@ -41,14 +41,6 @@ pub fn serialize_percentage(value: CSSFloat, dest: &mut W) dest.write_str("%") } -/// Serialize a value with given unit into dest. -pub fn serialize_dimension(value: CSSFloat, unit: &str, dest: &mut W) - -> fmt::Result where W: fmt::Write -{ - value.to_css(dest)?; - dest.write_str(unit) -} - /// Convenience void type to disable some properties and values through types. #[cfg_attr(feature = "servo", derive(Deserialize, MallocSizeOf, Serialize))] #[derive(Clone, Copy, Debug, PartialEq, ToComputedValue, ToCss)] diff --git a/components/style/values/specified/grid.rs b/components/style/values/specified/grid.rs index b951082aea9..f2b8453c46c 100644 --- a/components/style/values/specified/grid.rs +++ b/components/style/values/specified/grid.rs @@ -33,7 +33,7 @@ impl Parse for TrackBreadth { } if let Ok(f) = input.try(parse_flex) { - return Ok(TrackBreadth::Flex(f)) + return Ok(TrackBreadth::Fr(f)) } TrackKeyword::parse(input).map(TrackBreadth::Keyword) diff --git a/components/style/values/specified/length.rs b/components/style/values/specified/length.rs index 0f677e27838..19eeb33bbcd 100644 --- a/components/style/values/specified/length.rs +++ b/components/style/values/specified/length.rs @@ -53,15 +53,18 @@ pub fn au_to_int_px(au: f32) -> i32 { /// A font relative length. #[derive(Clone, Copy, Debug, MallocSizeOf, PartialEq, ToCss)] -#[css(dimension)] pub enum FontRelativeLength { /// A "em" value: https://drafts.csswg.org/css-values/#em + #[css(dimension)] Em(CSSFloat), /// A "ex" value: https://drafts.csswg.org/css-values/#ex + #[css(dimension)] Ex(CSSFloat), /// A "ch" value: https://drafts.csswg.org/css-values/#ch + #[css(dimension)] Ch(CSSFloat), /// A "rem" value: https://drafts.csswg.org/css-values/#rem + #[css(dimension)] Rem(CSSFloat) } @@ -197,15 +200,18 @@ impl FontRelativeLength { /// /// #[derive(Clone, Copy, Debug, MallocSizeOf, PartialEq, ToCss)] -#[css(dimension)] pub enum ViewportPercentageLength { /// A vw unit: https://drafts.csswg.org/css-values/#vw + #[css(dimension)] Vw(CSSFloat), /// A vh unit: https://drafts.csswg.org/css-values/#vh + #[css(dimension)] Vh(CSSFloat), /// + #[css(dimension)] Vmin(CSSFloat), /// + #[css(dimension)] Vmax(CSSFloat) } @@ -251,21 +257,27 @@ impl CharacterWidth { /// Represents an absolute length with its unit #[derive(Clone, Copy, Debug, MallocSizeOf, PartialEq, ToCss)] -#[css(dimension)] pub enum AbsoluteLength { /// An absolute length in pixels (px) + #[css(dimension)] Px(CSSFloat), /// An absolute length in inches (in) + #[css(dimension)] In(CSSFloat), /// An absolute length in centimeters (cm) + #[css(dimension)] Cm(CSSFloat), /// An absolute length in millimeters (mm) + #[css(dimension)] Mm(CSSFloat), /// An absolute length in quarter-millimeters (q) + #[css(dimension)] Q(CSSFloat), /// An absolute length in points (pt) + #[css(dimension)] Pt(CSSFloat), /// An absolute length in pica (pc) + #[css(dimension)] Pc(CSSFloat), } @@ -348,11 +360,13 @@ impl Add for AbsoluteLength { } /// Represents a physical length based on DPI. +/// +/// FIXME(emilio): Unship (https://bugzilla.mozilla.org/show_bug.cgi?id=1416564) #[derive(Clone, Copy, Debug, PartialEq, ToCss)] #[derive(MallocSizeOf)] -#[css(dimension)] pub enum PhysicalLength { /// A physical length in millimetres. + #[css(dimension)] Mozmm(CSSFloat), } diff --git a/components/style_derive/to_css.rs b/components/style_derive/to_css.rs index fa545b00211..59cc4f4236b 100644 --- a/components/style_derive/to_css.rs +++ b/components/style_derive/to_css.rs @@ -20,7 +20,7 @@ pub fn derive(input: DeriveInput) -> Tokens { let variant_attrs = cg::parse_variant_attrs::(variant); let separator = if variant_attrs.comma { ", " } else { " " }; - if input_attrs.dimension { + if variant_attrs.dimension { assert_eq!(bindings.len(), 1); assert!(!variant_attrs.function, "That makes no sense"); } @@ -58,7 +58,7 @@ pub fn derive(input: DeriveInput) -> Tokens { } }; - if input_attrs.dimension { + if variant_attrs.dimension { // FIXME(emilio): Remove when bug 1416564 lands. if identifier == "-mozmm" { identifier = "mozmm".into(); @@ -112,7 +112,6 @@ pub fn derive(input: DeriveInput) -> Tokens { struct CssInputAttrs { derive_debug: bool, function: bool, - dimension: bool, comma: bool, } @@ -122,6 +121,7 @@ struct CssVariantAttrs { function: bool, iterable: bool, comma: bool, + dimension: bool, } /// Transforms "FooBar" to "foo-bar".