diff options
| author | KonAki <konaki@anokonaki.org> | 2026-10-10 13:13:43 +0800 |
|---|---|---|
| committer | KonAki <konaki@anokonaki.org> | 2026-10-10 13:13:43 +0800 |
| commit | aab2471465341563543f269e8af18a65495c22d1 (patch) | |
| tree | e992d44e79d6c9052954b750deb0365824df5900 | |
| parent | f669c4c770b27c47fe34d67c2867cd51834558ca (diff) | |
int sliders snap to whole numbers
| -rw-r--r-- | kon/konui.c | 15 |
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; } |
