summaryrefslogtreecommitdiff
path: root/Userland/Libraries
diff options
context:
space:
mode:
authorTorstennator <engelTorsten@gmx.de>2022-04-24 18:37:28 +0200
committerLinus Groh <mail@linusgroh.de>2022-05-08 17:17:56 +0200
commitf9ec3b986e5184dbabb3e23a224d0ad9f9c796f5 (patch)
treee49794cf638f944aae4004fce58dd035aa4fa849 /Userland/Libraries
parentee6fb51db65d3bdde298bd097b5a39a3d6bf33d4 (diff)
downloadserenity-f9ec3b986e5184dbabb3e23a224d0ad9f9c796f5.zip
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.
Diffstat (limited to 'Userland/Libraries')
-rw-r--r--Userland/Libraries/LibGUI/OpacitySlider.cpp4
-rw-r--r--Userland/Libraries/LibGUI/ValueSlider.cpp4
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)