diff options
-rw-r--r-- | ports/glutin/window.rs | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/ports/glutin/window.rs b/ports/glutin/window.rs index 2c720fa3853..af8cf8a242b 100644 --- a/ports/glutin/window.rs +++ b/ports/glutin/window.rs @@ -200,11 +200,20 @@ impl Window { WindowEvent::MouseWindowMoveEventClass(Point2D::typed(x as f32, y as f32))); } Event::MouseWheel(delta) => { - match delta { - MouseScrollDelta::LineDelta(dx, dy) => { - self.scroll_window(dx, dy * LINE_HEIGHT); - } - MouseScrollDelta::PixelDelta(dx, dy) => self.scroll_window(dx, dy) + let (dx, dy) = match delta { + MouseScrollDelta::LineDelta(dx, dy) => (dx, dy * LINE_HEIGHT), + MouseScrollDelta::PixelDelta(dx, dy) => (dx, dy), + }; + + if !self.key_modifiers.get().intersects(LEFT_CONTROL | RIGHT_CONTROL) { + self.scroll_window(dx, dy); + } else { + let factor = if dy > 0. { + 1.1 + } else { + 1.0 / 1.1 + }; + self.pinch_zoom(factor); } }, Event::Refresh => { @@ -225,6 +234,10 @@ impl Window { self.key_modifiers.set(modifiers); } + fn pinch_zoom(&self, factor: f32) { + self.event_queue.borrow_mut().push(WindowEvent::PinchZoom(factor)); + } + /// Helper function to send a scroll event. fn scroll_window(&self, dx: f32, dy: f32) { let mouse_pos = self.mouse_pos.get(); |