From f9ec3b986e5184dbabb3e23a224d0ad9f9c796f5 Mon Sep 17 00:00:00 2001 From: Torstennator Date: Sun, 24 Apr 2022 18:37:28 +0200 Subject: [PATCH] LibGUI: Fix {Value,Opacity}Slider value changes for values less than 0 This patch fixes a value glitch when changing the slider value via dragging the knob with the mouse and having a min value smaller than 0. Before this patch it was not possible to drag the value below 0 and it just snapped to the configured min value if the mouse was at the most left position. Now the value is calculated from the value range and mouse position within the widget. --- Userland/Libraries/LibGUI/OpacitySlider.cpp | 4 +++- Userland/Libraries/LibGUI/ValueSlider.cpp | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/Userland/Libraries/LibGUI/OpacitySlider.cpp b/Userland/Libraries/LibGUI/OpacitySlider.cpp index cb8aff8d79..df8917ba1d 100644 --- a/Userland/Libraries/LibGUI/OpacitySlider.cpp +++ b/Userland/Libraries/LibGUI/OpacitySlider.cpp @@ -103,7 +103,9 @@ int OpacitySlider::value_at(Gfx::IntPoint const& position) const if (position.x() > inner_rect.right()) return max(); float relative_offset = (float)(position.x() - inner_rect.x()) / (float)inner_rect.width(); - return relative_offset * (float)max(); + + int range = max() - min(); + return min() + (int)(relative_offset * (float)range); } void OpacitySlider::mousedown_event(MouseEvent& event) diff --git a/Userland/Libraries/LibGUI/ValueSlider.cpp b/Userland/Libraries/LibGUI/ValueSlider.cpp index 732b8081d2..d042f371fc 100644 --- a/Userland/Libraries/LibGUI/ValueSlider.cpp +++ b/Userland/Libraries/LibGUI/ValueSlider.cpp @@ -139,7 +139,9 @@ int ValueSlider::value_at(Gfx::IntPoint const& position) const if (position.x() > bar_rect().right()) return max(); float relative_offset = (float)(position.x() - bar_rect().left()) / (float)bar_rect().width(); - return (int)(relative_offset * (float)max()); + + int range = max() - min(); + return min() + (int)(relative_offset * (float)range); } void ValueSlider::set_value(int value, AllowCallback allow_callback, DoClamp do_clamp)