use crate::{FsTheme, I18n, TouchEvent, UiCanvas};
use super::{ViewEvent, ViewRegistration};
#[derive(Clone, Copy, Debug)]
pub struct ViewEnvironment<'env, 'text> {
pub theme: &'env FsTheme,
pub i18n: &'env I18n<'text>,
}
pub trait UiView<'text, ViewId, Message, const N: usize> {
fn configure(&mut self, registration: &mut ViewRegistration<'text, ViewId, N>);
fn update(
&mut self,
_dt_ms: u32,
_registration: &ViewRegistration<'text, ViewId, N>,
_env: &ViewEnvironment<'_, 'text>,
) -> ViewEvent<Message> {
ViewEvent::none()
}
fn handle_touch(
&mut self,
touch: TouchEvent,
registration: &ViewRegistration<'text, ViewId, N>,
env: &ViewEnvironment<'_, 'text>,
) -> ViewEvent<Message>;
fn draw<D>(
&self,
display: &mut D,
registration: &ViewRegistration<'text, ViewId, N>,
env: &ViewEnvironment<'_, 'text>,
) where
D: UiCanvas;
}