add text button ui helper

This commit is contained in:
Crispy 2024-12-23 23:58:09 +01:00
parent cfadd8a0b6
commit 2ecb86d283
3 changed files with 23 additions and 17 deletions

View file

@ -777,10 +777,9 @@ impl Editor {
self.tooltip.add(40, 4, 32, 32, "save"); self.tooltip.add(40, 4, 32, 32, "save");
} }
if simple_button(d, &self.mouse, 76, 5, 60, 30) { if text_button(d, &self.mouse, 76, 5, 50, "info") {
self.popup = Popup::LevelInfo; self.popup = Popup::LevelInfo;
} }
d.draw_text("info", 80, 10, 20, Color::WHITE);
if self.sim_state == SimState::Editing { if self.sim_state == SimState::Editing {
self.tooltip.add(150, 4, 32, 32, "Undo"); self.tooltip.add(150, 4, 32, 32, "Undo");

View file

@ -18,7 +18,7 @@ use editor::{Editor, ExitState};
use level::{Chapter, Level}; use level::{Chapter, Level};
use solution::Solution; use solution::Solution;
use theme::*; use theme::*;
use ui::{simple_button, simple_option_button, text_input, ShapedText}; use ui::{simple_option_button, text_button, text_input, ShapedText};
use util::*; use util::*;
const TITLE_TEXT: &str = concat!("Marble Machinations v", env!("CARGO_PKG_VERSION")); const TITLE_TEXT: &str = concat!("Marble Machinations v", env!("CARGO_PKG_VERSION"));
@ -240,24 +240,17 @@ impl Game {
} }
let next_id = get_free_id(solutions, Solution::id); let next_id = get_free_id(solutions, Solution::id);
if simple_button( if text_button(
d, d,
&mouse, &mouse,
level_list_width + 10, level_list_width + 10,
solution_y, solution_y,
entry_width, entry_width,
30, "new solution",
) { ) {
self.selected_solution = solutions.len(); self.selected_solution = solutions.len();
solutions.push(Solution::new(level, next_id)); solutions.push(Solution::new(level, next_id));
} }
d.draw_text(
"new solution",
level_list_width + 15,
solution_y + 5,
20,
Color::WHITE,
);
if let Some(solution) = solutions.get_mut(self.selected_solution) { if let Some(solution) = solutions.get_mut(self.selected_solution) {
let column_x = level_list_width + entry_width + 20; let column_x = level_list_width + entry_width + 20;
@ -276,20 +269,18 @@ impl Game {
let id_text = format!("{}", solution.id()); let id_text = format!("{}", solution.id());
d.draw_text(&id_text, column_x, y + 35, 10, Color::GRAY); d.draw_text(&id_text, column_x, y + 35, 10, Color::GRAY);
if simple_button(d, &mouse, column_x, y + 50, 220, 30) { if text_button(d, &mouse, column_x, y + 50, 220, "clone") {
let cloned = solution.new_copy(next_id); let cloned = solution.new_copy(next_id);
self.selected_solution = solutions.len(); self.selected_solution = solutions.len();
solutions.push(cloned); solutions.push(cloned);
return; return;
} }
d.draw_text("clone", column_x + 5, y + 55, 20, Color::WHITE);
if simple_button(d, &mouse, column_x, y + 85, 220, 30) { if text_button(d, &mouse, column_x, y + 85, 220, "edit") {
let mut editor = Editor::new(solution.clone(), level.clone()); let mut editor = Editor::new(solution.clone(), level.clone());
editor.center_view(d); editor.center_view(d);
self.open_editor = Some(editor); self.open_editor = Some(editor);
} }
d.draw_text("edit", column_x + 5, y + 90, 20, Color::WHITE);
} }
} else { } else {
self.solutions.insert(level.id().to_owned(), Vec::new()); self.solutions.insert(level.id().to_owned(), Vec::new());

View file

@ -178,6 +178,22 @@ pub fn simple_button(
pressed pressed
} }
pub fn text_button(
d: &mut RaylibDrawHandle,
mouse: &MouseInput,
x: i32,
y: i32,
width: i32,
text: &str,
) -> bool {
let font_size = 20;
let margin = font_size / 4;
let height = font_size + margin * 2;
let clicked = simple_button(d, mouse, x, y, width, height);
d.draw_text(text, x + margin, y + margin, font_size, Color::WHITE);
clicked
}
pub fn simple_option_button<T>( pub fn simple_option_button<T>(
d: &mut RaylibDrawHandle, d: &mut RaylibDrawHandle,
mouse: &MouseInput, mouse: &MouseInput,