iced_widget/canvas/
program.rs1use crate::canvas::mouse;
2use crate::canvas::{Event, Geometry};
3use crate::core::Rectangle;
4use crate::graphics::geometry;
5use crate::Action;
6
7pub trait Program<Message, Theme = crate::Theme, Renderer = crate::Renderer>
14where
15 Renderer: geometry::Renderer,
16{
17 type State: Default + 'static;
19
20 fn update(
33 &self,
34 _state: &mut Self::State,
35 _event: &Event,
36 _bounds: Rectangle,
37 _cursor: mouse::Cursor,
38 ) -> Option<Action<Message>> {
39 None
40 }
41
42 fn draw(
51 &self,
52 state: &Self::State,
53 renderer: &Renderer,
54 theme: &Theme,
55 bounds: Rectangle,
56 cursor: mouse::Cursor,
57 ) -> Vec<Geometry<Renderer>>;
58
59 fn mouse_interaction(
66 &self,
67 _state: &Self::State,
68 _bounds: Rectangle,
69 _cursor: mouse::Cursor,
70 ) -> mouse::Interaction {
71 mouse::Interaction::default()
72 }
73}
74
75impl<Message, Theme, Renderer, T> Program<Message, Theme, Renderer> for &T
76where
77 Renderer: geometry::Renderer,
78 T: Program<Message, Theme, Renderer>,
79{
80 type State = T::State;
81
82 fn update(
83 &self,
84 state: &mut Self::State,
85 event: &Event,
86 bounds: Rectangle,
87 cursor: mouse::Cursor,
88 ) -> Option<Action<Message>> {
89 T::update(self, state, event, bounds, cursor)
90 }
91
92 fn draw(
93 &self,
94 state: &Self::State,
95 renderer: &Renderer,
96 theme: &Theme,
97 bounds: Rectangle,
98 cursor: mouse::Cursor,
99 ) -> Vec<Geometry<Renderer>> {
100 T::draw(self, state, renderer, theme, bounds, cursor)
101 }
102
103 fn mouse_interaction(
104 &self,
105 state: &Self::State,
106 bounds: Rectangle,
107 cursor: mouse::Cursor,
108 ) -> mouse::Interaction {
109 T::mouse_interaction(self, state, bounds, cursor)
110 }
111}