aboutsummaryrefslogtreecommitdiff
path: root/src/blocks/slider.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/blocks/slider.c')
-rw-r--r--src/blocks/slider.c79
1 files changed, 35 insertions, 44 deletions
diff --git a/src/blocks/slider.c b/src/blocks/slider.c
index fe8ee28..854b284 100644
--- a/src/blocks/slider.c
+++ b/src/blocks/slider.c
@@ -257,29 +257,6 @@ static void block_slider_clean(block_t *block)
gradient_clean(&slider->knob_line_color);
}
-static int block_slider_validate(block_t *block, config_t *config)
-{
- block_slider_t *slider = (block_slider_t *)block;
- int errors = 0;
-
- if (slider->value < 0 || slider->value > 100) {
- log_error("Block '%s' requires '%s' to be between 0 and 100", block->label, "bar-value");
- errors++;
- }
-
- if (slider->knob_width < slider->knob_height) {
- log_error("Block '%s' requires '%s' greater than '%s'", block->label, "knob-width", "knob-height");
- errors++;
- }
-
- if (fabs(slider->knob_rotation) > 360.0) {
- log_error("Block '%s' requires '%s' to be at most 360", block->label, "knob-rotation");
- errors++;
- }
-
- return errors;
-}
-
static bool block_slider_resolve(block_t *block, config_t *config)
{
block_slider_t *slider = (block_slider_t *)block;
@@ -306,28 +283,43 @@ static config_enum_t knob_shape_enum[] = {
{ 0 },
};
+static config_check_t bar_value_checks[] = {
+ { CHECK_IN_RANGE, { .range = { 0, 100 } } },
+ { 0 },
+};
+
+static config_check_t knob_width_checks[] = {
+ { CHECK_GT_OTHER, { .compare = { offsetof(block_slider_t, knob_height), CONFIG_UINT } } },
+ { 0 },
+};
+
+static config_check_t knob_rotation_checks[] = {
+ { CHECK_IN_RANGE, { { -360, 360 } } },
+ { 0 },
+};
+
static const config_entry_t block_slider_entries[] = {
// TODO: Ugly names
- { "bar-color", CONFIG_GRADIENT, NULL, NULL, offsetof(block_slider_t, bar_color) },
- { "bar-line-color", CONFIG_GRADIENT, NULL, NULL, offsetof(block_slider_t, line_color) },
- { "bar-bg-color", CONFIG_GRADIENT, NULL, NULL, offsetof(block_slider_t, bg_color) },
- { "bar-height", CONFIG_UINT, NULL, NULL, offsetof(block_slider_t, height) },
- { "bar-width", CONFIG_UINT, NULL, NULL, offsetof(block_slider_t, width) },
- { "bar-line-width", CONFIG_UINT, NULL, NULL, offsetof(block_slider_t, line_width) },
- { "bar-value", CONFIG_INT, NULL, NULL, offsetof(block_slider_t, value) },
- { "seekable", CONFIG_BOOL, NULL, NULL, offsetof(block_slider_t, seekable) },
- { "knob", CONFIG_ENUM, knob_shape_enum, NULL, offsetof(block_slider_t, knob) },
- { "knob-height", CONFIG_UINT, NULL, NULL, offsetof(block_slider_t, knob_height) },
- { "knob-width", CONFIG_UINT, NULL, NULL, offsetof(block_slider_t, knob_width) },
- { "knob-line-width", CONFIG_UINT, NULL, NULL, offsetof(block_slider_t, knob_line_width) },
- { "knob-color", CONFIG_GRADIENT, NULL, NULL, offsetof(block_slider_t, knob_color) },
- { "knob-line-color", CONFIG_GRADIENT, NULL, NULL, offsetof(block_slider_t, knob_line_color) },
- { "knob-x-offset", CONFIG_INT, NULL, NULL, offsetof(block_slider_t, knob_x_offset) },
- { "knob-y-offset", CONFIG_INT, NULL, NULL, offsetof(block_slider_t, knob_y_offset) },
- { "knob-rotation", CONFIG_DOUBLE, NULL, NULL, offsetof(block_slider_t, knob_rotation) },
- { "left-click-bar", CONFIG_STRING, NULL, NULL, offsetof(block_slider_t, left_click) },
- { "middle-click-bar", CONFIG_STRING, NULL, NULL, offsetof(block_slider_t, middle_click) },
- { "right-click-bar", CONFIG_STRING, NULL, NULL, offsetof(block_slider_t, right_click) },
+ { "bar-color", CONFIG_GRADIENT, NULL, NULL, offsetof(block_slider_t, bar_color) },
+ { "bar-line-color", CONFIG_GRADIENT, NULL, NULL, offsetof(block_slider_t, line_color) },
+ { "bar-bg-color", CONFIG_GRADIENT, NULL, NULL, offsetof(block_slider_t, bg_color) },
+ { "bar-height", CONFIG_UINT, NULL, NULL, offsetof(block_slider_t, height) },
+ { "bar-width", CONFIG_UINT, NULL, NULL, offsetof(block_slider_t, width) },
+ { "bar-line-width", CONFIG_UINT, NULL, NULL, offsetof(block_slider_t, line_width) },
+ { "bar-value", CONFIG_INT, NULL, bar_value_checks, offsetof(block_slider_t, value) },
+ { "seekable", CONFIG_BOOL, NULL, NULL, offsetof(block_slider_t, seekable) },
+ { "knob", CONFIG_ENUM, knob_shape_enum, NULL, offsetof(block_slider_t, knob) },
+ { "knob-height", CONFIG_UINT, NULL, NULL, offsetof(block_slider_t, knob_height) },
+ { "knob-width", CONFIG_UINT, NULL, knob_width_checks, offsetof(block_slider_t, knob_width) },
+ { "knob-line-width", CONFIG_UINT, NULL, NULL, offsetof(block_slider_t, knob_line_width) },
+ { "knob-color", CONFIG_GRADIENT, NULL, NULL, offsetof(block_slider_t, knob_color) },
+ { "knob-line-color", CONFIG_GRADIENT, NULL, NULL, offsetof(block_slider_t, knob_line_color) },
+ { "knob-x-offset", CONFIG_INT, NULL, NULL, offsetof(block_slider_t, knob_x_offset) },
+ { "knob-y-offset", CONFIG_INT, NULL, NULL, offsetof(block_slider_t, knob_y_offset) },
+ { "knob-rotation", CONFIG_DOUBLE, NULL, knob_rotation_checks, offsetof(block_slider_t, knob_rotation) },
+ { "left-click-bar", CONFIG_STRING, NULL, NULL, offsetof(block_slider_t, left_click) },
+ { "middle-click-bar", CONFIG_STRING, NULL, NULL, offsetof(block_slider_t, middle_click) },
+ { "right-click-bar", CONFIG_STRING, NULL, NULL, offsetof(block_slider_t, right_click) },
{ 0 },
};
@@ -343,7 +335,6 @@ const block_scheme_t block_slider_scheme = {
.validate_change = true,
.init_fn = block_slider_init,
.clean_fn = block_slider_clean,
- .validate_fn = block_slider_validate,
.resolve_fn = block_slider_resolve,
.change_fn = block_slider_change,
};