2023-04-08 20:52:38 -04:00
|
|
|
use crate::platform::Platform;
|
|
|
|
use crate::renderer::Renderer;
|
|
|
|
use ggdt::graphics::bitmap::rgb::RgbaBitmap;
|
|
|
|
use ggdt::system::event::{SystemEvent, SystemEventHandler};
|
|
|
|
use ggdt::system::res::standard::Standard;
|
|
|
|
use ggdt::system::System;
|
|
|
|
|
2023-04-07 14:21:27 -04:00
|
|
|
pub mod platform;
|
|
|
|
pub mod renderer;
|
2023-04-08 20:52:38 -04:00
|
|
|
|
|
|
|
#[derive(Debug)]
|
|
|
|
pub struct ImGui {
|
|
|
|
context: imgui::Context,
|
|
|
|
platform: Platform,
|
|
|
|
renderer: Renderer,
|
|
|
|
}
|
|
|
|
|
|
|
|
impl ImGui {
|
|
|
|
pub fn new() -> Self {
|
|
|
|
let mut context = imgui::Context::create();
|
|
|
|
let platform = Platform::new(&mut context);
|
|
|
|
let renderer = Renderer::new(&mut context);
|
|
|
|
|
|
|
|
ImGui { context, platform, renderer }
|
|
|
|
}
|
|
|
|
|
|
|
|
pub fn new_frame(&mut self, system: &mut System<Standard>) -> &mut imgui::Ui {
|
|
|
|
self.platform.prepare_frame(&mut self.context, system);
|
|
|
|
self.context.new_frame()
|
|
|
|
}
|
|
|
|
|
|
|
|
pub fn render(&mut self, dest: &mut RgbaBitmap) {
|
|
|
|
let draw_data = self.context.render();
|
|
|
|
self.renderer.render(draw_data, dest)
|
|
|
|
}
|
|
|
|
|
|
|
|
#[inline]
|
|
|
|
pub fn context(&self) -> &imgui::Context {
|
|
|
|
&self.context
|
|
|
|
}
|
|
|
|
|
|
|
|
#[inline]
|
|
|
|
pub fn context_mut(&mut self) -> &mut imgui::Context {
|
|
|
|
&mut self.context
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
impl SystemEventHandler for ImGui {
|
|
|
|
fn handle_event(&mut self, event: &SystemEvent) -> bool {
|
|
|
|
self.platform.handle_event(&mut self.context, event)
|
|
|
|
}
|
|
|
|
}
|