--- a/ui/gtk/entry.c Sun Aug 24 15:24:16 2025 +0200 +++ b/ui/gtk/entry.c Sat Oct 04 14:52:59 2025 +0200 @@ -35,28 +35,38 @@ #include "entry.h" -UIWIDGET ui_spinner_create(UiObject *obj, UiSpinnerArgs *args) { - double min = 0; - double max = 1000; +UIWIDGET ui_spinbox_create(UiObject *obj, UiSpinBoxArgs *args) { + double min = args->min; + double max = args->max != 0 ? args->max : 1000; UiObject* current = uic_current_obj(obj); UiVar *var = NULL; + UiVarType vartype = 0; if(args->varname) { var = uic_get_var(obj->ctx, args->varname); + if(var) { + vartype = var->type; + } else { + var = uic_widget_var(obj->ctx, current->ctx, args->rangevalue, args->varname, UI_VAR_RANGE); + vartype = UI_VAR_RANGE; + } } if(!var) { if(args->intvalue) { var = uic_widget_var(obj->ctx, current->ctx, args->intvalue, NULL, UI_VAR_INTEGER); + vartype = UI_VAR_INTEGER; } else if(args->doublevalue) { var = uic_widget_var(obj->ctx, current->ctx, args->doublevalue, NULL, UI_VAR_DOUBLE); + vartype = UI_VAR_DOUBLE; } else if(args->rangevalue) { var = uic_widget_var(obj->ctx, current->ctx, args->rangevalue, NULL, UI_VAR_RANGE); + vartype = UI_VAR_RANGE; } } - if(var && var->type == UI_VAR_RANGE) { + if(vartype == UI_VAR_RANGE) { UiRange *r = var->value; min = r->min; max = r->max; @@ -72,11 +82,16 @@ GtkWidget *spin = gtk_spin_button_new_with_range(min, max, args->step); ui_set_name_and_style(spin, args->name, args->style_class); ui_set_widget_groups(obj->ctx, spin, args->groups); + + if(args->width > 0) { + gtk_widget_set_size_request(spin, args->width, -1); + } + gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), args->digits); UiObserver **obs = NULL; if(var) { double value = 0; - switch(var->type) { + switch(vartype) { default: break; case UI_VAR_INTEGER: { UiInteger *i = var->value;