Apply translation to levitated Cursor in scrollable

This commit is contained in:
Héctor Ramón Jiménez 2025-10-15 22:17:39 +02:00
parent 869891bbf0
commit a0cfd52d1b
No known key found for this signature in database
GPG key ID: 7CC46565708259A7
2 changed files with 20 additions and 13 deletions

View file

@ -75,6 +75,20 @@ impl Cursor {
}
}
impl std::ops::Add<Vector> for Cursor {
type Output = Self;
fn add(self, translation: Vector) -> Self::Output {
match self {
Cursor::Available(point) => Cursor::Available(point + translation),
Cursor::Levitating(point) => {
Cursor::Levitating(point + translation)
}
Cursor::Unavailable => Cursor::Unavailable,
}
}
}
impl std::ops::Mul<Transformation> for Cursor {
type Output = Self;

View file

@ -748,28 +748,21 @@ where
Event::Mouse(mouse::Event::WheelScrolled { .. })
)
{
let translation =
state.translation(self.direction, bounds, content_bounds);
let cursor = match cursor_over_scrollable {
Some(cursor_position)
if !(mouse_over_x_scrollbar
|| mouse_over_y_scrollbar) =>
{
mouse::Cursor::Available(
cursor_position
+ state.translation(
self.direction,
bounds,
content_bounds,
),
)
mouse::Cursor::Available(cursor_position + translation)
}
_ => cursor.levitate(),
_ => cursor.levitate() + translation,
};
let had_input_method = shell.input_method().is_enabled();
let translation =
state.translation(self.direction, bounds, content_bounds);
self.content.as_widget_mut().update(
&mut tree.children[0],
event,
@ -1191,7 +1184,7 @@ where
{
mouse::Cursor::Available(cursor_position + translation)
}
_ => cursor.levitate(),
_ => cursor.levitate() + translation,
};
self.content.as_widget().mouse_interaction(