diff options
Diffstat (limited to 'wgpu/src/widget/canvas')
| -rw-r--r-- | wgpu/src/widget/canvas/drawable.rs | 6 | ||||
| -rw-r--r-- | wgpu/src/widget/canvas/event.rs | 6 | ||||
| -rw-r--r-- | wgpu/src/widget/canvas/layer/cache.rs | 16 | ||||
| -rw-r--r-- | wgpu/src/widget/canvas/program.rs | 16 | 
4 files changed, 43 insertions, 1 deletions
| diff --git a/wgpu/src/widget/canvas/drawable.rs b/wgpu/src/widget/canvas/drawable.rs index 6c74071c..48ba6b4c 100644 --- a/wgpu/src/widget/canvas/drawable.rs +++ b/wgpu/src/widget/canvas/drawable.rs @@ -10,3 +10,9 @@ pub trait Drawable {      /// [`Frame`]: struct.Frame.html      fn draw(&self, frame: &mut Frame);  } + +impl<'a> Drawable for dyn Fn(&mut Frame) + 'a { +    fn draw(&self, frame: &mut Frame) { +        self(frame) +    } +} diff --git a/wgpu/src/widget/canvas/event.rs b/wgpu/src/widget/canvas/event.rs new file mode 100644 index 00000000..7a8b0829 --- /dev/null +++ b/wgpu/src/widget/canvas/event.rs @@ -0,0 +1,6 @@ +use iced_native::input::mouse; + +#[derive(Debug, Clone, Copy, PartialEq)] +pub enum Event { +    Mouse(mouse::Event), +} diff --git a/wgpu/src/widget/canvas/layer/cache.rs b/wgpu/src/widget/canvas/layer/cache.rs index 4f8c2bec..2e87297c 100644 --- a/wgpu/src/widget/canvas/layer/cache.rs +++ b/wgpu/src/widget/canvas/layer/cache.rs @@ -1,5 +1,5 @@  use crate::{ -    canvas::{Drawable, Frame, Layer}, +    canvas::{Drawable, Frame, Layer, Program},      Primitive,  }; @@ -79,6 +79,20 @@ where      }  } +impl<T> Program for Cache<T> +where +    T: Drawable + std::fmt::Debug, +{ +    type Input = T; + +    fn layers<'a>( +        &'a self, +        input: &'a Self::Input, +    ) -> Vec<Box<dyn Layer + 'a>> { +        vec![Box::new(self.with(input))] +    } +} +  #[derive(Debug)]  struct Bind<'a, T: Drawable> {      cache: &'a Cache<T>, diff --git a/wgpu/src/widget/canvas/program.rs b/wgpu/src/widget/canvas/program.rs new file mode 100644 index 00000000..c65a078b --- /dev/null +++ b/wgpu/src/widget/canvas/program.rs @@ -0,0 +1,16 @@ +use crate::canvas::{Event, Layer, Size}; + +pub trait Program { +    type Input; + +    fn layers<'a>(&'a self, input: &'a Self::Input) +        -> Vec<Box<dyn Layer + 'a>>; + +    fn update<'a>( +        &'a mut self, +        _event: Event, +        _bounds: Size, +        _input: &'a Self::Input, +    ) { +    } +} | 
