diff --git a/components/layout/multicol.rs b/components/layout/multicol.rs index c1773fc0c63f..24d90069aa62 100644 --- a/components/layout/multicol.rs +++ b/components/layout/multicol.rs @@ -99,9 +99,11 @@ impl Flow for MulticolFlow { { let column_style = self.block_flow.fragment.style.get_column(); - // `None` is 'normal': "UA-specified length. A value of 1em is suggested." - let column_gap = column_style.column_gap.0.unwrap_or_else(|| - self.block_flow.fragment.style.get_font().font_size); + let column_gap = match column_style.column_gap { + Either::First(len) => len, + Either::Second(_normal) => self.block_flow.fragment.style.get_font().font_size, + }; + let mut column_count; if let Either::First(column_width) = column_style.column_width { column_count = diff --git a/components/style/properties/gecko.mako.rs b/components/style/properties/gecko.mako.rs index c424ca705a78..92987c01722b 100644 --- a/components/style/properties/gecko.mako.rs +++ b/components/style/properties/gecko.mako.rs @@ -2387,9 +2387,11 @@ clip-path ${impl_simple_copy('column_count', 'mColumnCount')} pub fn set_column_gap(&mut self, v: longhands::column_gap::computed_value::T) { - match v.0 { - Some(len) => self.gecko.mColumnGap.set(len), - None => self.gecko.mColumnGap.set_value(CoordDataValue::Normal), + use values::Either; + + match v { + Either::First(len) => self.gecko.mColumnGap.set(len), + Either::Second(_normal) => self.gecko.mColumnGap.set_value(CoordDataValue::Normal), } } diff --git a/components/style/properties/longhand/column.mako.rs b/components/style/properties/longhand/column.mako.rs index a9e0880664e4..119c4e0ca31d 100644 --- a/components/style/properties/longhand/column.mako.rs +++ b/components/style/properties/longhand/column.mako.rs @@ -96,86 +96,12 @@ ${helpers.predefined_type("column-width", // FIXME: This prop should be animatable. -<%helpers:longhand name="column-gap" experimental="True" animatable="False"> - use std::fmt; - use style_traits::ToCss; - use values::HasViewportPercentage; - - impl HasViewportPercentage for SpecifiedValue { - fn has_viewport_percentage(&self) -> bool { - match *self { - SpecifiedValue::Specified(length) => length.has_viewport_percentage(), - _ => false - } - } - } - - #[derive(Debug, Clone, Copy, PartialEq)] - #[cfg_attr(feature = "servo", derive(HeapSizeOf))] - pub enum SpecifiedValue { - Normal, - Specified(specified::Length), - } - - impl ToCss for SpecifiedValue { - fn to_css(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - match *self { - SpecifiedValue::Normal => dest.write_str("normal"), - SpecifiedValue::Specified(l) => l.to_css(dest), - } - } - } - - pub mod computed_value { - use app_units::Au; - #[derive(Debug, Clone, PartialEq)] - #[cfg_attr(feature = "servo", derive(HeapSizeOf))] - pub struct T(pub Option); - } - - impl ToCss for computed_value::T { - fn to_css(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - match self.0 { - None => dest.write_str("normal"), - Some(l) => l.to_css(dest), - } - } - } - - #[inline] - pub fn get_initial_value() -> computed_value::T { - computed_value::T(None) - } - - impl ToComputedValue for SpecifiedValue { - type ComputedValue = computed_value::T; - - #[inline] - fn to_computed_value(&self, context: &Context) -> computed_value::T { - match *self { - SpecifiedValue::Normal => computed_value::T(None), - SpecifiedValue::Specified(l) => - computed_value::T(Some(l.to_computed_value(context))) - } - } - #[inline] - fn from_computed_value(computed: &computed_value::T) -> Self { - match *computed { - computed_value::T(None) => SpecifiedValue::Normal, - computed_value::T(Some(l)) => - SpecifiedValue::Specified(ToComputedValue::from_computed_value(&l)) - } - } - } - - pub fn parse(_context: &ParserContext, input: &mut Parser) -> Result { - if input.try(|input| input.expect_ident_matching("normal")).is_ok() { - Ok(SpecifiedValue::Normal) - } else { - specified::Length::parse_non_negative(input).map(SpecifiedValue::Specified) - } - } - +${helpers.predefined_type("column-gap", + "length::LengthOrNormal", + "Either::Second(Normal)", + parse_method='parse_non_negative_length', + experimental=True, + animatable=False)} ${helpers.single_keyword("column-fill", "auto balance", products="gecko", animatable=False)}