From 0f4ed2965c97a4af00b949bc7c9dfcdd6cac04c0 Mon Sep 17 00:00:00 2001 From: gered Date: Sat, 8 Apr 2023 20:52:38 -0400 Subject: [PATCH] add wrapper struct to simplify imgui init and usage rather than forcing use of 3 separate structs --- ggdt_imgui/src/lib.rs | 50 ++++++++++++++++++++++++++++++++++++++ ggdt_imgui/src/platform.rs | 1 + ggdt_imgui/src/renderer.rs | 1 + 3 files changed, 52 insertions(+) diff --git a/ggdt_imgui/src/lib.rs b/ggdt_imgui/src/lib.rs index 0766373..4eec597 100644 --- a/ggdt_imgui/src/lib.rs +++ b/ggdt_imgui/src/lib.rs @@ -1,2 +1,52 @@ +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; + pub mod platform; pub mod renderer; + +#[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) -> &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) + } +} diff --git a/ggdt_imgui/src/platform.rs b/ggdt_imgui/src/platform.rs index 6bd7773..26719e2 100644 --- a/ggdt_imgui/src/platform.rs +++ b/ggdt_imgui/src/platform.rs @@ -136,6 +136,7 @@ fn handle_mouse_button_event(io: &mut imgui::Io, button: MouseButton, down: bool } } +#[derive(Debug)] pub struct Platform { last_frame: Instant, } diff --git a/ggdt_imgui/src/renderer.rs b/ggdt_imgui/src/renderer.rs index d71d174..28ae9a1 100644 --- a/ggdt_imgui/src/renderer.rs +++ b/ggdt_imgui/src/renderer.rs @@ -4,6 +4,7 @@ use ggdt::math::rect::Rect; use ggdt::math::vector2::Vector2; use imgui::internal::RawWrapper; +#[derive(Debug)] pub struct Renderer { pub texture_map: imgui::Textures, }