diff options
author | Emilio Cobos Álvarez <ecoal95@gmail.com> | 2016-08-12 14:35:31 -0700 |
---|---|---|
committer | Emilio Cobos Álvarez <ecoal95@gmail.com> | 2016-08-14 01:37:28 -0700 |
commit | 40c04b4c6b6a3d52b5a3e658e11bccb595783336 (patch) | |
tree | 118d876d2efe0aca8e0e15ae8cd0be7765d968e6 /components | |
parent | b1fca78cba8dddf41802c5a2001290ae8b6f46a1 (diff) | |
download | servo-40c04b4c6b6a3d52b5a3e658e11bccb595783336.tar.gz servo-40c04b4c6b6a3d52b5a3e658e11bccb595783336.zip |
style: Correcly track whether calc values support viewport sizes.
Diffstat (limited to 'components')
-rw-r--r-- | components/style/stylesheets.rs | 3 | ||||
-rw-r--r-- | components/style/values/specified/mod.rs | 29 |
2 files changed, 23 insertions, 9 deletions
diff --git a/components/style/stylesheets.rs b/components/style/stylesheets.rs index 64751c35c82..25bb03174e0 100644 --- a/components/style/stylesheets.rs +++ b/components/style/stylesheets.rs @@ -169,7 +169,8 @@ impl Stylesheet { origin: origin, rules: rules, media: None, - dirty_on_viewport_size_change: input.seen_viewport_percentages(), + dirty_on_viewport_size_change: + input.seen_viewport_percentages(), } } diff --git a/components/style/values/specified/mod.rs b/components/style/values/specified/mod.rs index d27b0d6f893..77df3f94bdb 100644 --- a/components/style/values/specified/mod.rs +++ b/components/style/values/specified/mod.rs @@ -197,6 +197,7 @@ impl HasViewportPercentage for Length { fn has_viewport_percentage(&self) -> bool { match *self { Length::ViewportPercentage(_) => true, + Length::Calc(ref calc) => calc.has_viewport_percentage(), _ => false } } @@ -208,7 +209,7 @@ impl ToCss for Length { Length::Absolute(length) => write!(dest, "{}px", length.to_f32_px()), Length::FontRelative(length) => length.to_css(dest), Length::ViewportPercentage(length) => length.to_css(dest), - Length::Calc(calc) => calc.to_css(dest), + Length::Calc(ref calc) => calc.to_css(dest), Length::ServoCharacterWidth(_) => panic!("internal CSS values should never be serialized"), } @@ -467,6 +468,7 @@ pub struct CalcLengthOrPercentage { pub rem: Option<FontRelativeLength>, pub percentage: Option<Percentage>, } + impl CalcLengthOrPercentage { fn parse_sum(input: &mut Parser, expected_unit: CalcUnit) -> Result<CalcSumNode, ()> { let mut products = Vec::new(); @@ -751,6 +753,13 @@ impl CalcLengthOrPercentage { } } +impl HasViewportPercentage for CalcLengthOrPercentage { + fn has_viewport_percentage(&self) -> bool { + self.vw.is_some() || self.vh.is_some() || + self.vmin.is_some() || self.vmax.is_some() + } +} + impl ToCss for CalcLengthOrPercentage { #[allow(unused_assignments)] fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { @@ -823,7 +832,8 @@ pub enum LengthOrPercentage { impl HasViewportPercentage for LengthOrPercentage { fn has_viewport_percentage(&self) -> bool { match *self { - LengthOrPercentage::Length(length) => length.has_viewport_percentage(), + LengthOrPercentage::Length(ref length) => length.has_viewport_percentage(), + LengthOrPercentage::Calc(ref calc) => calc.has_viewport_percentage(), _ => false } } @@ -882,7 +892,8 @@ pub enum LengthOrPercentageOrAuto { impl HasViewportPercentage for LengthOrPercentageOrAuto { fn has_viewport_percentage(&self) -> bool { match *self { - LengthOrPercentageOrAuto::Length(length) => length.has_viewport_percentage(), + LengthOrPercentageOrAuto::Length(ref length) => length.has_viewport_percentage(), + LengthOrPercentageOrAuto::Calc(ref calc) => calc.has_viewport_percentage(), _ => false } } @@ -941,7 +952,8 @@ pub enum LengthOrPercentageOrNone { impl HasViewportPercentage for LengthOrPercentageOrNone { fn has_viewport_percentage(&self) -> bool { match *self { - LengthOrPercentageOrNone::Length(length) => length.has_viewport_percentage(), + LengthOrPercentageOrNone::Length(ref length) => length.has_viewport_percentage(), + LengthOrPercentageOrNone::Calc(ref calc) => calc.has_viewport_percentage(), _ => false } } @@ -950,9 +962,9 @@ impl HasViewportPercentage for LengthOrPercentageOrNone { impl ToCss for LengthOrPercentageOrNone { fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { match *self { - LengthOrPercentageOrNone::Length(length) => length.to_css(dest), - LengthOrPercentageOrNone::Percentage(percentage) => percentage.to_css(dest), - LengthOrPercentageOrNone::Calc(calc) => calc.to_css(dest), + LengthOrPercentageOrNone::Length(ref length) => length.to_css(dest), + LengthOrPercentageOrNone::Percentage(ref percentage) => percentage.to_css(dest), + LengthOrPercentageOrNone::Calc(ref calc) => calc.to_css(dest), LengthOrPercentageOrNone::None => dest.write_str("none"), } } @@ -997,7 +1009,7 @@ pub enum LengthOrNone { impl HasViewportPercentage for LengthOrNone { fn has_viewport_percentage(&self) -> bool { match *self { - LengthOrNone::Length(length) => length.has_viewport_percentage(), + LengthOrNone::Length(ref length) => length.has_viewport_percentage(), _ => false } } @@ -1051,6 +1063,7 @@ impl HasViewportPercentage for LengthOrPercentageOrAutoOrContent { fn has_viewport_percentage(&self) -> bool { match *self { LengthOrPercentageOrAutoOrContent::Length(length) => length.has_viewport_percentage(), + LengthOrPercentageOrAutoOrContent::Calc(ref calc) => calc.has_viewport_percentage(), _ => false } } |