summaryrefslogtreecommitdiff
path: root/kon/konui.c
diff options
context:
space:
mode:
Diffstat (limited to 'kon/konui.c')
-rw-r--r--kon/konui.c12
1 files changed, 10 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;
+}