diff options
| author | KonAki <konaki@anokonaki.org> | 2026-10-18 04:04:58 +0800 |
|---|---|---|
| committer | KonAki <konaki@anokonaki.org> | 2026-10-18 04:04:58 +0800 |
| commit | 2e3f2eb4a4c2e65b6a2097658a75924e66302061 (patch) | |
| tree | 54d3b30d6e812fb2c42c07f2749ab3dfa6389501 | |
| parent | a6e6b1dd783b02b502cf9bebc1842edbdd76eb10 (diff) | |
konui: kon_uiNextWidth for rows of buttons
| -rw-r--r-- | kon/konui.c | 12 | ||||
| -rw-r--r-- | kon/konui.h | 4 |
2 files changed, 14 insertions, 2 deletions
diff --git a/kon/konui.c b/kon/konui.c index 85ecd72..ec7651e 100644 --- a/kon/konui.c +++ b/kon/konui.c @@ -86,6 +86,7 @@ struct kon_ui { uint32_t panelId; int cx, cy, availW; int sameLine; + int nextWidth; kon_rect_t last; int cursor; @@ -178,7 +179,8 @@ static kon_rect_t kon_uiNextRect_(kon_ui_t *ui, int w, int h) r.x = ui->cx; r.y = ui->cy; } - r.w = w > 0 ? w : ui->availW; + r.w = w > 0 ? w : (ui->nextWidth > 0 ? ui->nextWidth : ui->availW); + ui->nextWidth = 0; r.h = h; if (!ui->sameLine) ui->cy += h + ui->theme.spacing; @@ -369,6 +371,7 @@ void kon_uiBegin(kon_ui_t *ui, kon_framebuffer_t *fb) ui->popupShow = 0; ui->idCount = 0; ui->sameLine = 0; + ui->nextWidth = 0; ui->cx = ui->theme.padding; ui->cy = ui->theme.padding; ui->availW = fb->width - ui->theme.padding * 2; @@ -785,7 +788,7 @@ int kon_uiButton(kon_ui_t *ui, const char *label) uint32_t id = kon_uiHash_(ui, label); size_t n = kon_uiVisibleLength_(label); int pad = ui->theme.padding, textW = kon_uiTextWidth_(ui, label, n); - kon_rect_t r = kon_uiNextRect_(ui, ui->sameLine ? textW + pad * 2 : 0, ui->lineH + pad); + kon_rect_t r = kon_uiNextRect_(ui, ui->sameLine && ui->nextWidth <= 0 ? textW + pad * 2 : 0, ui->lineH + pad); int hovered, clicked; clicked = kon_uiBehave_(ui, id, r, &hovered); @@ -1003,3 +1006,8 @@ void kon_uiSameLine(kon_ui_t *ui) { ui->sameLine = 1; } + +void kon_uiNextWidth(kon_ui_t *ui, int width) +{ + ui->nextWidth = width; +} diff --git a/kon/konui.h b/kon/konui.h index 98a1f08..c055b06 100644 --- a/kon/konui.h +++ b/kon/konui.h @@ -133,6 +133,10 @@ void kon_uiIndent(kon_ui_t *ui, int amount); void kon_uiSeparator(kon_ui_t *ui); void kon_uiSameLine(kon_ui_t *ui); + +/* the width in pixels of the next widget, for a row of buttons. it is back to the full width after that one widget */ +void kon_uiNextWidth(kon_ui_t *ui, int width); + void kon_uiPushId(kon_ui_t *ui, int id); void kon_uiPopId(kon_ui_t *ui); |
