Invert wheel deltas for Servo scroll

This commit is contained in:
2026-05-13 01:20:10 -04:00
parent 1325f043b4
commit 5bdb2871ad
2 changed files with 34 additions and 3 deletions
@@ -1,4 +1,4 @@
use gpui::{Bounds, Pixels, Point};
use gpui::{Bounds, Pixels, Point, point};
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub(super) struct WebSurfaceSize {
@@ -129,6 +129,10 @@ impl WebSurfaceScrollDelta {
}
}
pub(super) fn servo_scroll_delta_from_wheel_delta(delta: Point<Pixels>) -> Point<Pixels> {
point(-delta.x, -delta.y)
}
fn viewport_dimension(pixels: Pixels, scale_factor: f32) -> Option<u32> {
let value = (f32::from(pixels) * positive_scale_or_one(scale_factor)).round();
if !value.is_finite() || value < 1.0 || value > u32::MAX as f32 {
@@ -192,3 +196,26 @@ fn combined_scroll_delta(current: i32, next: i32) -> i32 {
fn positive_scale_or_one(scale_factor: f32) -> f32 {
if scale_factor.is_finite() && scale_factor > 0.0 { scale_factor } else { 1.0 }
}
#[cfg(test)]
mod tests {
use gpui::{point, px};
use super::servo_scroll_delta_from_wheel_delta;
#[test]
fn wheel_delta_down_becomes_servo_scroll_down() {
let delta = servo_scroll_delta_from_wheel_delta(point(px(0.0), px(-120.0)));
assert_eq!(f32::from(delta.x), 0.0);
assert_eq!(f32::from(delta.y), 120.0);
}
#[test]
fn wheel_delta_up_becomes_servo_scroll_up() {
let delta = servo_scroll_delta_from_wheel_delta(point(px(0.0), px(80.0)));
assert_eq!(f32::from(delta.x), 0.0);
assert_eq!(f32::from(delta.y), -80.0);
}
}