summaryrefslogtreecommitdiffstats
path: root/wgpu/src/widget/canvas
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2020-04-28 03:46:03 +0200
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2020-04-28 03:52:12 +0200
commite4eb0553de13053c9828fd5454c281e27e598d65 (patch)
tree3b3b353df461414ad4f5176fe091117d16a0ea6c /wgpu/src/widget/canvas
parent2ca73036ab5946b451fd2b184541ae4dc6eedb24 (diff)
downloadiced-e4eb0553de13053c9828fd5454c281e27e598d65.tar.gz
iced-e4eb0553de13053c9828fd5454c281e27e598d65.tar.bz2
iced-e4eb0553de13053c9828fd5454c281e27e598d65.zip
Allow `canvas::State` to produce messages
Diffstat (limited to 'wgpu/src/widget/canvas')
-rw-r--r--wgpu/src/widget/canvas/cache.rs7
-rw-r--r--wgpu/src/widget/canvas/state.rs14
2 files changed, 13 insertions, 8 deletions
diff --git a/wgpu/src/widget/canvas/cache.rs b/wgpu/src/widget/canvas/cache.rs
index 12cc6442..2beed0f7 100644
--- a/wgpu/src/widget/canvas/cache.rs
+++ b/wgpu/src/widget/canvas/cache.rs
@@ -80,7 +80,10 @@ impl Cache {
Geometry::from_primitive(Primitive::Cached { cache: primitive })
}
- pub fn with<'a, T>(&'a self, input: T) -> impl crate::canvas::State + 'a
+ pub fn with<'a, T, Message>(
+ &'a self,
+ input: T,
+ ) -> impl crate::canvas::State<Message> + 'a
where
T: Drawable + std::fmt::Debug + 'a,
{
@@ -93,7 +96,7 @@ struct Bind<'a, T> {
input: T,
}
-impl<'a, T> crate::canvas::State for Bind<'a, T>
+impl<'a, T, Message> crate::canvas::State<Message> for Bind<'a, T>
where
T: Drawable + std::fmt::Debug + 'a,
{
diff --git a/wgpu/src/widget/canvas/state.rs b/wgpu/src/widget/canvas/state.rs
index 8388f94d..ab433dd1 100644
--- a/wgpu/src/widget/canvas/state.rs
+++ b/wgpu/src/widget/canvas/state.rs
@@ -1,17 +1,19 @@
use crate::canvas::{Event, Geometry, Size};
-pub trait State {
- fn update(&mut self, _event: Event, _bounds: Size) {}
+pub trait State<Message> {
+ fn update(&mut self, _event: Event, _bounds: Size) -> Option<Message> {
+ None
+ }
fn draw(&self, bounds: Size) -> Vec<Geometry>;
}
-impl<T> State for &mut T
+impl<T, Message> State<Message> for &mut T
where
- T: State,
+ T: State<Message>,
{
- fn update(&mut self, event: Event, bounds: Size) {
- T::update(self, event, bounds);
+ fn update(&mut self, event: Event, bounds: Size) -> Option<Message> {
+ T::update(self, event, bounds)
}
fn draw(&self, bounds: Size) -> Vec<Geometry> {