Fix delay when changing scrolling direction (#13867)

Fixes: #13720.

Co-authored-by: Antonio Scandurra <antonio@zed.dev>
This commit is contained in:
Peter Tripp 2024-07-05 11:11:43 -04:00 committed by GitHub
parent fa602001e3
commit 821aa0811d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 43 additions and 4 deletions

View file

@ -2320,6 +2320,18 @@ impl Pixels {
Self(self.0.abs()) Self(self.0.abs())
} }
/// Returns the sign of the `Pixels` value.
///
/// # Returns
///
/// Returns:
/// * `1.0` if the value is positive
/// * `-1.0` if the value is negative
/// * `0.0` if the value is zero
pub fn signum(&self) -> f32 {
self.0.signum()
}
/// Returns the f64 value of `Pixels`. /// Returns the f64 value of `Pixels`.
/// ///
/// # Returns /// # Returns

View file

@ -291,14 +291,41 @@ impl ScrollDelta {
} }
/// Combines two scroll deltas into one. /// Combines two scroll deltas into one.
/// If the signs of the deltas are the same (both positive or both negative),
/// the deltas are added together. If the signs are opposite, the second delta
/// (other) is used, effectively overriding the first delta.
pub fn coalesce(self, other: ScrollDelta) -> ScrollDelta { pub fn coalesce(self, other: ScrollDelta) -> ScrollDelta {
match (self, other) { match (self, other) {
(ScrollDelta::Pixels(px_a), ScrollDelta::Pixels(px_b)) => { (ScrollDelta::Pixels(a), ScrollDelta::Pixels(b)) => {
ScrollDelta::Pixels(px_a + px_b) let x = if a.x.signum() * b.x.signum() >= 0. {
a.x + b.x
} else {
b.x
};
let y = if a.y.signum() * b.y.signum() >= 0. {
a.y + b.y
} else {
b.y
};
ScrollDelta::Pixels(point(x, y))
} }
(ScrollDelta::Lines(lines_a), ScrollDelta::Lines(lines_b)) => { (ScrollDelta::Lines(a), ScrollDelta::Lines(b)) => {
ScrollDelta::Lines(lines_a + lines_b) let x = if a.x.signum() * b.x.signum() >= 0. {
a.x + b.x
} else {
b.x
};
let y = if a.y.signum() * b.y.signum() >= 0. {
a.y + b.y
} else {
b.y
};
ScrollDelta::Lines(point(x, y))
} }
_ => other, _ => other,