diff --git a/components/style/properties/longhand/inherited_text.mako.rs b/components/style/properties/longhand/inherited_text.mako.rs index c71e158d597..5428caa8a30 100644 --- a/components/style/properties/longhand/inherited_text.mako.rs +++ b/components/style/properties/longhand/inherited_text.mako.rs @@ -15,6 +15,9 @@ #[derive(Debug, Clone, PartialEq, Copy, HeapSizeOf)] pub enum SpecifiedValue { Normal, + % if product == "gecko": + MozBlockHeight, + % endif Number(CSSFloat), LengthOrPercentage(specified::LengthOrPercentage), } @@ -23,6 +26,9 @@ fn to_css(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { match *self { SpecifiedValue::Normal => dest.write_str("normal"), + % if product == "gecko": + SpecifiedValue::MozBlockHeight => dest.write_str("-moz-block-height"), + % endif SpecifiedValue::LengthOrPercentage(value) => value.to_css(dest), SpecifiedValue::Number(number) => write!(dest, "{}", number), } @@ -42,6 +48,11 @@ Token::Ident(ref value) if value.eq_ignore_ascii_case("normal") => { Ok(SpecifiedValue::Normal) } + % if product == "gecko": + Token::Ident(ref value) if value.eq_ignore_ascii_case("-moz-block-height") => { + Ok(SpecifiedValue::MozBlockHeight) + } + % endif _ => Err(()), } }) @@ -53,6 +64,9 @@ #[derive(PartialEq, Copy, Clone, HeapSizeOf, Debug)] pub enum T { Normal, + % if product == "gecko": + MozBlockHeight, + % endif Length(Au), Number(CSSFloat), } @@ -61,6 +75,9 @@ fn to_css(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { match *self { computed_value::T::Normal => dest.write_str("normal"), + % if product == "gecko": + computed_value::T::MozBlockHeight => dest.write_str("-moz-block-height"), + % endif computed_value::T::Length(length) => length.to_css(dest), computed_value::T::Number(number) => write!(dest, "{}", number), } @@ -76,6 +93,9 @@ fn to_computed_value(&self, context: &Cx) -> computed_value::T { match *self { SpecifiedValue::Normal => computed_value::T::Normal, + % if product == "gecko": + SpecifiedValue::MozBlockHeight => computed_value::T::MozBlockHeight, + % endif SpecifiedValue::Number(value) => computed_value::T::Number(value), SpecifiedValue::LengthOrPercentage(value) => { match value { diff --git a/ports/geckolib/properties.mako.rs b/ports/geckolib/properties.mako.rs index 8a8a25c1b70..234f667a175 100644 --- a/ports/geckolib/properties.mako.rs +++ b/ports/geckolib/properties.mako.rs @@ -719,12 +719,29 @@ fn static_assert() { <%self:impl_trait style_struct_name="InheritedText" - skip_longhands="text-align"> + skip_longhands="text-align line-height"> <% text_align_keyword = Keyword("text-align", "start end left right center justify -moz-center -moz-left " + "-moz-right match-parent") %> <%call expr="impl_keyword('text_align', 'mTextAlign', text_align_keyword, need_clone=False)"> + fn set_line_height(&mut self, v: longhands::line_height::computed_value::T) { + use style::properties::longhands::line_height::computed_value::T; + // FIXME: Align binary representations and ditch |match| for cast + static_asserts + match v { + T::Normal => self.gecko.mLineHeight.set_normal(), + T::Length(val) => self.gecko.mLineHeight.set_coord(val), + T::Number(val) => self.gecko.mLineHeight.set_factor(val), + T::MozBlockHeight => + self.gecko.mLineHeight.set_enum(structs::NS_STYLE_LINE_HEIGHT_BLOCK_HEIGHT as i32), + } + } + fn copy_line_height_from(&mut self, other: &Self) { + debug_assert_unit_is_safe_to_copy(self.gecko.mLineHeight.mUnit); + self.gecko.mLineHeight.mUnit = other.gecko.mLineHeight.mUnit; + self.gecko.mLineHeight.mValue = other.gecko.mLineHeight.mValue; + } + <%self:impl_trait style_struct_name="Text" diff --git a/ports/geckolib/values.rs b/ports/geckolib/values.rs index c2d227970ee..6909989311d 100644 --- a/ports/geckolib/values.rs +++ b/ports/geckolib/values.rs @@ -11,10 +11,12 @@ use style::values::computed::{LengthOrPercentage, LengthOrPercentageOrAuto, Leng pub trait StyleCoordHelpers { fn set(&mut self, val: T); fn set_auto(&mut self); + fn set_normal(&mut self); fn set_coord(&mut self, val: Au); fn set_int(&mut self, val: i32); fn set_enum(&mut self, val: i32); fn set_percent(&mut self, val: f32); + fn set_factor(&mut self, val: f32); } impl StyleCoordHelpers for nsStyleCoord { @@ -27,6 +29,11 @@ impl StyleCoordHelpers for nsStyleCoord { unsafe { *self.mValue.mInt.as_mut() = 0; } } + fn set_normal(&mut self) { + self.mUnit = nsStyleUnit::eStyleUnit_Normal; + unsafe { *self.mValue.mInt.as_mut() = 0; } + } + fn set_coord(&mut self, val: Au) { self.mUnit = nsStyleUnit::eStyleUnit_Coord; unsafe { *self.mValue.mInt.as_mut() = val.0; } @@ -46,6 +53,11 @@ impl StyleCoordHelpers for nsStyleCoord { self.mUnit = nsStyleUnit::eStyleUnit_Enumerated; unsafe { *self.mValue.mInt.as_mut() = val; } } + + fn set_factor(&mut self, val: f32) { + self.mUnit = nsStyleUnit::eStyleUnit_Factor; + unsafe { *self.mValue.mFloat.as_mut() = val; } + } } pub trait ToGeckoStyleCoord {