diff options
author | 2020-11-12 00:09:52 +0100 | |
---|---|---|
committer | 2020-11-12 00:09:52 +0100 | |
commit | 3f968b8c876b7c2351232856887fb9c3e3db3130 (patch) | |
tree | 0d8c04a09e2da877bb823bc039a57d4222fb1346 /native | |
parent | 1db11ba69a3183924a1f4cae91031f4c5051b6dc (diff) | |
download | iced-3f968b8c876b7c2351232856887fb9c3e3db3130.tar.gz iced-3f968b8c876b7c2351232856887fb9c3e3db3130.tar.bz2 iced-3f968b8c876b7c2351232856887fb9c3e3db3130.zip |
Make `Widget::on_event` return an `event::Status`
Diffstat (limited to 'native')
-rw-r--r-- | native/src/element.rs | 15 | ||||
-rw-r--r-- | native/src/event.rs | 9 | ||||
-rw-r--r-- | native/src/overlay/menu.rs | 18 | ||||
-rw-r--r-- | native/src/user_interface.rs | 2 | ||||
-rw-r--r-- | native/src/widget.rs | 10 | ||||
-rw-r--r-- | native/src/widget/button.rs | 10 | ||||
-rw-r--r-- | native/src/widget/checkbox.rs | 14 | ||||
-rw-r--r-- | native/src/widget/column.rs | 12 | ||||
-rw-r--r-- | native/src/widget/container.rs | 8 | ||||
-rw-r--r-- | native/src/widget/pane_grid.rs | 15 | ||||
-rw-r--r-- | native/src/widget/pane_grid/content.rs | 2 | ||||
-rw-r--r-- | native/src/widget/pane_grid/title_bar.rs | 2 | ||||
-rw-r--r-- | native/src/widget/pick_list.rs | 16 | ||||
-rw-r--r-- | native/src/widget/radio.rs | 14 | ||||
-rw-r--r-- | native/src/widget/row.rs | 12 | ||||
-rw-r--r-- | native/src/widget/scrollable.rs | 11 | ||||
-rw-r--r-- | native/src/widget/slider.rs | 10 | ||||
-rw-r--r-- | native/src/widget/text_input.rs | 14 |
18 files changed, 127 insertions, 67 deletions
diff --git a/native/src/element.rs b/native/src/element.rs index 10e1b5fb..9703a7db 100644 --- a/native/src/element.rs +++ b/native/src/element.rs @@ -1,7 +1,8 @@ +use crate::event::{self, Event}; use crate::layout; use crate::overlay; use crate::{ - Clipboard, Color, Event, Hasher, Layout, Length, Point, Rectangle, Widget, + Clipboard, Color, Hasher, Layout, Length, Point, Rectangle, Widget, }; /// A generic [`Widget`]. @@ -240,7 +241,7 @@ where messages: &mut Vec<Message>, renderer: &Renderer, clipboard: Option<&dyn Clipboard>, - ) { + ) -> event::Status { self.widget.on_event( event, layout, @@ -248,7 +249,7 @@ where messages, renderer, clipboard, - ); + ) } /// Draws the [`Element`] and its children using the given [`Layout`]. @@ -335,10 +336,10 @@ where messages: &mut Vec<B>, renderer: &Renderer, clipboard: Option<&dyn Clipboard>, - ) { + ) -> event::Status { let mut original_messages = Vec::new(); - self.widget.on_event( + let status = self.widget.on_event( event, layout, cursor_position, @@ -350,6 +351,8 @@ where original_messages .drain(..) .for_each(|message| messages.push((self.mapper)(message))); + + status } fn draw( @@ -423,7 +426,7 @@ where messages: &mut Vec<Message>, renderer: &Renderer, clipboard: Option<&dyn Clipboard>, - ) { + ) -> event::Status { self.element.widget.on_event( event, layout, diff --git a/native/src/event.rs b/native/src/event.rs index 160b5ce7..91f33bd5 100644 --- a/native/src/event.rs +++ b/native/src/event.rs @@ -19,22 +19,19 @@ pub enum Event { Window(window::Event), } -/// The status of an [`Event`] after being processed by a [`UserInterface`]. +/// The status of an [`Event`] after being processed. /// /// [`Event`]: enum.Event.html /// [`UserInterface`]: ../struct.UserInterface.html #[derive(Debug, Clone, Copy, PartialEq, Eq)] pub enum Status { - /// The [`Event`] was _NOT_ handled by any widget in the [`UserInterface`]. + /// The [`Event`] was _NOT_ handled by any widget. /// /// [`Event`]: enum.Event.html - /// [`UserInterface`]: ../struct.UserInterface.html Ignored, - /// The [`Event`] was handled and processed by a widget in the - /// [`UserInterface`]. + /// The [`Event`] was handled and processed by a widget. /// /// [`Event`]: enum.Event.html - /// [`UserInterface`]: ../struct.UserInterface.html Captured, } diff --git a/native/src/overlay/menu.rs b/native/src/overlay/menu.rs index 4b392a8e..3577629b 100644 --- a/native/src/overlay/menu.rs +++ b/native/src/overlay/menu.rs @@ -1,8 +1,14 @@ //! Build and show dropdown menus. +use crate::container; +use crate::event::{self, Event}; +use crate::layout; +use crate::mouse; +use crate::overlay; +use crate::scrollable; +use crate::text; use crate::{ - container, layout, mouse, overlay, scrollable, text, Clipboard, Container, - Element, Event, Hasher, Layout, Length, Point, Rectangle, Scrollable, Size, - Vector, Widget, + Clipboard, Container, Element, Hasher, Layout, Length, Point, Rectangle, + Scrollable, Size, Vector, Widget, }; /// A list of selectable options. @@ -236,7 +242,7 @@ where renderer: &Renderer, clipboard: Option<&dyn Clipboard>, ) { - self.container.on_event( + let _ = self.container.on_event( event.clone(), layout, cursor_position, @@ -336,7 +342,7 @@ where _messages: &mut Vec<Message>, renderer: &Renderer, _clipboard: Option<&dyn Clipboard>, - ) { + ) -> event::Status { match event { Event::Mouse(mouse::Event::ButtonPressed(mouse::Button::Left)) => { let bounds = layout.bounds(); @@ -364,6 +370,8 @@ where } _ => {} } + + event::Status::Ignored } fn draw( diff --git a/native/src/user_interface.rs b/native/src/user_interface.rs index 504dbe0f..2ac4db0f 100644 --- a/native/src/user_interface.rs +++ b/native/src/user_interface.rs @@ -242,7 +242,7 @@ where }; for event in events { - self.root.widget.on_event( + let _ = self.root.widget.on_event( event.clone(), Layout::new(&self.base.layout), base_cursor, diff --git a/native/src/widget.rs b/native/src/widget.rs index 8687ce6f..d3ffe9c2 100644 --- a/native/src/widget.rs +++ b/native/src/widget.rs @@ -73,9 +73,10 @@ pub use text::Text; #[doc(no_inline)] pub use text_input::TextInput; -use crate::{ - layout, overlay, Clipboard, Event, Hasher, Layout, Length, Point, Rectangle, -}; +use crate::event::{self, Event}; +use crate::layout; +use crate::overlay; +use crate::{Clipboard, Hasher, Layout, Length, Point, Rectangle}; /// A component that displays information and allows interaction. /// @@ -182,7 +183,8 @@ where _messages: &mut Vec<Message>, _renderer: &Renderer, _clipboard: Option<&dyn Clipboard>, - ) { + ) -> event::Status { + event::Status::Ignored } /// Returns the overlay of the [`Element`], if there is any. diff --git a/native/src/widget/button.rs b/native/src/widget/button.rs index 995ba7bc..4a2d82e9 100644 --- a/native/src/widget/button.rs +++ b/native/src/widget/button.rs @@ -4,9 +4,11 @@ //! //! [`Button`]: struct.Button.html //! [`State`]: struct.State.html +use crate::event::{self, Event}; +use crate::layout; +use crate::mouse; use crate::{ - layout, mouse, Clipboard, Element, Event, Hasher, Layout, Length, Point, - Rectangle, Widget, + Clipboard, Element, Hasher, Layout, Length, Point, Rectangle, Widget, }; use std::hash::Hash; @@ -184,7 +186,7 @@ where messages: &mut Vec<Message>, _renderer: &Renderer, _clipboard: Option<&dyn Clipboard>, - ) { + ) -> event::Status { match event { Event::Mouse(mouse::Event::ButtonPressed(mouse::Button::Left)) => { if self.on_press.is_some() { @@ -209,6 +211,8 @@ where } _ => {} } + + event::Status::Ignored } fn draw( diff --git a/native/src/widget/checkbox.rs b/native/src/widget/checkbox.rs index e389427e..16a6a648 100644 --- a/native/src/widget/checkbox.rs +++ b/native/src/widget/checkbox.rs @@ -1,10 +1,14 @@ //! Show toggle controls using checkboxes. use std::hash::Hash; +use crate::event::{self, Event}; +use crate::layout; +use crate::mouse; +use crate::row; +use crate::text; use crate::{ - layout, mouse, row, text, Align, Clipboard, Element, Event, Hasher, - HorizontalAlignment, Layout, Length, Point, Rectangle, Row, Text, - VerticalAlignment, Widget, + Align, Clipboard, Element, Hasher, HorizontalAlignment, Layout, Length, + Point, Rectangle, Row, Text, VerticalAlignment, Widget, }; /// A box that can be checked. @@ -161,7 +165,7 @@ where messages: &mut Vec<Message>, _renderer: &Renderer, _clipboard: Option<&dyn Clipboard>, - ) { + ) -> event::Status { match event { Event::Mouse(mouse::Event::ButtonPressed(mouse::Button::Left)) => { let mouse_over = layout.bounds().contains(cursor_position); @@ -172,6 +176,8 @@ where } _ => {} } + + event::Status::Ignored } fn draw( diff --git a/native/src/widget/column.rs b/native/src/widget/column.rs index e874ad42..425bd33f 100644 --- a/native/src/widget/column.rs +++ b/native/src/widget/column.rs @@ -1,11 +1,11 @@ //! Distribute content vertically. use std::hash::Hash; +use crate::event::{self, Event}; use crate::layout; use crate::overlay; use crate::{ - Align, Clipboard, Element, Event, Hasher, Layout, Length, Point, Rectangle, - Widget, + Align, Clipboard, Element, Hasher, Layout, Length, Point, Rectangle, Widget, }; use std::u32; @@ -162,19 +162,21 @@ where messages: &mut Vec<Message>, renderer: &Renderer, clipboard: Option<&dyn Clipboard>, - ) { + ) -> event::Status { self.children.iter_mut().zip(layout.children()).for_each( |(child, layout)| { - child.widget.on_event( + let _ = child.widget.on_event( event.clone(), layout, cursor_position, messages, renderer, clipboard, - ) + ); }, ); + + event::Status::Ignored } fn draw( diff --git a/native/src/widget/container.rs b/native/src/widget/container.rs index 5b04d699..419060db 100644 --- a/native/src/widget/container.rs +++ b/native/src/widget/container.rs @@ -1,9 +1,11 @@ //! Decorate content and apply alignment. use std::hash::Hash; +use crate::event::{self, Event}; +use crate::layout; +use crate::overlay; use crate::{ - layout, overlay, Align, Clipboard, Element, Event, Hasher, Layout, Length, - Point, Rectangle, Widget, + Align, Clipboard, Element, Hasher, Layout, Length, Point, Rectangle, Widget, }; use std::u32; @@ -174,7 +176,7 @@ where messages: &mut Vec<Message>, renderer: &Renderer, clipboard: Option<&dyn Clipboard>, - ) { + ) -> event::Status { self.content.widget.on_event( event, layout.children().next().unwrap(), diff --git a/native/src/widget/pane_grid.rs b/native/src/widget/pane_grid.rs index 9d36bae6..aeeee299 100644 --- a/native/src/widget/pane_grid.rs +++ b/native/src/widget/pane_grid.rs @@ -28,9 +28,16 @@ pub use split::Split; pub use state::{Focus, State}; pub use title_bar::TitleBar; +use crate::container; +use crate::event::{self, Event}; +use crate::layout; +use crate::mouse; +use crate::overlay; +use crate::row; +use crate::text; use crate::{ - container, layout, mouse, overlay, row, text, Clipboard, Element, Event, - Hasher, Layout, Length, Point, Rectangle, Size, Vector, Widget, + Clipboard, Element, Hasher, Layout, Length, Point, Rectangle, Size, Vector, + Widget, }; /// A collection of panes distributed using either vertical or horizontal splits @@ -386,7 +393,7 @@ where messages: &mut Vec<Message>, renderer: &Renderer, clipboard: Option<&dyn Clipboard>, - ) { + ) -> event::Status { match event { Event::Mouse(mouse_event) => match mouse_event { mouse::Event::ButtonPressed(mouse::Button::Left) => { @@ -484,6 +491,8 @@ where ); } } + + event::Status::Ignored } fn draw( diff --git a/native/src/widget/pane_grid/content.rs b/native/src/widget/pane_grid/content.rs index 5bfbb9ed..dffc3a73 100644 --- a/native/src/widget/pane_grid/content.rs +++ b/native/src/widget/pane_grid/content.rs @@ -172,7 +172,7 @@ where layout }; - self.body.on_event( + let _ = self.body.on_event( event, body_layout, cursor_position, diff --git a/native/src/widget/pane_grid/title_bar.rs b/native/src/widget/pane_grid/title_bar.rs index 9dfb9ae4..eed7590d 100644 --- a/native/src/widget/pane_grid/title_bar.rs +++ b/native/src/widget/pane_grid/title_bar.rs @@ -254,7 +254,7 @@ where let _ = children.next(); let controls_layout = children.next().unwrap(); - controls.on_event( + let _ = controls.on_event( event, controls_layout, cursor_position, diff --git a/native/src/widget/pick_list.rs b/native/src/widget/pick_list.rs index e086e367..ee113e5e 100644 --- a/native/src/widget/pick_list.rs +++ b/native/src/widget/pick_list.rs @@ -1,9 +1,13 @@ //! Display a dropdown list of selectable values. +use crate::event::{self, Event}; +use crate::layout; +use crate::mouse; +use crate::overlay; +use crate::overlay::menu::{self, Menu}; +use crate::scrollable; +use crate::text; use crate::{ - layout, mouse, overlay, - overlay::menu::{self, Menu}, - scrollable, text, Clipboard, Element, Event, Hasher, Layout, Length, Point, - Rectangle, Size, Widget, + Clipboard, Element, Hasher, Layout, Length, Point, Rectangle, Size, Widget, }; use std::borrow::Cow; @@ -223,7 +227,7 @@ where messages: &mut Vec<Message>, _renderer: &Renderer, _clipboard: Option<&dyn Clipboard>, - ) { + ) -> event::Status { match event { Event::Mouse(mouse::Event::ButtonPressed(mouse::Button::Left)) => { if *self.is_open { @@ -248,6 +252,8 @@ where } _ => {} } + + event::Status::Ignored } fn draw( diff --git a/native/src/widget/radio.rs b/native/src/widget/radio.rs index 06d3f846..6e74b404 100644 --- a/native/src/widget/radio.rs +++ b/native/src/widget/radio.rs @@ -1,8 +1,12 @@ //! Create choices using radio buttons. +use crate::event::{self, Event}; +use crate::layout; +use crate::mouse; +use crate::row; +use crate::text; use crate::{ - layout, mouse, row, text, Align, Clipboard, Element, Event, Hasher, - HorizontalAlignment, Layout, Length, Point, Rectangle, Row, Text, - VerticalAlignment, Widget, + Align, Clipboard, Element, Hasher, HorizontalAlignment, Layout, Length, + Point, Rectangle, Row, Text, VerticalAlignment, Widget, }; use std::hash::Hash; @@ -166,7 +170,7 @@ where messages: &mut Vec<Message>, _renderer: &Renderer, _clipboard: Option<&dyn Clipboard>, - ) { + ) -> event::Status { match event { Event::Mouse(mouse::Event::ButtonPressed(mouse::Button::Left)) => { if layout.bounds().contains(cursor_position) { @@ -175,6 +179,8 @@ where } _ => {} } + + event::Status::Ignored } fn draw( diff --git a/native/src/widget/row.rs b/native/src/widget/row.rs index bc8a3df1..7d7595f7 100644 --- a/native/src/widget/row.rs +++ b/native/src/widget/row.rs @@ -1,9 +1,9 @@ //! Distribute content horizontally. +use crate::event::{self, Event}; use crate::layout; use crate::overlay; use crate::{ - Align, Clipboard, Element, Event, Hasher, Layout, Length, Point, Rectangle, - Widget, + Align, Clipboard, Element, Hasher, Layout, Length, Point, Rectangle, Widget, }; use std::hash::Hash; @@ -162,19 +162,21 @@ where messages: &mut Vec<Message>, renderer: &Renderer, clipboard: Option<&dyn Clipboard>, - ) { + ) -> event::Status { self.children.iter_mut().zip(layout.children()).for_each( |(child, layout)| { - child.widget.on_event( + let _ = child.widget.on_event( event.clone(), layout, cursor_position, messages, renderer, clipboard, - ) + ); }, ); + + event::Status::Ignored } fn draw( diff --git a/native/src/widget/scrollable.rs b/native/src/widget/scrollable.rs index 60ec2d7d..19c3e582 100644 --- a/native/src/widget/scrollable.rs +++ b/native/src/widget/scrollable.rs @@ -1,7 +1,12 @@ //! Navigate an endless amount of content with a scrollbar. +use crate::column; +use crate::event::{self, Event}; +use crate::layout; +use crate::mouse; +use crate::overlay; use crate::{ - column, layout, mouse, overlay, Align, Clipboard, Column, Element, Event, - Hasher, Layout, Length, Point, Rectangle, Size, Vector, Widget, + Align, Clipboard, Column, Element, Hasher, Layout, Length, Point, + Rectangle, Size, Vector, Widget, }; use std::{f32, hash::Hash, u32}; @@ -184,7 +189,7 @@ where messages: &mut Vec<Message>, renderer: &Renderer, clipboard: Option<&dyn Clipboard>, - ) { + ) -> event::Status { let bounds = layout.bounds(); let is_mouse_over = bounds.contains(cursor_position); diff --git a/native/src/widget/slider.rs b/native/src/widget/slider.rs index d6e366aa..51edd56d 100644 --- a/native/src/widget/slider.rs +++ b/native/src/widget/slider.rs @@ -4,9 +4,11 @@ //! //! [`Slider`]: struct.Slider.html //! [`State`]: struct.State.html +use crate::event::{self, Event}; +use crate::layout; +use crate::mouse; use crate::{ - layout, mouse, Clipboard, Element, Event, Hasher, Layout, Length, Point, - Rectangle, Size, Widget, + Clipboard, Element, Hasher, Layout, Length, Point, Rectangle, Size, Widget, }; use std::{hash::Hash, ops::RangeInclusive}; @@ -202,7 +204,7 @@ where messages: &mut Vec<Message>, _renderer: &Renderer, _clipboard: Option<&dyn Clipboard>, - ) { + ) -> event::Status { let mut change = || { let bounds = layout.bounds(); if cursor_position.x <= bounds.x { @@ -251,6 +253,8 @@ where }, _ => {} } + + event::Status::Ignored } fn draw( diff --git a/native/src/widget/text_input.rs b/native/src/widget/text_input.rs index 470e92ed..436f01ab 100644 --- a/native/src/widget/text_input.rs +++ b/native/src/widget/text_input.rs @@ -14,11 +14,13 @@ pub use value::Value; use editor::Editor; +use crate::event::{self, Event}; +use crate::keyboard; +use crate::layout; +use crate::mouse::{self, click}; +use crate::text; use crate::{ - keyboard, layout, - mouse::{self, click}, - text, Clipboard, Element, Event, Hasher, Layout, Length, Point, Rectangle, - Size, Widget, + Clipboard, Element, Hasher, Layout, Length, Point, Rectangle, Size, Widget, }; use std::u32; @@ -218,7 +220,7 @@ where messages: &mut Vec<Message>, renderer: &Renderer, clipboard: Option<&dyn Clipboard>, - ) { + ) -> event::Status { match event { Event::Mouse(mouse::Event::ButtonPressed(mouse::Button::Left)) => { let is_clicked = layout.bounds().contains(cursor_position); @@ -489,6 +491,8 @@ where }, _ => {} } + + event::Status::Ignored } fn draw( |