diff options
author | 2020-11-12 00:30:06 +0100 | |
---|---|---|
committer | 2020-11-12 00:40:52 +0100 | |
commit | 3bcee62beb36d9e186d8716c7660433fac071ed6 (patch) | |
tree | 9885c5192f22691171bd53f995b2e9621ce12a25 /native | |
parent | 04468a7147c38cd363cb545de0d9a9881ce071dd (diff) | |
download | iced-3bcee62beb36d9e186d8716c7660433fac071ed6.tar.gz iced-3bcee62beb36d9e186d8716c7660433fac071ed6.tar.bz2 iced-3bcee62beb36d9e186d8716c7660433fac071ed6.zip |
Implement event capturing for `Column`
Diffstat (limited to 'native')
-rw-r--r-- | native/src/event.rs | 21 | ||||
-rw-r--r-- | native/src/widget/column.rs | 16 |
2 files changed, 29 insertions, 8 deletions
diff --git a/native/src/event.rs b/native/src/event.rs index 689c8f5d..9c079151 100644 --- a/native/src/event.rs +++ b/native/src/event.rs @@ -35,3 +35,24 @@ pub enum Status { /// [`Event`]: enum.Event.html Captured, } + +impl Status { + /// Merges two [`Status`] into one. + /// + /// `Captured` takes precedence over `Ignored`: + /// + /// ``` + /// use iced_native::event::Status; + /// + /// assert_eq!(Status::Ignored.merge(Status::Ignored), Status::Ignored); + /// assert_eq!(Status::Ignored.merge(Status::Captured), Status::Captured); + /// assert_eq!(Status::Captured.merge(Status::Ignored), Status::Captured); + /// assert_eq!(Status::Captured.merge(Status::Captured), Status::Captured); + /// ``` + pub fn merge(self, b: Self) -> Self { + match self { + Status::Ignored => b, + Status::Captured => Status::Captured, + } + } +} diff --git a/native/src/widget/column.rs b/native/src/widget/column.rs index 425bd33f..42a9e734 100644 --- a/native/src/widget/column.rs +++ b/native/src/widget/column.rs @@ -163,20 +163,20 @@ where renderer: &Renderer, clipboard: Option<&dyn Clipboard>, ) -> event::Status { - self.children.iter_mut().zip(layout.children()).for_each( - |(child, layout)| { - let _ = child.widget.on_event( + self.children + .iter_mut() + .zip(layout.children()) + .map(|(child, layout)| { + child.widget.on_event( event.clone(), layout, cursor_position, messages, renderer, clipboard, - ); - }, - ); - - event::Status::Ignored + ) + }) + .fold(event::Status::Ignored, event::Status::merge) } fn draw( |