Commit: 6ac2b3166087631a3ce446eee0ae839a61b471ec
Parent: 5dc7f3d0a847118978a493db00482bc19d506b40
Author: Randy Palamar
Date: Wed, 23 Apr 2025 19:49:49 -0600
ui: make table cell data generic
Diffstat:
M | ui.c | | | 20 | ++++++++++++++++---- |
1 file changed, 16 insertions(+), 4 deletions(-)
diff --git a/ui.c b/ui.c
@@ -375,9 +375,21 @@ typedef enum {
TRK_TABLE,
} TableRowKind;
+typedef enum {
+ TCK_NONE,
+ TCK_GENERIC,
+ TCK_INTEGER,
+ TCK_VARIABLE,
+} TableCellKind;
+
typedef struct {
s8 text;
- Variable *var;
+ union {
+ i64 integer;
+ Variable *var;
+ void *generic;
+ };
+ TableCellKind kind;
f32 width;
} TableCell;
@@ -665,7 +677,7 @@ table_cell_align(TableCell *cell, TextAlignment align, Rect r)
function TableCell
table_variable_cell(Arena *a, Variable *var)
{
- TableCell result = {.var = var};
+ TableCell result = {.var = var, .kind = TCK_VARIABLE};
Arena tmp = *a;
Stream text = arena_stream(&tmp);
stream_append_variable(&text, var);
@@ -1698,14 +1710,14 @@ draw_table_cell(BeamformerUI *ui, TableCell *cell, Rect cell_rect, TextAlignment
cell_rect.size.w = MIN(ts.limits.size.w, cell_rect.size.w);
v4 base_colour = ts.colour;
- if (cell->var && cell->var->flags & V_INPUT) {
+ if (cell->kind == TCK_VARIABLE && cell->var->flags & V_INPUT) {
if (hover_var(ui, mouse, cell_rect, cell->var) && (cell->var->flags & V_TEXT))
ui->interaction.hot_font = ts.font;
ts.colour = lerp_v4(ts.colour, HOVERED_COLOUR, cell->var->hover_t);
}
/* TODO(rnp): push truncated text for hovering */
- if (cell->var && cell->var->flags & V_RADIO_BUTTON)
+ if (cell->kind == TCK_VARIABLE && cell->var->flags & V_RADIO_BUTTON)
draw_radio_button(ui, cell->var, cell_at, mouse, base_colour, ts.font->baseSize);
else if (cell->text.len)
draw_text(cell->text, cell_at, &ts);