1use embedded_graphics::{draw_target::DrawTarget, pixelcolor::Rgb565, primitives::Rectangle};
2
3use crate::{FsTheme, I18n, Localized, TouchEvent};
4
5use super::ViewResponse;
6
7pub trait ViewDelegate<'a, ViewId> {
9 fn title(&self, view: ViewId) -> Localized<'a>;
11
12 fn draw_view<D>(
14 &self,
15 view: ViewId,
16 display: &mut D,
17 frame: Rectangle,
18 theme: &FsTheme,
19 i18n: &I18n<'a>,
20 ) where
21 D: DrawTarget<Color = Rgb565>;
22
23 fn draw_layer<D>(
25 &self,
26 view: ViewId,
27 display: &mut D,
28 frame: Rectangle,
29 animated: bool,
30 theme: &FsTheme,
31 i18n: &I18n<'a>,
32 ) where
33 D: DrawTarget<Color = Rgb565>,
34 {
35 let _ = animated;
36 self.draw_view(view, display, frame, theme, i18n);
37 }
38
39 fn handle_view_touch(
41 &mut self,
42 view: ViewId,
43 touch: TouchEvent,
44 frame: Rectangle,
45 theme: &FsTheme,
46 i18n: &I18n<'a>,
47 ) -> ViewResponse<ViewId>;
48
49 fn tick(
51 &mut self,
52 _view: ViewId,
53 _dt_ms: u32,
54 _frame: Rectangle,
55 _theme: &FsTheme,
56 _i18n: &I18n<'a>,
57 ) -> ViewResponse<ViewId> {
58 ViewResponse::none()
59 }
60
61 fn clear_touch_state(&mut self) {}
63}