Skip to content

Slider Widget

Overview

The Slider widget lets the user drag a knob along a track to select a numeric value within a defined range. It supports horizontal and vertical orientations, customizable track/knob/fill colors, and a change event.

Enable

#define MGUI_WIDGET_ENABLE_SLIDER

Creation

#ifdef MGUI_WIDGET_ENABLE_SLIDER
mgui_widget_t* slider = mgui_allocate_widget(
    parent,
    MGUI_WIDGET_SLIDER,
    (mgui_area_t){x, y, width, height},
    MGUI_COLOR_ELEM_DARK_SLATE   // widget background
);
#endif

For a horizontal slider use width >> height. For a vertical slider use height >> width.

API Reference

Value & Range

mgui_widget_slider_set_range(slider, 0, 100);
mgui_widget_slider_set_value(slider, 50);
int16_t v = mgui_widget_slider_get_value(slider);

Orientation

mgui_widget_slider_set_orientation(slider, MGUI_SLIDER_HORIZONTAL);
mgui_widget_slider_set_orientation(slider, MGUI_SLIDER_VERTICAL);

Appearance

// track color, knob color, fill color
mgui_widget_slider_set_colors(slider,
    MGUI_COLOR_ELEM_DARK_SLATE,
    MGUI_COLOR_WHITE,
    MGUI_COLOR_PURPLE);

mgui_widget_slider_set_knob_size(slider, 14);
mgui_widget_slider_set_track_thickness(slider, 4);

Events

static void on_slider(mgui_widget_t* obj, mgui_event_t event) {
    if (event & MGUI_EVENT_CHANGE) {
        int16_t v = mgui_widget_slider_get_value(obj);
        // use v
    }
}
mgui_widget_click_handler(slider, on_slider);

Common Combinations

Use Case Pairing
Volume control Horizontal slider + label showing current value
Brightness Vertical slider on side panel
Parameter tuning Multiple sliders in a settings panel
Color picker 3 sliders (R, G, B) feeding a color preview box

Examples

Horizontal Slider with Live Readout

A centered purple-fill slider with a value label that updates on every drag — covers slider_colors, range, value, knob_size, track_thickness, and MGUI_EVENT_CHANGE.

Slider Horizontal

{
  "elements": [
    {
      "type": "box",
      "name": "Screen",
      "x": 0, "y": 0, "w": 320, "h": 240,
      "color": "0xC6C6C6",
      "children": [
        {
          "type": "label",
          "name": "ValLabel",
          "x": 0, "y": 80, "w": 320, "h": 28,
          "color": "0xC6C6C6",
          "align": "MGUI_ALIGN_CENTER",
          "text": "Volume: 50"
        },
        {
          "type": "slider",
          "name": "VolSlider",
          "x": 0, "y": 120, "w": 260, "h": 28,
          "color": "0x3A2939",
          "align": "MGUI_ALIGN_CENTER",
          "value": 50,
          "knob_size": 14,
          "track_thickness": 4,
          "slider_colors": {
            "track": "0x3A2939",
            "knob": "0xFFFFFF",
            "fill": "0x5900CC"
          },
          "range": { "min": 0, "max": 100 }
        }
      ]
    }
  ]
}
mgui_widget_t* screen = mgui_allocate_widget(
    NULL, MGUI_WIDGET_BOX,
    (mgui_area_t){0, 0, 320, 240},
    MGUI_COLOR_LIGHT_GRAY);

mgui_widget_t* val_lbl = mgui_allocate_widget(
    screen, MGUI_WIDGET_LABEL,
    (mgui_area_t){0, 80, 320, 28},
    MGUI_COLOR_LIGHT_GRAY);
mgui_widget_align(val_lbl, MGUI_ALIGN_CENTER);
mgui_widget_label_set_text(val_lbl, "Volume: 50");
mgui_widget_color_change(val_lbl, MGUI_COLOR_PURPLE);

#ifdef MGUI_WIDGET_ENABLE_SLIDER
mgui_widget_t* vol_slider = mgui_allocate_widget(
    screen, MGUI_WIDGET_SLIDER,
    (mgui_area_t){0, 120, 260, 28},
    MGUI_COLOR_ELEM_DARK_SLATE);
