/* * DWN - Desktop Window Manager * retoor * Generic slider widget for panel controls */ #ifndef DWN_SLIDER_H #define DWN_SLIDER_H #include "dwn.h" #include #define SLIDER_WIDTH 30 #define SLIDER_HEIGHT 120 #define SLIDER_PADDING 8 #define SLIDER_KNOB_HEIGHT 8 /* Forward declaration */ typedef struct GenericSlider GenericSlider; /* Callback type for value changes */ typedef void (*SliderValueChangedCallback)(GenericSlider *slider, int value); /* Generic slider structure */ struct GenericSlider { Window window; int x, y; int width, height; bool visible; bool dragging; /* Value (always 0-100 internally) */ int value; /* Display */ const char *label_prefix; bool show_percentage; /* Callback */ SliderValueChangedCallback on_value_changed; void *user_data; }; /* Lifecycle */ GenericSlider *slider_create(int x, int y, const char *label_prefix, bool show_percentage, SliderValueChangedCallback callback, void *user_data); void slider_destroy(GenericSlider *slider); /* Visibility */ void slider_show(GenericSlider *slider, int x, int y); void slider_hide(GenericSlider *slider); bool slider_is_visible(const GenericSlider *slider); /* Rendering */ void slider_render(GenericSlider *slider); /* Event handling */ void slider_handle_click(GenericSlider *slider, int x, int y); void slider_handle_motion(GenericSlider *slider, int x, int y); void slider_handle_release(GenericSlider *slider); /* Value */ void slider_set_value(GenericSlider *slider, int value); int slider_get_value(const GenericSlider *slider); /* Hit testing */ bool slider_hit_test(const GenericSlider *slider, int x, int y); #endif