1
0
Fork 0

Fix iced ParamSlider fill overlapping with border

This commit is contained in:
Robbert van der Helm 2022-03-16 01:38:35 +01:00
parent 1971273cb6
commit 824893c33d

View file

@ -439,6 +439,13 @@ impl<'a, P: Param> Widget<ParamMessage, Renderer> for ParamSlider<'a, P> {
_viewport: &Rectangle, _viewport: &Rectangle,
) { ) {
let bounds = layout.bounds(); let bounds = layout.bounds();
// I'm sure there's some philosophical meaning behind this
let bounds_without_borders = Rectangle {
x: bounds.x + BORDER_WIDTH,
y: bounds.y + BORDER_WIDTH,
width: bounds.width - (BORDER_WIDTH * 2.0),
height: bounds.height - (BORDER_WIDTH * 2.0),
};
let is_mouse_over = bounds.contains(cursor_position); let is_mouse_over = bounds.contains(cursor_position);
// The bar itself, show a different background color when the value is being edited or when // The bar itself, show a different background color when the value is being edited or when
@ -477,21 +484,20 @@ impl<'a, P: Param> Widget<ParamMessage, Renderer> for ParamSlider<'a, P> {
// For discrete alawys fill the bar from the left because it otherwise looks a bit // For discrete alawys fill the bar from the left because it otherwise looks a bit
// jarring when any any value after the first one is the defautl // jarring when any any value after the first one is the defautl
let fill_start_x = util::remap_rect_x_t( let fill_start_x = util::remap_rect_x_t(
&bounds, &bounds_without_borders,
if self.param.step_count().is_some() { if self.param.step_count().is_some() {
0.0 0.0
} else { } else {
self.setter.default_normalized_param_value(self.param) self.setter.default_normalized_param_value(self.param)
}, },
); );
let fill_end_x = util::remap_rect_x_t(&bounds, current_value); let fill_end_x = util::remap_rect_x_t(&bounds_without_borders, current_value);
let fill_color = Color::from_rgb8(196, 196, 196); let fill_color = Color::from_rgb8(196, 196, 196);
let fill_rect = Rectangle { let fill_rect = Rectangle {
x: fill_start_x.min(fill_end_x), x: fill_start_x.min(fill_end_x),
y: bounds.y + BORDER_WIDTH,
width: (fill_end_x - fill_start_x).abs(), width: (fill_end_x - fill_start_x).abs(),
height: bounds.height - BORDER_WIDTH * 2.0, ..bounds_without_borders
}; };
renderer.fill_quad( renderer.fill_quad(
renderer::Quad { renderer::Quad {