From eecfe87f8d23b358c31d6b8289f96ba61ad6de01 Mon Sep 17 00:00:00 2001 From: iamcheeseman Date: Fri, 22 May 2026 11:49:49 -0400 Subject: tyui sliders --- teensy/teensy_ui.c | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) (limited to 'teensy/teensy_ui.c') diff --git a/teensy/teensy_ui.c b/teensy/teensy_ui.c index a0bb5e3..c58113c 100644 --- a/teensy/teensy_ui.c +++ b/teensy/teensy_ui.c @@ -88,6 +88,7 @@ tyui_Style default_style = { .padding = 1, .control_padding = 2, .frame_size = 1, + .grabber_size = 4, }; static @@ -450,6 +451,60 @@ bool tyui_button(const char *text) return clicked; } +void tyui_slider_ex( + float min, + float max, + float *value_ptr, + bool show_value, + tyui_Align value_align +) { + assert(value_ptr); + + const int grabber_size = uictx.style.grabber_size; + + ty_Recti rect = next_rect(TEXT_HEIGHT + control_padding() * 2); + ty_Color bg_col = uictx.style.bg_normal; + ty_Color fg_col = uictx.style.fg_normal; + + bool clicked = false; + if (is_hovered(rect)) { + clicked = window()->has_lmb; + if (ty_button_down(TY_BTN_DB_LMB)) { + bg_col = uictx.style.bg_pressed; + fg_col = uictx.style.fg_pressed; + } else { + bg_col = uictx.style.bg_hover; + fg_col = uictx.style.fg_hover; + } + } + + if (clicked) { + ty_Vec2i mp = ty_mouse_pos(); + float x = mp.x - rect.x; + float p = x / (rect.w - 1); + *value_ptr = ty_clamp(p * (max - min) + min, min, max); + } + + float value = *value_ptr; + + draw_frame(rect, bg_col); + if (show_value) + text_cmd(ty_format("%d", (int)round(value)), rect, value_align); + + // Grabber + { + float p = (value - min) / max; + int x = (rect.w - grabber_size) * p + rect.x; + + ty_Recti grabber_rect = ty_recti( + x, rect.y, + grabber_size, rect.h + ); + + draw_frame(grabber_rect, fg_col); + } +} + static void draw_window(Window *win) { -- cgit v1.3-2-g0d8e