diff options
author | Matt Brubeck <mbrubeck@limpet.net> | 2016-03-04 11:02:45 -0800 |
---|---|---|
committer | Matt Brubeck <mbrubeck@limpet.net> | 2016-03-19 13:23:39 -0700 |
commit | 25c1bce9f6f7047523c481ecd371eb1fee18cf74 (patch) | |
tree | 7199abbe9b39bb2e97e2fe2161251eec6be743f1 /components/style/selector_matching.rs | |
parent | 4df7975ed3e74f1d6c491b0435bb3e751b5386a8 (diff) | |
download | servo-25c1bce9f6f7047523c481ecd371eb1fee18cf74.tar.gz servo-25c1bce9f6f7047523c481ecd371eb1fee18cf74.zip |
Recompute viewport-dependent styles on viewport size change
Fixes #8754.
Diffstat (limited to 'components/style/selector_matching.rs')
-rw-r--r-- | components/style/selector_matching.rs | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/components/style/selector_matching.rs b/components/style/selector_matching.rs index abcfd65dfb8..dd9a4cf68af 100644 --- a/components/style/selector_matching.rs +++ b/components/style/selector_matching.rs @@ -226,12 +226,16 @@ impl<Impl: SelectorImplExt> Stylist<Impl> { if let Some(ref constraints) = self.viewport_constraints { device = Device::new(MediaType::Screen, constraints.size); } - let is_device_dirty = self.is_device_dirty || stylesheets.iter() - .flat_map(|stylesheet| stylesheet.rules().media()) - .any(|media_rule| media_rule.evaluate(&self.device) != media_rule.evaluate(&device)); + + let size_changed = device.viewport_size != self.device.viewport_size; + + self.is_device_dirty |= stylesheets.iter().any(|stylesheet| { + (size_changed && stylesheet.dirty_on_viewport_size_change) || + stylesheet.rules().media().any(|media_rule| + media_rule.evaluate(&self.device) != media_rule.evaluate(&device)) + }); self.device = device; - self.is_device_dirty |= is_device_dirty; } pub fn viewport_constraints(&self) -> &Option<ViewportConstraints> { |