mgui_widget_align(vol_slider, MGUI_ALIGN_CENTER);
mgui_widget_slider_set_range(vol_slider, 0, 100);
mgui_widget_slider_set_value(vol_slider, 50);
mgui_widget_slider_set_knob_size(vol_slider, 14);
mgui_widget_slider_set_track_thickness(vol_slider, 4);
mgui_widget_slider_set_colors(vol_slider,
    MGUI_COLOR_ELEM_DARK_SLATE,
    MGUI_COLOR_WHITE,
    MGUI_COLOR_PURPLE);

static void on_volume(mgui_widget_t* obj, mgui_event_t event) {
    if (event & MGUI_EVENT_CHANGE) {
        char buf[20];
        snprintf(buf, sizeof(buf), "Volume: %d",
                 mgui_widget_slider_get_value(obj));
        mgui_widget_label_set_text(val_lbl, buf);
    }
}
mgui_widget_click_handler(vol_slider, on_volume);
#endif /* MGUI_WIDGET_ENABLE_SLIDER */

Vertical + Horizontal Sliders

A vertical brightness slider beside a horizontal temperature slider — covers both MGUI_SLIDER_VERTICAL and MGUI_SLIDER_HORIZONTAL with different fill colors.

Slider Mixed

{
  "elements": [
    {
      "type": "box",
      "name": "Screen",
      "x": 0, "y": 0, "w": 320, "h": 240,
      "color": "0xC6C6C6",
      "children": [
        {
          "type": "slider",
          "name": "BrightSlider",
          "x": 20, "y": 40, "w": 28, "h": 160,
          "color": "0x3A2939",
          "orientation": "vertical",
          "value": 80,
          "slider_colors": {
            "track": "0x3A2939",
            "knob": "0xFFFFFF",
            "fill": "0x2DA852"
          },
          "range": { "min": 0, "max": 100 }
        },
        {
          "type": "slider",
          "name": "TempSlider",
          "x": 70, "y": 0, "w": 220, "h": 28,
          "color": "0x3A2939",
          "align": "MGUI_ALIGN_CENTER_V",
          "orientation": "horizontal",
          "value": 22,
          "knob_size": 16,
          "track_thickness": 6,
          "slider_colors": {
            "track": "0x3A2939",
            "knob": "0xFFFFFF",
            "fill": "0xEF3F2E"
          },
          "range": { "min": 0, "max": 100 }
        }
      ]
    }
  ]
}

```c

ifdef MGUI_WIDGET_ENABLE_SLIDER

mgui_widget_t* bright_slider = mgui_allocate_widget( screen, MGUI_WIDGET_SLIDER, (mgui_area_t){20, 40, 28, 160}, MGUI_COLOR_ELEM_DARK_SLATE); mgui_widget_slider_set_orientation(bright_slider, MGUI_SLIDER_VERTICAL); mgui_widget_slider_set_range(bright_slider, 0, 100); mgui_widget_slider_set_value(bright_slider, 80); mgui_widget_slider_set_colors(bright_slider, MGUI_COLOR_ELEM_DARK_SLATE, MGUI_COLOR_WHITE, MGUI_COLOR_EMERALD);

mgui_widget_t* temp_slider = mgui_allocate_widget( screen, MGUI_WIDGET_SLIDER, (mgui_area_t){70, 0, 220, 28}, MGUI_COLOR_ELEM_DARK_SLATE); mgui_widget_align(temp_slider, MGUI_ALIGN_CENTER_V); mgui_widget_slider_set_orientation(temp_slider, MGUI_SLIDER_HORIZONTAL); mgui_widget_slider_set_range(temp_slider, 0, 100); mgui_widget_slider_set_value(temp_slider, 22); mgui_widget_slider_set_knob_size(temp_slider, 16); mgui_widget_slider_set_track_thickness(temp_slider, 6); mgui_widget_slider_set_colors(temp_slider, MGUI_COLOR_ELEM_DARK_SLATE, MGUI_COLOR_WHITE, MGUI_COLOR_CRIMSON);

endif / MGUI_WIDGET_ENABLE_SLIDER /