From 1389fbe6ff1054ccc1565a39e682fffefec9c304 Mon Sep 17 00:00:00 2001 From: Matt Brubeck Date: Wed, 25 May 2016 17:23:57 -0700 Subject: [PATCH 1/3] Support line-height in geckolib --- .../longhand/inherited_text.mako.rs | 20 +++++++++++++++++++ ports/geckolib/properties.mako.rs | 19 +++++++++++++++++- ports/geckolib/values.rs | 12 +++++++++++ 3 files changed, 50 insertions(+), 1 deletion(-) 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 { From ae2dec4e604b63b88b8709360572d3992af5cc68 Mon Sep 17 00:00:00 2001 From: Matt Brubeck Date: Tue, 31 May 2016 16:13:29 -0700 Subject: [PATCH 2/3] Factor out nsStyleCoord::copy_from --- ports/geckolib/properties.mako.rs | 20 ++++++++++---------- ports/geckolib/values.rs | 8 ++++++++ 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/ports/geckolib/properties.mako.rs b/ports/geckolib/properties.mako.rs index 234f667a175..a9226269242 100644 --- a/ports/geckolib/properties.mako.rs +++ b/ports/geckolib/properties.mako.rs @@ -149,6 +149,12 @@ pub struct ${style_struct.gecko_struct_name} { } +<%def name="impl_coord_copy(ident, gecko_ffi_name)"> + fn copy_${ident}_from(&mut self, other: &Self) { + self.gecko.${gecko_ffi_name}.copy_from(&other.gecko.${gecko_ffi_name}); + } + + <%! def is_border_style_masked(ffi_name): return ffi_name.split("[")[0] in ["mBorderStyle", "mOutlineStyle", "mTextDecorationStyle"] @@ -673,11 +679,8 @@ fn static_assert() { T::LengthOrPercentage(v) => self.gecko.mVerticalAlign.set(v), } } - fn copy_vertical_align_from(&mut self, other: &Self) { - debug_assert_unit_is_safe_to_copy(self.gecko.mVerticalAlign.mUnit); - self.gecko.mVerticalAlign.mUnit = other.gecko.mVerticalAlign.mUnit; - self.gecko.mVerticalAlign.mValue = other.gecko.mVerticalAlign.mValue; - } + + <%call expr="impl_coord_copy('vertical_align', 'mVerticalAlign')"> fn set__moz_binding(&mut self, v: longhands::_moz_binding::computed_value::T) { use style::properties::longhands::_moz_binding::SpecifiedValue as BindingValue; @@ -736,11 +739,8 @@ fn static_assert() { 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; - } + + <%call expr="impl_coord_copy('line_height', 'mLineHeight')"> diff --git a/ports/geckolib/values.rs b/ports/geckolib/values.rs index 6909989311d..3f0ab125d3b 100644 --- a/ports/geckolib/values.rs +++ b/ports/geckolib/values.rs @@ -9,6 +9,7 @@ use std::cmp::max; use style::values::computed::{LengthOrPercentage, LengthOrPercentageOrAuto, LengthOrPercentageOrNone}; pub trait StyleCoordHelpers { + fn copy_from(&mut self, other: &Self); fn set(&mut self, val: T); fn set_auto(&mut self); fn set_normal(&mut self); @@ -20,6 +21,13 @@ pub trait StyleCoordHelpers { } impl StyleCoordHelpers for nsStyleCoord { + fn copy_from(&mut self, other: &Self) { + debug_assert_unit_is_safe_to_copy(self.mUnit); + debug_assert_unit_is_safe_to_copy(other.mUnit); + self.mUnit = other.mUnit; + self.mValue = other.mValue; + } + fn set(&mut self, val: T) { val.to_gecko_style_coord(&mut self.mUnit, &mut self.mValue); } From cc4309d5fb29f9d4fbd661b94483a115634f5bfa Mon Sep 17 00:00:00 2001 From: Matt Brubeck Date: Tue, 31 May 2016 16:17:43 -0700 Subject: [PATCH 3/3] Fix unused import warnings in geckolib --- ports/geckolib/properties.mako.rs | 1 - ports/geckolib/wrapper.rs | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/ports/geckolib/properties.mako.rs b/ports/geckolib/properties.mako.rs index a9226269242..d1497324474 100644 --- a/ports/geckolib/properties.mako.rs +++ b/ports/geckolib/properties.mako.rs @@ -20,7 +20,6 @@ use gecko_bindings::bindings::{Gecko_CopyMozBindingFrom, Gecko_CopyListStyleType use gecko_bindings::bindings::{Gecko_SetMozBinding, Gecko_SetListStyleType}; use gecko_bindings::structs; use glue::ArcHelpers; -use heapsize::HeapSizeOf; use std::fmt::{self, Debug}; use std::mem::{transmute, zeroed}; use std::sync::Arc; diff --git a/ports/geckolib/wrapper.rs b/ports/geckolib/wrapper.rs index ec913823caf..09e6a1501f9 100644 --- a/ports/geckolib/wrapper.rs +++ b/ports/geckolib/wrapper.rs @@ -41,6 +41,7 @@ use style::dom::{TDocument, TElement, TNode, TRestyleDamage, UnsafeNode}; use style::element_state::ElementState; #[allow(unused_imports)] // Used in commented-out code. use style::error_reporting::StdoutErrorReporter; +#[allow(unused_imports)] // Used in commented-out code. use style::parser::ParserContextExtraData; use style::properties::{PropertyDeclaration, PropertyDeclarationBlock}; #[allow(unused_imports)] // Used in commented-out code.