summaryrefslogtreecommitdiff
path: root/bindgen/rust/examples/gui_test.rs
diff options
context:
space:
mode:
Diffstat (limited to 'bindgen/rust/examples/gui_test.rs')
-rw-r--r--bindgen/rust/examples/gui_test.rs135
1 files changed, 135 insertions, 0 deletions
diff --git a/bindgen/rust/examples/gui_test.rs b/bindgen/rust/examples/gui_test.rs
new file mode 100644
index 0000000..891b698
--- /dev/null
+++ b/bindgen/rust/examples/gui_test.rs
@@ -0,0 +1,135 @@
+#![windows_subsystem = "windows"] // to turn off console.
+
+use celeritas::{Frame_Begin, Frame_End};
+use egui::DragValue;
+use egui_overlay::EguiOverlay;
+use egui_render_three_d::ThreeDBackend;
+use egui_render_wgpu::WgpuBackend;
+
+fn main() {
+ // use tracing_subscriber::{fmt, prelude::*, EnvFilter};
+ // if RUST_LOG is not set, we will use the following filters
+ // tracing_subscriber::registry()
+ // .with(fmt::layer())
+ // .with(
+ // EnvFilter::try_from_default_env()
+ // .unwrap_or(EnvFilter::new("debug,wgpu=warn,naga=warn")),
+ // )
+ // .init();
+
+ celeritas::egui_utils::start(HelloWorld { frame: 0});
+}
+
+pub struct HelloWorld {
+ pub frame: u64,
+}
+impl EguiOverlay for HelloWorld {
+ fn gui_run(
+ &mut self,
+ egui_context: &egui::Context,
+ _default_gfx_backend: &mut ThreeDBackend,
+ glfw_backend: &mut egui_window_glfw_passthrough::GlfwBackend,
+ ) {
+ // unsafe {
+ // Frame_Begin();
+ // Frame_End();
+ // }
+
+ // just some controls to show how you can use glfw_backend
+ egui::Window::new("controls").show(egui_context, |ui| {
+ ui.set_width(300.0);
+ self.frame += 1;
+ ui.label(format!("current frame number: {}", self.frame));
+ // sometimes, you want to see the borders to understand where the overlay is.
+ let mut borders = glfw_backend.window.is_decorated();
+ if ui.checkbox(&mut borders, "window borders").changed() {
+ glfw_backend.window.set_decorated(borders);
+ }
+
+ ui.label(format!(
+ "pixels_per_virtual_unit: {}",
+ glfw_backend.physical_pixels_per_virtual_unit
+ ));
+ ui.label(format!("window scale: {}", glfw_backend.scale));
+ ui.label(format!("cursor pos x: {}", glfw_backend.cursor_pos[0]));
+ ui.label(format!("cursor pos y: {}", glfw_backend.cursor_pos[1]));
+
+ ui.label(format!(
+ "passthrough: {}",
+ glfw_backend.window.is_mouse_passthrough()
+ ));
+ // how to change size.
+ // WARNING: don't use drag value, because window size changing while dragging ui messes things up.
+ let mut size = glfw_backend.window_size_logical;
+ let mut changed = false;
+ ui.horizontal(|ui| {
+ ui.label("width: ");
+ ui.add_enabled(false, DragValue::new(&mut size[0]));
+ if ui.button("inc").clicked() {
+ size[0] += 10.0;
+ changed = true;
+ }
+ if ui.button("dec").clicked() {
+ size[0] -= 10.0;
+ changed = true;
+ }
+ });
+ ui.horizontal(|ui| {
+ ui.label("height: ");
+ ui.add_enabled(false, DragValue::new(&mut size[1]));
+ if ui.button("inc").clicked() {
+ size[1] += 10.0;
+ changed = true;
+ }
+ if ui.button("dec").clicked() {
+ size[1] -= 10.0;
+ changed = true;
+ }
+ });
+ if changed {
+ glfw_backend.set_window_size(size);
+ }
+ // how to change size.
+ // WARNING: don't use drag value, because window size changing while dragging ui messes things up.
+ let mut pos = glfw_backend.window_position;
+ let mut changed = false;
+ ui.horizontal(|ui| {
+ ui.label("x: ");
+ ui.add_enabled(false, DragValue::new(&mut pos[0]));
+ if ui.button("inc").clicked() {
+ pos[0] += 10;
+ changed = true;
+ }
+ if ui.button("dec").clicked() {
+ pos[0] -= 10;
+ changed = true;
+ }
+ });
+ ui.horizontal(|ui| {
+ ui.label("y: ");
+ ui.add_enabled(false, DragValue::new(&mut pos[1]));
+ if ui.button("inc").clicked() {
+ pos[1] += 10;
+ changed = true;
+ }
+ if ui.button("dec").clicked() {
+ pos[1] -= 10;
+ changed = true;
+ }
+ });
+ if changed {
+ glfw_backend.window.set_pos(pos[0], pos[1]);
+ }
+ });
+
+ // here you decide if you want to be passthrough or not.
+ if egui_context.wants_pointer_input() || egui_context.wants_keyboard_input() {
+ // we need input, so we need the window to be NOT passthrough
+ glfw_backend.set_passthrough(false);
+ } else {
+ // we don't care about input, so the window can be passthrough now
+ glfw_backend.set_passthrough(true)
+ }
+ egui_context.request_repaint();
+ }
+} \ No newline at end of file