From a44cd072120cc059e8dc4633b33d902817f89834 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Thu, 12 Nov 2020 00:19:12 +0100 Subject: Implement event capturing for `Button` --- native/src/event.rs | 2 +- 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; } } } -- cgit