Fix delay when changing scrolling direction (#13867)
Fixes: #13720. Co-authored-by: Antonio Scandurra <antonio@zed.dev>
This commit is contained in:
parent
fa602001e3
commit
821aa0811d
2 changed files with 43 additions and 4 deletions
|
@ -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
|
||||||
|
|
|
@ -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,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue