ike/
app.rs

1use egui::CtxRef;
2
3use crate::{
4    editor::Editor,
5    prelude::UpdateCtx,
6    renderer::{RenderCtx, Renderer},
7    state::State,
8    view::Views,
9};
10
11pub struct App<S: 'static> {
12    pub editor: Editor<S>,
13    pub renderer: Renderer<S>,
14}
15
16impl<S> App<S> {
17    #[inline]
18    pub fn new() -> Self {
19        Self {
20            editor: Default::default(),
21            renderer: Default::default(),
22        }
23    }
24}
25
26pub struct AppContainer<S: 'static> {
27    pub app: App<S>,
28    pub state: S,
29}
30
31pub trait AppTrait {
32    fn show_editor(&mut self, views: &Views, egui_ctx: &CtxRef, render_ctx: &RenderCtx);
33
34    fn update(&mut self, update_ctx: &mut UpdateCtx);
35
36    fn render(&mut self, views: &mut Views);
37
38    fn render_views(&mut self, ctx: &RenderCtx, views: &Views);
39}
40
41impl<S: State> AppTrait for AppContainer<S> {
42    fn show_editor(&mut self, views: &Views, egui_ctx: &CtxRef, render_ctx: &RenderCtx) {
43        self.app
44            .show_editor(views, egui_ctx, render_ctx, &mut self.state);
45    }
46
47    fn update(&mut self, update_ctx: &mut UpdateCtx) {
48        self.state.update(update_ctx);
49    }
50
51    fn render(&mut self, views: &mut Views) {
52        self.state.render(views);
53    }
54
55    fn render_views(&mut self, render_ctx: &RenderCtx, views: &Views) {
56        for view in views.views.values() {
57            self.app
58                .renderer
59                .render_view(render_ctx, view, &mut self.state);
60        }
61    }
62}