From 8557c24d48833ca0493a4f2a6181feb96bf9e1a7 Mon Sep 17 00:00:00 2001 From: gered Date: Tue, 30 May 2023 18:51:29 -0400 Subject: [PATCH] add image_region ui widget which allows specifying a texture sub-region --- ggdt_imgui/src/lib.rs | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/ggdt_imgui/src/lib.rs b/ggdt_imgui/src/lib.rs index 72fac32..c1dd5da 100644 --- a/ggdt_imgui/src/lib.rs +++ b/ggdt_imgui/src/lib.rs @@ -73,6 +73,8 @@ pub trait UiSupport { fn is_any_hovered(&self) -> bool; fn is_any_focused(&self) -> bool; fn image(&self, id: impl AsRef, texture_id: imgui::TextureId, size: [f32; 2]) -> bool; + fn image_region(&self, id: impl AsRef, texture_id: imgui::TextureId, size: [f32; 2], region: [f32; 4]) + -> bool; } impl UiSupport for imgui::Ui { @@ -98,4 +100,22 @@ impl UiSupport for imgui::Ui { draw_list.add_image(texture_id, self.item_rect_min(), self.item_rect_max()).build(); clicked } + + fn image_region( + &self, + id: impl AsRef, + texture_id: imgui::TextureId, + size: [f32; 2], + region: [f32; 4], + ) -> bool { + let clicked = self.invisible_button(id, size); + let draw_list = self.get_window_draw_list(); + + draw_list + .add_image(texture_id, self.item_rect_min(), self.item_rect_max()) + .uv_min([region[0], region[1]]) + .uv_max([region[2], region[3]]) + .build(); + clicked + } }