fix ui widgets
This commit is contained in:
@@ -1,3 +1,70 @@
|
||||
#pragma once
|
||||
// ui_widgets.h - Removed: Clay handles all layout and widgets directly.
|
||||
// This file is kept empty for the unity build include order.
|
||||
// ui_widgets.h - Immediate-mode widgets built on top of Clay.
|
||||
//
|
||||
// Each widget function takes a unique string ID, the value to display/edit,
|
||||
// and returns whether the value was changed (or the widget was activated).
|
||||
// The caller owns all data — the widget layer only stores transient UI state
|
||||
// like which text field is focused or which dropdown is open.
|
||||
|
||||
#include "ui/ui_core.h"
|
||||
#include "platform/platform.h"
|
||||
|
||||
////////////////////////////////
|
||||
// Widget state (global, managed by widget layer)
|
||||
|
||||
#define UI_WIDGET_MAX_DROPDOWN_ITEMS 32
|
||||
|
||||
struct UI_WidgetState {
|
||||
// Text input focus
|
||||
uint32_t focused_id; // Clay element ID hash of the focused text input (0 = none)
|
||||
int32_t cursor_pos; // Cursor position in focused text input
|
||||
F32 cursor_blink; // Blink timer (seconds)
|
||||
|
||||
// Dropdown
|
||||
uint32_t open_dropdown_id; // Clay element ID hash of the open dropdown (0 = none)
|
||||
|
||||
// Input events for this frame
|
||||
PlatformInputEvents input;
|
||||
|
||||
// Click detection
|
||||
B32 mouse_down;
|
||||
B32 was_mouse_down;
|
||||
B32 mouse_clicked; // true on the frame mouse transitions from up->down
|
||||
};
|
||||
|
||||
extern UI_WidgetState g_wstate;
|
||||
|
||||
// Call once at startup
|
||||
void ui_widgets_init();
|
||||
|
||||
// Call each frame before building widgets. Pass in the frame's input events.
|
||||
void ui_widgets_begin_frame(PlatformInputEvents input, B32 mouse_down, B32 was_mouse_down);
|
||||
|
||||
// Reset per-frame text input display buffer allocator (called by begin_frame, but
|
||||
// can also be called manually if needed)
|
||||
void ui_text_input_reset_display_bufs();
|
||||
|
||||
////////////////////////////////
|
||||
// Widgets
|
||||
// All IDs must be unique string literals (passed to CLAY_ID internally).
|
||||
|
||||
// Simple label
|
||||
void ui_label(const char *id, const char *text);
|
||||
|
||||
// Clickable button. Returns true on the frame it was clicked.
|
||||
B32 ui_button(const char *id, const char *text);
|
||||
|
||||
// Checkbox. Toggles *value on click. Returns true if value changed.
|
||||
B32 ui_checkbox(const char *id, const char *label, B32 *value);
|
||||
|
||||
// Radio button group. Sets *selected to the clicked index. Returns true if changed.
|
||||
// options is an array of label strings, count is the number of options.
|
||||
B32 ui_radio_group(const char *id, const char **options, S32 count, S32 *selected);
|
||||
|
||||
// Single-line text input. Edits buf in-place (null-terminated, max buf_size-1 chars).
|
||||
// Returns true if the text changed this frame.
|
||||
B32 ui_text_input(const char *id, char *buf, S32 buf_size);
|
||||
|
||||
// Dropdown / combo box. Sets *selected to chosen index. Returns true if changed.
|
||||
// options is an array of label strings, count is the number of options.
|
||||
B32 ui_dropdown(const char *id, const char **options, S32 count, S32 *selected);
|
||||
|
||||
Reference in New Issue
Block a user