summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKonAki <konaki@anokonaki.org>2026-10-10 13:13:43 +0800
committerKonAki <konaki@anokonaki.org>2026-10-10 13:13:43 +0800
commitaab2471465341563543f269e8af18a65495c22d1 (patch)
treee992d44e79d6c9052954b750deb0365824df5900
parentf669c4c770b27c47fe34d67c2867cd51834558ca (diff)
int sliders snap to whole numbers
-rw-r--r--kon/konui.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/kon/konui.c b/kon/konui.c
index 777f24d..13a51d3 100644
--- a/kon/konui.c
+++ b/kon/konui.c
@@ -425,7 +425,7 @@ int kon_uiCheckbox(kon_ui_t *ui, const char *label, int *value)
return clicked;
}
-int kon_uiSliderFloat(kon_ui_t *ui, const char *label, float *value, float min, float max)
+static int kon_uiSlider_(kon_ui_t *ui, const char *label, float *value, float min, float max, int whole)
{
uint32_t id = kon_uiHash_(ui, label);
size_t n = kon_uiVisibleLength_(label);
@@ -444,6 +444,7 @@ int kon_uiSliderFloat(kon_ui_t *ui, const char *label, float *value, float min,
if (t < 0.0f) t = 0.0f;
if (t > 1.0f) t = 1.0f;
v = min + t * (max - min);
+ if (whole) v = (float)(int)(v + (v < 0 ? -0.5f : 0.5f));
if (v != *value) {
*value = v;
changed = 1;
@@ -459,17 +460,23 @@ int kon_uiSliderFloat(kon_ui_t *ui, const char *label, float *value, float min,
kon_uiFill_(ui, KON_RECT(r.x + 1, r.y + 1, fill, r.h - 2), ui->theme.accent);
kon_uiOutline_(ui, r, ui->theme.border);
- snprintf(text, sizeof(text), "%.*s: %.2f", (int)(n > 40 ? 40 : n), label, (double)*value);
+ if (whole) snprintf(text, sizeof(text), "%.*s: %d", (int)(n > 40 ? 40 : n), label, (int)*value);
+ else snprintf(text, sizeof(text), "%.*s: %.2f", (int)(n > 40 ? 40 : n), label, (double)*value);
kon_uiDrawText_(ui, r.x + pad, r.y + pad / 2 + 1, text, strlen(text), ui->theme.text);
return changed;
}
+int kon_uiSliderFloat(kon_ui_t *ui, const char *label, float *value, float min, float max)
+{
+ return kon_uiSlider_(ui, label, value, min, max, 0);
+}
+
int kon_uiSliderInt(kon_ui_t *ui, const char *label, int *value, int min, int max)
{
float v = (float)*value;
- int changed = kon_uiSliderFloat(ui, label, &v, (float)min, (float)max);
+ int changed = kon_uiSlider_(ui, label, &v, (float)min, (float)max, 1);
- if (changed) *value = (int)(v + (v < 0 ? -0.5f : 0.5f));
+ if (changed) *value = (int)v;
return changed;
}