Skip to main content

faststep/app/
delegate.rs

1use embedded_graphics::{draw_target::DrawTarget, pixelcolor::Rgb565, primitives::Rectangle};
2
3use crate::{FsTheme, I18n, Localized, TouchEvent};
4
5use super::ViewResponse;
6
7/// Compatibility delegate API retained for older `UiApp` consumers.
8pub trait ViewDelegate<'a, ViewId> {
9    /// Returns the localized title for `view`.
10    fn title(&self, view: ViewId) -> Localized<'a>;
11
12    /// Draws one view.
13    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    /// Draws one view layer during animation.
24    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    /// Handles a touch event for `view`.
40    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    /// Advances per-view time-based state.
50    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    /// Clears any delegate-owned touch state.
62    fn clear_touch_state(&mut self) {}
63}