aboutsummaryrefslogtreecommitdiff
path: root/src/gui/tool_sidebar.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/tool_sidebar.rs')
-rw-r--r--src/gui/tool_sidebar.rs91
1 files changed, 0 insertions, 91 deletions
diff --git a/src/gui/tool_sidebar.rs b/src/gui/tool_sidebar.rs
deleted file mode 100644
index af6af74..0000000
--- a/src/gui/tool_sidebar.rs
+++ /dev/null
@@ -1,91 +0,0 @@
-//! The sidebar showing all tools available to the user. This toolbar handles changing the active tool
-//! based on the mouse input and (TODO!) keyboard inputs.
-// TODO: Currently, the keyboard shortcuts for tools are handled by the editor, but a lot speaks for
-// them being handled by the ToolSidebar instead.
-
-use crate::input::Input;
-use crate::math::Rect;
-use crate::tool::ToolType;
-use crate::Editor;
-use raylib::core::texture::Texture2D;
-use raylib::rgui::RaylibDrawGui;
-use raylib::{RaylibHandle, RaylibThread};
-use std::mem;
-
-/// The file containing textures for all buttons describing the tools.
-pub const BUTTON_FILE: &str = "assets/button/tool_buttons.png";
-
-/// Sidebar that renders and handles input for the tool activation buttons.
-pub struct ToolSidebar {
- button_texture: Texture2D,
- bindings_id: usize,
- panel_rect: Rect<u16>,
-}
-
-impl ToolSidebar {
- /// Create a new tool sidebar. There should be only one sidebar per program instance.
- pub fn new(rl: &mut RaylibHandle, rlt: &RaylibThread, input: &mut Input) -> Self {
- let button_texture = rl
- .load_texture(rlt, BUTTON_FILE)
- .expect("Could not read file containing tool icons.");
-
- let panel_rect = Self::panel_rect(rl.get_screen_height() as u16);
- let bindings_id = input.add_local_handler(panel_rect.clone());
-
- Self {
- button_texture,
- bindings_id,
- panel_rect,
- }
- }
-
- fn panel_rect(screen_height: u16) -> Rect<u16> {
- /* The width is currently hardcoded as 104, which is
- * 64 (button-size) + 20 left gap + 20 right gap
- */
- Rect::new(0, 0, 104, screen_height)
- }
-
- /// Update the state of the tool sidebar. Due to raylib limitations, this is not where the tools
- /// are selected for the editor, which happens in draw.
- pub fn update(&mut self, screen_height: u16, input: &mut Input) {
- let new_panel_rect = Self::panel_rect(screen_height);
- if new_panel_rect != self.panel_rect {
- self.panel_rect = new_panel_rect;
- input.set_binding_rect(self.bindings_id, self.panel_rect);
- }
- }
-
- /// Draw the tool buttons and encasing panel. Because of the way raylib works, this also handles
- /// clicking on tool buttons, which may be changed in the future, should a different gui be
- /// chosen.
- pub fn draw(&self, rld: &mut impl RaylibDrawGui, editor: &mut Editor) {
- rld.gui_panel(Rect::new(
- self.panel_rect.x as f32,
- self.panel_rect.y as f32,
- self.panel_rect.w as f32,
- self.panel_rect.h as f32,
- ));
-
- // TODO: Update to new input system. Create buttons that integrate.
- let mut active = editor.active();
- for i in 0..ToolType::NumTools as usize {
- let is_current_active = active as usize == i;
- if rld.gui_image_button_ex(
- Rect::new(20., i as f32 * 100. + 20., 64., 64.),
- None,
- &self.button_texture,
- Rect::new(
- is_current_active as u8 as f32 * 64.,
- i as f32 * 64.,
- 64.,
- 64.,
- ),
- ) {
- active = unsafe { mem::transmute(i as u8) };
- }
- }
-
- editor.set_active(active);
- }
-}