aboutsummaryrefslogtreecommitdiff
path: root/src/blocks
diff options
context:
space:
mode:
Diffstat (limited to 'src/blocks')
-rw-r--r--src/blocks/slider.c17
1 files changed, 10 insertions, 7 deletions
diff --git a/src/blocks/slider.c b/src/blocks/slider.c
index 32ec3e6..8495ecf 100644
--- a/src/blocks/slider.c
+++ b/src/blocks/slider.c
@@ -69,7 +69,7 @@ static void block_slider_render(layout_t *layout, cairo_t *cr)
pattern = slider->bar_color.pattern;
if (pattern != NULL) {
- int current = (slider->width * slider->value) / 100;
+ int current = (slider->value * slider->width) / 100;
render_capsule(cr, bar_x, bar_y, current, radius, radius);
cairo_pattern_set_matrix(pattern, &matrix);
@@ -99,6 +99,7 @@ static void block_slider_render(layout_t *layout, cairo_t *cr)
double knob_rotation = slider->knob_rotation * degree;
int knob_rw = knob_width * cos(knob_rotation) + knob_height * sin(knob_rotation);
+ //int current = (slider->value * slider->width) / 100 - knob_rw / 2;
int current = (slider->value * (slider->width - knob_rw)) / 100;
int knob_x = bar_x + slider->line_width + slider->knob_x_offset + current - knob_rw / 2;
@@ -151,7 +152,7 @@ static void block_slider_render(layout_t *layout, cairo_t *cr)
switch (slider->knob) {
case KNOB_CAPSULE: {
- int line_radius = knob_radius - slider->knob_line_width / 2;
+ int line_radius = knob_radius + slider->knob_line_width / 2;
render_capsule(cr, knob_x, knob_y, knob_width, knob_radius, line_radius);
break;
}
@@ -181,11 +182,13 @@ static void block_slider_event(layout_t *layout, config_t *config, event_t event
int value = slider->value;
if (event_is_click(event)) {
- int bar_x = layout->x + (layout->width - slider->width) / 2 - slider->line_width;
- int bar_y = layout->y + (layout->height - slider->height) / 2 - slider->line_width;
+ // TODO: Adjust the size to account for line_width
+ //
+ int bar_x = layout->x + (layout->width - slider->width) / 2;
+ int bar_y = layout->y + (layout->height - slider->height) / 2;
- int bar_width = slider->width + 2 * slider->line_width;
- int bar_height = slider->height + 2 * slider->line_width;
+ int bar_width = slider->width;
+ int bar_height = slider->height;
bool clicked = check_capsule(event.x, event.y, bar_x, bar_y, bar_width, bar_height);
@@ -213,7 +216,7 @@ static void block_slider_event(layout_t *layout, config_t *config, event_t event
action_perform(action, layout->block, config);
if (slider->seekable && clicked)
- slider->value = 100 * (event.x - bar_x) / (double)(slider->width - 1);
+ slider->value = 100 * (event.x - bar_x) / (double)(bar_width - 1);
} else {
action_perform(layout->block->actions[event.type], layout->block, config);