summaryrefslogtreecommitdiffstats
path: root/widget/src
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2023-06-08 21:03:24 +0200
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2023-06-08 21:03:24 +0200
commit27639c4ce6161fa07986c2f1d472a8a259ae2129 (patch)
tree01a7758d3b8a4d2434bba113df85c6cb2c3e2ca2 /widget/src
parent733c2bd9f594a21ce20444e8edcb4c5f88118e0a (diff)
downloadiced-27639c4ce6161fa07986c2f1d472a8a259ae2129.tar.gz
iced-27639c4ce6161fa07986c2f1d472a8a259ae2129.tar.bz2
iced-27639c4ce6161fa07986c2f1d472a8a259ae2129.zip
Fix mouse interactions in `Scrollable`
Diffstat (limited to 'widget/src')
-rw-r--r--widget/src/scrollable.rs28
1 files changed, 24 insertions, 4 deletions
diff --git a/widget/src/scrollable.rs b/widget/src/scrollable.rs
index d90aca2b..5c00ee20 100644
--- a/widget/src/scrollable.rs
+++ b/widget/src/scrollable.rs
@@ -480,10 +480,6 @@ pub fn update<Message>(
return event::Status::Ignored;
}
- let Some(cursor_position) = cursor_over_scrollable else {
- return event::Status::Ignored
- };
-
match event {
Event::Mouse(mouse::Event::WheelScrolled { delta }) => {
let delta = match delta {
@@ -512,12 +508,20 @@ pub fn update<Message>(
{
match event {
touch::Event::FingerPressed { .. } => {
+ let Some(cursor_position) = cursor.position() else {
+ return event::Status::Ignored
+ };
+
state.scroll_area_touched_at = Some(cursor_position);
}
touch::Event::FingerMoved { .. } => {
if let Some(scroll_box_touched_at) =
state.scroll_area_touched_at
{
+ let Some(cursor_position) = cursor.position() else {
+ return event::Status::Ignored
+ };
+
let delta = Vector::new(
cursor_position.x - scroll_box_touched_at.x,
cursor_position.y - scroll_box_touched_at.y,
@@ -559,6 +563,10 @@ pub fn update<Message>(
Event::Mouse(mouse::Event::CursorMoved { .. })
| Event::Touch(touch::Event::FingerMoved { .. }) => {
if let Some(scrollbar) = scrollbars.y {
+ let Some(cursor_position) = cursor.position() else {
+ return event::Status::Ignored
+ };
+
state.scroll_y_to(
scrollbar.scroll_percentage_y(
scroller_grabbed_at,
@@ -585,6 +593,10 @@ pub fn update<Message>(
match event {
Event::Mouse(mouse::Event::ButtonPressed(mouse::Button::Left))
| Event::Touch(touch::Event::FingerPressed { .. }) => {
+ let Some(cursor_position) = cursor.position() else {
+ return event::Status::Ignored
+ };
+
if let (Some(scroller_grabbed_at), Some(scrollbar)) =
(scrollbars.grab_y_scroller(cursor_position), scrollbars.y)
{
@@ -625,6 +637,10 @@ pub fn update<Message>(
}
Event::Mouse(mouse::Event::CursorMoved { .. })
| Event::Touch(touch::Event::FingerMoved { .. }) => {
+ let Some(cursor_position) = cursor.position() else {
+ return event::Status::Ignored
+ };
+
if let Some(scrollbar) = scrollbars.x {
state.scroll_x_to(
scrollbar.scroll_percentage_x(
@@ -652,6 +668,10 @@ pub fn update<Message>(
match event {
Event::Mouse(mouse::Event::ButtonPressed(mouse::Button::Left))
| Event::Touch(touch::Event::FingerPressed { .. }) => {
+ let Some(cursor_position) = cursor.position() else {
+ return event::Status::Ignored
+ };
+
if let (Some(scroller_grabbed_at), Some(scrollbar)) =
(scrollbars.grab_x_scroller(cursor_position), scrollbars.x)
{