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

@ -187,7 +187,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>,
@ -196,7 +196,7 @@ where
&mut tree.children[0],
event.clone(),
layout.children().next().unwrap(),
cursor_position,
cursor,
renderer,
clipboard,
shell,
@ -204,14 +204,9 @@ where
return event::Status::Captured;
}
update(
event,
layout,
cursor_position,
shell,
&self.on_press,
|| tree.state.downcast_mut::<State>(),
)
update(event, layout, cursor, shell, &self.on_press, || {
tree.state.downcast_mut::<State>()
})
}
fn draw(
@ -221,7 +216,7 @@ where
theme: &Renderer::Theme,
_style: &renderer::Style,
layout: Layout<'_>,
cursor_position: Point,
cursor: mouse::Cursor,
_viewport: &Rectangle,
) {
let bounds = layout.bounds();
@ -230,7 +225,7 @@ where
let styling = draw(
renderer,
bounds,
cursor_position,
cursor,
self.on_press.is_some(),
theme,
&self.style,
@ -245,7 +240,7 @@ where
text_color: styling.text_color,
},
content_layout,
cursor_position,
cursor,
&bounds,
);
}
@ -254,11 +249,11 @@ where
&self,
_tree: &Tree,
layout: Layout<'_>,
cursor_position: Point,
cursor: mouse::Cursor,
_viewport: &Rectangle,
_renderer: &Renderer,
) -> mouse::Interaction {
mouse_interaction(layout, cursor_position, self.on_press.is_some())
mouse_interaction(layout, cursor, self.on_press.is_some())
}
fn overlay<'b>(
@ -305,7 +300,7 @@ impl State {
pub fn update<'a, Message: Clone>(
event: Event,
layout: Layout<'_>,
cursor_position: Point,
cursor: mouse::Cursor,
shell: &mut Shell<'_, Message>,
on_press: &Option<Message>,
state: impl FnOnce() -> &'a mut State,
@ -316,7 +311,7 @@ pub fn update<'a, Message: Clone>(
if on_press.is_some() {
let bounds = layout.bounds();
if bounds.contains(cursor_position) {
if cursor.is_over(&bounds) {
let state = state();
state.is_pressed = true;
@ -335,7 +330,7 @@ pub fn update<'a, Message: Clone>(
let bounds = layout.bounds();
if bounds.contains(cursor_position) {
if cursor.is_over(&bounds) {
shell.publish(on_press);
}
@ -358,7 +353,7 @@ pub fn update<'a, Message: Clone>(
pub fn draw<'a, Renderer: crate::core::Renderer>(
renderer: &mut Renderer,
bounds: Rectangle,
cursor_position: Point,
cursor: mouse::Cursor,
is_enabled: bool,
style_sheet: &dyn StyleSheet<
Style = <Renderer::Theme as StyleSheet>::Style,
@ -369,7 +364,7 @@ pub fn draw<'a, Renderer: crate::core::Renderer>(
where
Renderer::Theme: StyleSheet,
{
let is_mouse_over = bounds.contains(cursor_position);
let is_mouse_over = cursor.is_over(&bounds);
let styling = if !is_enabled {
style_sheet.disabled(style)
@ -442,10 +437,10 @@ pub fn layout<Renderer>(
/// Returns the [`mouse::Interaction`] of a [`Button`].
pub fn mouse_interaction(
layout: Layout<'_>,
cursor_position: Point,
cursor: mouse::Cursor,
is_enabled: bool,
) -> mouse::Interaction {
let is_mouse_over = layout.bounds().contains(cursor_position);
let is_mouse_over = cursor.is_over(&layout.bounds());
if is_mouse_over && is_enabled {
mouse::Interaction::Pointer