diff options
author | Patrick Walton <pcwalton@mimiga.net> | 2016-05-24 18:40:39 -0700 |
---|---|---|
committer | Patrick Walton <pcwalton@mimiga.net> | 2016-05-31 14:12:51 -0700 |
commit | a86f77e36d310737ce9e87e1ab49340cfdd89ed7 (patch) | |
tree | 30528e057adaba030572a475c97b88d1a30dc0d1 /components/script/dom/window.rs | |
parent | 55b0bb027caba9ca4f3fb091c55a53c24380dccb (diff) | |
download | servo-a86f77e36d310737ce9e87e1ab49340cfdd89ed7.tar.gz servo-a86f77e36d310737ce9e87e1ab49340cfdd89ed7.zip |
script: Keep the DOM-side viewport up to date when scrolling happens in
WebRender.
This happens asynchronously, just as it does in non-WebRender mode.
This functionality is a prerequisite for doing proper display-list-based
hit testing in WebRender, since it moves the scroll offsets into Servo
(and, specifically, into the script thread, enabling iframe event
forwarding) instead of keeping them private to WebRender.
Requires servo/webrender_traits#55 and servo/webrender#277.
Partially addresses #11108.
Diffstat (limited to 'components/script/dom/window.rs')
-rw-r--r-- | components/script/dom/window.rs | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/components/script/dom/window.rs b/components/script/dom/window.rs index 4862cb83c9e..3d6695986ae 100644 --- a/components/script/dom/window.rs +++ b/components/script/dom/window.rs @@ -995,13 +995,18 @@ impl Window { }; // TODO (farodin91): Raise an event to stop the current_viewport - let size = self.current_viewport.get().size; - self.current_viewport.set(Rect::new(Point2D::new(Au::from_f32_px(x), Au::from_f32_px(y)), size)); + self.update_viewport_for_scroll(x, y); let message = ConstellationMsg::ScrollFragmentPoint(self.pipeline(), layer_id, point, smooth); self.constellation_chan.send(message).unwrap(); } + pub fn update_viewport_for_scroll(&self, x: f32, y: f32) { + let size = self.current_viewport.get().size; + let new_viewport = Rect::new(Point2D::new(Au::from_f32_px(x), Au::from_f32_px(y)), size); + self.current_viewport.set(new_viewport) + } + pub fn client_window(&self) -> (Size2D<u32>, Point2D<i32>) { let (send, recv) = ipc::channel::<(Size2D<u32>, Point2D<i32>)>().unwrap(); self.constellation_chan.send(ConstellationMsg::GetClientWindow(send)).unwrap(); |