summaryrefslogtreecommitdiffstats
path: root/native
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2020-11-12 00:09:52 +0100
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2020-11-12 00:09:52 +0100
commit3f968b8c876b7c2351232856887fb9c3e3db3130 (patch)
tree0d8c04a09e2da877bb823bc039a57d4222fb1346 /native
parent1db11ba69a3183924a1f4cae91031f4c5051b6dc (diff)
downloadiced-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.rs15
-rw-r--r--native/src/event.rs9
-rw-r--r--native/src/overlay/menu.rs18
-rw-r--r--native/src/user_interface.rs2
-rw-r--r--native/src/widget.rs10
-rw-r--r--native/src/widget/button.rs10
-rw-r--r--native/src/widget/checkbox.rs14
-rw-r--r--native/src/widget/column.rs12
-rw-r--r--native/src/widget/container.rs8
-rw-r--r--native/src/widget/pane_grid.rs15
-rw-r--r--native/src/widget/pane_grid/content.rs2
-rw-r--r--native/src/widget/pane_grid/title_bar.rs2
-rw-r--r--native/src/widget/pick_list.rs16
-rw-r--r--native/src/widget/radio.rs14
-rw-r--r--native/src/widget/row.rs12
-rw-r--r--native/src/widget/scrollable.rs11
-rw-r--r--native/src/widget/slider.rs10
-rw-r--r--native/src/widget/text_input.rs14
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(