mirror of
https://github.com/servo/servo.git
synced 2025-08-06 14:10:11 +01:00
Snap scrolling to major axis of movement
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
This commit is contained in:
parent
7f4929d52d
commit
410924d94b
1 changed files with 8 additions and 1 deletions
|
@ -260,7 +260,14 @@ impl Window {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Helper function to send a scroll event.
|
/// 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 mouse_pos = self.mouse_pos.get();
|
||||||
let event = WindowEvent::Scroll(Point2D::typed(dx as f32, dy as f32),
|
let event = WindowEvent::Scroll(Point2D::typed(dx as f32, dy as f32),
|
||||||
Point2D::typed(mouse_pos.x as i32, mouse_pos.y as i32),
|
Point2D::typed(mouse_pos.x as i32, mouse_pos.y as i32),
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue