summaryrefslogtreecommitdiffstats
path: root/widget/src/scrollable.rs
diff options
context:
space:
mode:
Diffstat (limited to 'widget/src/scrollable.rs')
-rw-r--r--widget/src/scrollable.rs62
1 files changed, 27 insertions, 35 deletions
diff --git a/widget/src/scrollable.rs b/widget/src/scrollable.rs
index abad6ea6..33d4f545 100644
--- a/widget/src/scrollable.rs
+++ b/widget/src/scrollable.rs
@@ -21,7 +21,6 @@
//! ```
use crate::container;
use crate::core::border::{self, Border};
-use crate::core::event::{self, Event};
use crate::core::keyboard;
use crate::core::layout;
use crate::core::mouse;
@@ -34,8 +33,8 @@ use crate::core::widget::operation::{self, Operation};
use crate::core::widget::tree::{self, Tree};
use crate::core::window;
use crate::core::{
- self, Background, Clipboard, Color, Element, Layout, Length, Padding,
- Pixels, Point, Rectangle, Shell, Size, Theme, Vector, Widget,
+ self, Background, Clipboard, Color, Element, Event, Layout, Length,
+ Padding, Pixels, Point, Rectangle, Shell, Size, Theme, Vector, Widget,
};
use crate::runtime::task::{self, Task};
use crate::runtime::Action;
@@ -519,7 +518,7 @@ where
clipboard: &mut dyn Clipboard,
shell: &mut Shell<'_, Message>,
_viewport: &Rectangle,
- ) -> event::Status {
+ ) {
let state = tree.state.downcast_mut::<State>();
let bounds = layout.bounds();
let cursor_over_scrollable = cursor.position_over(bounds);
@@ -561,7 +560,7 @@ where
if let Some(scrollbar) = scrollbars.y {
let Some(cursor_position) = cursor.position()
else {
- return event::Status::Ignored;
+ return;
};
state.scroll_y_to(
@@ -581,7 +580,7 @@ where
shell,
);
- return event::Status::Captured;
+ shell.capture_event();
}
}
_ => {}
@@ -593,7 +592,7 @@ where
))
| Event::Touch(touch::Event::FingerPressed { .. }) => {
let Some(cursor_position) = cursor.position() else {
- return event::Status::Ignored;
+ return;
};
if let (Some(scroller_grabbed_at), Some(scrollbar)) = (
@@ -621,7 +620,7 @@ where
);
}
- return event::Status::Captured;
+ shell.capture_event();
}
_ => {}
}
@@ -632,7 +631,7 @@ where
Event::Mouse(mouse::Event::CursorMoved { .. })
| Event::Touch(touch::Event::FingerMoved { .. }) => {
let Some(cursor_position) = cursor.position() else {
- return event::Status::Ignored;
+ return;
};
if let Some(scrollbar) = scrollbars.x {
@@ -654,7 +653,7 @@ where
);
}
- return event::Status::Captured;
+ shell.capture_event();
}
_ => {}
}
@@ -665,7 +664,7 @@ where
))
| Event::Touch(touch::Event::FingerPressed { .. }) => {
let Some(cursor_position) = cursor.position() else {
- return event::Status::Ignored;
+ return;
};
if let (Some(scroller_grabbed_at), Some(scrollbar)) = (
@@ -692,20 +691,19 @@ where
shell,
);
- return event::Status::Captured;
+ shell.capture_event();
}
}
_ => {}
}
}
- let content_status = if state.last_scrolled.is_some()
- && matches!(
+ if state.last_scrolled.is_none()
+ || !matches!(
event,
Event::Mouse(mouse::Event::WheelScrolled { .. })
- ) {
- event::Status::Ignored
- } else {
+ )
+ {
let cursor = match cursor_over_scrollable {
Some(cursor_position)
if !(mouse_over_x_scrollbar
@@ -739,7 +737,7 @@ where
x: bounds.x + translation.x,
..bounds
},
- )
+ );
};
if matches!(
@@ -754,11 +752,11 @@ where
state.x_scroller_grabbed_at = None;
state.y_scroller_grabbed_at = None;
- return content_status;
+ return;
}
- if let event::Status::Captured = content_status {
- return event::Status::Captured;
+ if shell.is_event_captured() {
+ return;
}
if let Event::Keyboard(keyboard::Event::ModifiersChanged(
@@ -767,13 +765,13 @@ where
{
state.keyboard_modifiers = modifiers;
- return event::Status::Ignored;
+ return;
}
match event {
Event::Mouse(mouse::Event::WheelScrolled { delta }) => {
if cursor_over_scrollable.is_none() {
- return event::Status::Ignored;
+ return;
}
let delta = match delta {
@@ -827,9 +825,7 @@ where
let in_transaction = state.last_scrolled.is_some();
if has_scrolled || in_transaction {
- event::Status::Captured
- } else {
- event::Status::Ignored
+ shell.capture_event();
}
}
Event::Touch(event)
@@ -841,7 +837,7 @@ where
touch::Event::FingerPressed { .. } => {
let Some(cursor_position) = cursor.position()
else {
- return event::Status::Ignored;
+ return;
};
state.scroll_area_touched_at =
@@ -853,7 +849,7 @@ where
{
let Some(cursor_position) = cursor.position()
else {
- return event::Status::Ignored;
+ return;
};
let delta = Vector::new(
@@ -883,7 +879,7 @@ where
_ => {}
}
- event::Status::Captured
+ shell.capture_event();
}
Event::Window(window::Event::RedrawRequested(_)) => {
let _ = notify_viewport(
@@ -893,14 +889,12 @@ where
content_bounds,
shell,
);
-
- event::Status::Ignored
}
- _ => event::Status::Ignored,
+ _ => {}
}
};
- let event_status = update();
+ update();
let status = if state.y_scroller_grabbed_at.is_some()
|| state.x_scroller_grabbed_at.is_some()
@@ -933,8 +927,6 @@ where
{
shell.request_redraw();
}
-
- event_status
}
fn draw(