aboutsummaryrefslogtreecommitdiffstats
path: root/components/style/selector_matching.rs
diff options
context:
space:
mode:
authorMatt Brubeck <mbrubeck@limpet.net>2016-03-04 11:02:45 -0800
committerMatt Brubeck <mbrubeck@limpet.net>2016-03-19 13:23:39 -0700
commit25c1bce9f6f7047523c481ecd371eb1fee18cf74 (patch)
tree7199abbe9b39bb2e97e2fe2161251eec6be743f1 /components/style/selector_matching.rs
parent4df7975ed3e74f1d6c491b0435bb3e751b5386a8 (diff)
downloadservo-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.rs12
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> {