diff options
author | Matt Brubeck <mbrubeck@limpet.net> | 2018-05-03 11:40:02 -0700 |
---|---|---|
committer | Matt Brubeck <mbrubeck@limpet.net> | 2018-05-24 14:42:46 -0700 |
commit | baf7dbf0648418fc4e8c5f96dd3492e8fd524dbc (patch) | |
tree | 997f8322a5a3b221c23465a742d09ba65629e8f0 | |
parent | f6762d54e27eec8b65e88d062694b6b46b5bfea7 (diff) | |
download | servo-baf7dbf0648418fc4e8c5f96dd3492e8fd524dbc.tar.gz servo-baf7dbf0648418fc4e8c5f96dd3492e8fd524dbc.zip |
Basic pinch zoom handling
-rw-r--r-- | components/compositing/compositor.rs | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/components/compositing/compositor.rs b/components/compositing/compositor.rs index f8e4d245207..a46f436147b 100644 --- a/components/compositing/compositor.rs +++ b/components/compositing/compositor.rs @@ -918,6 +918,7 @@ impl<Window: WindowMethods> IOCompositor<Window> { (delta * old_event_count + this_delta) / new_event_count); } + last_combined_event.magnification *= scroll_event.magnification; } } } @@ -937,6 +938,11 @@ impl<Window: WindowMethods> IOCompositor<Window> { let cursor = webrender_api::WorldPoint::from_untyped(&cursor); let mut txn = webrender_api::Transaction::new(); txn.scroll(scroll_location, cursor); + if combined_event.magnification != 1.0 { + let old_zoom = self.pinch_zoom_level(); + self.set_pinch_zoom_level(old_zoom * combined_event.magnification); + txn.set_pinch_zoom(webrender_api::ZoomFactor::new(self.pinch_zoom_level())); + } txn.generate_frame(); self.webrender_api.send_transaction(self.webrender_document, txn); self.waiting_for_results_of_scroll = true @@ -1377,8 +1383,17 @@ impl<Window: WindowMethods> IOCompositor<Window> { } pub fn pinch_zoom_level(&self) -> f32 { - // TODO(gw): Access via WR. - 1.0 + self.viewport_zoom.get() + } + + fn set_pinch_zoom_level(&mut self, mut zoom: f32) { + if let Some(min) = self.min_viewport_zoom { + zoom = f32::max(min.get(), zoom); + } + if let Some(max) = self.max_viewport_zoom { + zoom = f32::min(max.get(), zoom); + } + self.viewport_zoom = PinchZoomFactor::new(zoom); } pub fn toggle_webrender_debug(&mut self, option: WebRenderDebugOption) { |