Skip to content

Commit

Permalink
Snap scrolling to major axis of movement
Browse files Browse the repository at this point in the history
This is what Safari does, and it leads to much better behavior, in particular wrt overscrolling. It does cause a staircase effect when scrolling diagonally, which again Safari has, too. I don't think that bad, because it should occur very rarely in practice.

Fixes #10341
  • Loading branch information
tschneidereit committed Apr 3, 2016
1 parent 7f4929d commit 410924d
Showing 1 changed file with 8 additions and 1 deletion.
9 changes: 8 additions & 1 deletion ports/glutin/window.rs
Expand Up @@ -260,7 +260,14 @@ impl Window {
}

/// Helper function to send a scroll event.
fn scroll_window(&self, dx: f32, dy: f32, phase: TouchEventType) {
fn scroll_window(&self, mut dx: f32, mut dy: f32, phase: TouchEventType) {
// Scroll events snap to the major axis of movement, with vertical
// preferred over horizontal.
if dy.abs() >= dx.abs() {
dx = 0.0;
} else {
dy = 0.0;
}
let mouse_pos = self.mouse_pos.get();
let event = WindowEvent::Scroll(Point2D::typed(dx as f32, dy as f32),
Point2D::typed(mouse_pos.x as i32, mouse_pos.y as i32),
Expand Down

0 comments on commit 410924d

Please sign in to comment.