diff --git a/src/editor.rs b/src/editor.rs index c941a3f..cf42bdb 100644 --- a/src/editor.rs +++ b/src/editor.rs @@ -884,11 +884,15 @@ impl Editor { self.tooltip.add(368, 4, 48, 32, "Speed"); draw_usize(d, textures, 1 << self.sim_speed, (368, 4), SPEED_DIGITS, 1); slider( - (d, &self.mouse), - rect(368, 24, 48, 12), + d, + &self.mouse, &mut self.sim_speed, 0, MAX_SPEED_POWER, + 368, + 24, + 48, + 12, ); self.tooltip.add(420, 4, 180, 32, "Steps"); @@ -1024,7 +1028,8 @@ impl Editor { |(row, col): (i32, i32), texture: &str, tooltip: &'static str, tool_option: Tool| { let border = 4.; let gap = 2.; - let button_size = 32. + border * 2.; + let tex_size = 32.; + let button_size = tex_size + border * 2.; let grid_size = button_size + gap * 2.; let pos = Vector2 { x: 100. + col as f32 * grid_size - if col < 0 { 10. } else { 0. }, @@ -1035,11 +1040,13 @@ impl Editor { tooltip, ); scrollable_texture_option_button( - (d, &self.mouse), + d, + &self.mouse, pos, textures.get(texture), tool_option, &mut self.active_tool, + tex_size, border, ) }; diff --git a/src/ui.rs b/src/ui.rs index 1a94a7f..0fbd9c4 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -299,11 +299,13 @@ pub fn text_input( } pub fn scrollable_texture_option_button( - (d, mouse): (&mut RaylibDrawHandle, &MouseInput), + d: &mut RaylibDrawHandle, + mouse: &MouseInput, pos: Vector2, texture: &Texture2D, option: T, current: &mut T, + tex_size: f32, border: f32, ) -> Option where @@ -312,8 +314,8 @@ where let bounds = Rectangle { x: pos.x, y: pos.y, - width: 32. + border * 2., - height: 32. + border * 2., + width: tex_size + border * 2., + height: tex_size + border * 2., }; d.draw_rectangle_rec( bounds, @@ -327,7 +329,7 @@ where texture, pos + Vector2::new(border, border), 0., - 32. / texture.width as f32, + tex_size / texture.width as f32, Color::WHITE, ); if mouse.is_over(bounds) { @@ -386,20 +388,21 @@ pub fn draw_usize_small( } pub fn slider( - (d, mouse): (&mut RaylibDrawHandle, &MouseInput), - bounds: Rectangle, + d: &mut RaylibDrawHandle, + mouse: &MouseInput, value: &mut u8, min: u8, max: u8, + x: i32, + y: i32, + width: i32, + height: i32, ) -> bool { - // draw state // the +1 makes the lowest state look slightly filled and the max state fully filled let percent = (*value - min + 1) as f32 / (max - min + 1) as f32; - d.draw_rectangle_rec(bounds, BG_WIDGET); - let mut filled_bounds = bounds; - filled_bounds.width *= percent; - d.draw_rectangle_rec(filled_bounds, Color::CYAN); - // interaction + d.draw_rectangle(x, y, width, height, BG_WIDGET); + d.draw_rectangle(x, y, (width as f32 * percent) as i32, height, Color::CYAN); + let bounds = Rectangle::new(x as f32, y as f32, width as f32, height as f32); if mouse.is_over(bounds) { if mouse.left_hold() { let percent = (mouse.pos().x - bounds.x) / bounds.width;