aboutsummaryrefslogtreecommitdiffstats
path: root/components
diff options
context:
space:
mode:
authorEmilio Cobos Álvarez <ecoal95@gmail.com>2016-08-12 14:35:31 -0700
committerEmilio Cobos Álvarez <ecoal95@gmail.com>2016-08-14 01:37:28 -0700
commit40c04b4c6b6a3d52b5a3e658e11bccb595783336 (patch)
tree118d876d2efe0aca8e0e15ae8cd0be7765d968e6 /components
parentb1fca78cba8dddf41802c5a2001290ae8b6f46a1 (diff)
downloadservo-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.rs3
-rw-r--r--components/style/values/specified/mod.rs29
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
}
}