diff options
author | 2020-11-12 00:19:12 +0100 | |
---|---|---|
committer | 2020-11-12 00:19:12 +0100 | |
commit | a44cd072120cc059e8dc4633b33d902817f89834 (patch) | |
tree | 22d6fe72d16ff44b8e036619a3bbf63710aa07ea /native | |
parent | 3f968b8c876b7c2351232856887fb9c3e3db3130 (diff) | |
download | iced-a44cd072120cc059e8dc4633b33d902817f89834.tar.gz iced-a44cd072120cc059e8dc4633b33d902817f89834.tar.bz2 iced-a44cd072120cc059e8dc4633b33d902817f89834.zip |
Implement event capturing for `Button`
Diffstat (limited to 'native')
-rw-r--r-- | native/src/event.rs | 2 | ||||
-rw-r--r-- | native/src/widget/button.rs | 17 |
2 files changed, 12 insertions, 7 deletions
diff --git a/native/src/event.rs b/native/src/event.rs index 91f33bd5..689c8f5d 100644 --- a/native/src/event.rs +++ b/native/src/event.rs @@ -25,7 +25,7 @@ pub enum Event { /// [`UserInterface`]: ../struct.UserInterface.html #[derive(Debug, Clone, Copy, PartialEq, Eq)] pub enum Status { - /// The [`Event`] was _NOT_ handled by any widget. + /// The [`Event`] was **NOT** handled by any widget. /// /// [`Event`]: enum.Event.html Ignored, diff --git a/native/src/widget/button.rs b/native/src/widget/button.rs index 4a2d82e9..466f6ac5 100644 --- a/native/src/widget/button.rs +++ b/native/src/widget/button.rs @@ -192,20 +192,25 @@ where if self.on_press.is_some() { 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)) => { if let Some(on_press) = self.on_press.clone() { let bounds = layout.bounds(); - let is_clicked = self.state.is_pressed - && bounds.contains(cursor_position); + if self.state.is_pressed { + self.state.is_pressed = false; - self.state.is_pressed = false; + if bounds.contains(cursor_position) { + messages.push(on_press); + } - if is_clicked { - messages.push(on_press); + return event::Status::Captured; } } } |