Implement basic cursor availability

This commit is contained in:
Héctor Ramón Jiménez 2023-06-08 20:11:59 +02:00
parent c15f1b5f65
commit 34451bff18
No known key found for this signature in database
GPG key ID: 140CC052C94F138E
55 changed files with 731 additions and 886 deletions

View file

@ -183,7 +183,7 @@ where
tree: &mut Tree,
event: Event,
layout: Layout<'_>,
cursor_position: Point,
cursor: mouse::Cursor,
_renderer: &Renderer,
_clipboard: &mut dyn Clipboard,
shell: &mut Shell<'_, Message>,
@ -191,7 +191,7 @@ where
update(
event,
layout,
cursor_position,
cursor,
shell,
tree.state.downcast_mut::<State>(),
&mut self.value,
@ -209,13 +209,13 @@ where
theme: &Renderer::Theme,
_style: &renderer::Style,
layout: Layout<'_>,
cursor_position: Point,
cursor: mouse::Cursor,
_viewport: &Rectangle,
) {
draw(
renderer,
layout,
cursor_position,
cursor,
tree.state.downcast_ref::<State>(),
self.value,
&self.range,
@ -228,15 +228,11 @@ where
&self,
tree: &Tree,
layout: Layout<'_>,
cursor_position: Point,
cursor: mouse::Cursor,
_viewport: &Rectangle,
_renderer: &Renderer,
) -> mouse::Interaction {
mouse_interaction(
layout,
cursor_position,
tree.state.downcast_ref::<State>(),
)
mouse_interaction(layout, cursor, tree.state.downcast_ref::<State>())
}
}
@ -260,7 +256,7 @@ where
pub fn update<Message, T>(
event: Event,
layout: Layout<'_>,
cursor_position: Point,
cursor: mouse::Cursor,
shell: &mut Shell<'_, Message>,
state: &mut State,
value: &mut T,
@ -275,7 +271,7 @@ where
{
let is_dragging = state.is_dragging;
let mut change = || {
let mut change = |cursor_position: Point| {
let bounds = layout.bounds();
let new_value = if cursor_position.x <= bounds.x {
*range.start()
@ -309,8 +305,10 @@ where
match event {
Event::Mouse(mouse::Event::ButtonPressed(mouse::Button::Left))
| Event::Touch(touch::Event::FingerPressed { .. }) => {
if layout.bounds().contains(cursor_position) {
change();
if let Some(cursor_position) =
cursor.position_over(&layout.bounds())
{
change(cursor_position);
state.is_dragging = true;
return event::Status::Captured;
@ -331,7 +329,7 @@ where
Event::Mouse(mouse::Event::CursorMoved { .. })
| Event::Touch(touch::Event::FingerMoved { .. }) => {
if is_dragging {
change();
let _ = cursor.position().map(change);
return event::Status::Captured;
}
@ -346,7 +344,7 @@ where
pub fn draw<T, R>(
renderer: &mut R,
layout: Layout<'_>,
cursor_position: Point,
cursor: mouse::Cursor,
state: &State,
value: T,
range: &RangeInclusive<T>,
@ -358,7 +356,7 @@ pub fn draw<T, R>(
R::Theme: StyleSheet,
{
let bounds = layout.bounds();
let is_mouse_over = bounds.contains(cursor_position);
let is_mouse_over = cursor.is_over(&bounds);
let style = if state.is_dragging {
style_sheet.dragging(style)
@ -444,11 +442,11 @@ pub fn draw<T, R>(
/// Computes the current [`mouse::Interaction`] of a [`Slider`].
pub fn mouse_interaction(
layout: Layout<'_>,
cursor_position: Point,
cursor: mouse::Cursor,
state: &State,
) -> mouse::Interaction {
let bounds = layout.bounds();
let is_mouse_over = bounds.contains(cursor_position);
let is_mouse_over = cursor.is_over(&bounds);
if state.is_dragging {
mouse::Interaction::Grabbing