diff options
author | Torstennator <engelTorsten@gmx.de> | 2022-04-24 18:37:28 +0200 |
---|---|---|
committer | Linus Groh <mail@linusgroh.de> | 2022-05-08 17:17:56 +0200 |
commit | f9ec3b986e5184dbabb3e23a224d0ad9f9c796f5 (patch) | |
tree | e49794cf638f944aae4004fce58dd035aa4fa849 /Userland/Libraries | |
parent | ee6fb51db65d3bdde298bd097b5a39a3d6bf33d4 (diff) | |
download | serenity-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.cpp | 4 | ||||
-rw-r--r-- | 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) |