Implement event capturing for Button
This commit is contained in:
parent
3f968b8c87
commit
a44cd07212
@ -25,7 +25,7 @@ pub enum Event {
|
|||||||
/// [`UserInterface`]: ../struct.UserInterface.html
|
/// [`UserInterface`]: ../struct.UserInterface.html
|
||||||
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
||||||
pub enum Status {
|
pub enum Status {
|
||||||
/// The [`Event`] was _NOT_ handled by any widget.
|
/// The [`Event`] was **NOT** handled by any widget.
|
||||||
///
|
///
|
||||||
/// [`Event`]: enum.Event.html
|
/// [`Event`]: enum.Event.html
|
||||||
Ignored,
|
Ignored,
|
||||||
|
@ -192,20 +192,25 @@ where
|
|||||||
if self.on_press.is_some() {
|
if self.on_press.is_some() {
|
||||||
let bounds = layout.bounds();
|
let bounds = layout.bounds();
|
||||||
|
|
||||||
self.state.is_pressed = bounds.contains(cursor_position);
|
if bounds.contains(cursor_position) {
|
||||||
|
self.state.is_pressed = true;
|
||||||
|
|
||||||
|
return event::Status::Captured;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Event::Mouse(mouse::Event::ButtonReleased(mouse::Button::Left)) => {
|
Event::Mouse(mouse::Event::ButtonReleased(mouse::Button::Left)) => {
|
||||||
if let Some(on_press) = self.on_press.clone() {
|
if let Some(on_press) = self.on_press.clone() {
|
||||||
let bounds = layout.bounds();
|
let bounds = layout.bounds();
|
||||||
|
|
||||||
let is_clicked = self.state.is_pressed
|
if self.state.is_pressed {
|
||||||
&& bounds.contains(cursor_position);
|
self.state.is_pressed = false;
|
||||||
|
|
||||||
self.state.is_pressed = false;
|
if bounds.contains(cursor_position) {
|
||||||
|
messages.push(on_press);
|
||||||
|
}
|
||||||
|
|
||||||
if is_clicked {
|
return event::Status::Captured;
|
||||||
messages.push(on_press);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user