summaryrefslogtreecommitdiff
path: root/Userland/Libraries/LibGUI/Slider.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Userland/Libraries/LibGUI/Slider.cpp')
-rw-r--r--Userland/Libraries/LibGUI/Slider.cpp20
1 files changed, 18 insertions, 2 deletions
diff --git a/Userland/Libraries/LibGUI/Slider.cpp b/Userland/Libraries/LibGUI/Slider.cpp
index 71f1821456..5cac087bf7 100644
--- a/Userland/Libraries/LibGUI/Slider.cpp
+++ b/Userland/Libraries/LibGUI/Slider.cpp
@@ -87,10 +87,26 @@ void Slider::mousedown_event(MouseEvent& event)
m_drag_origin = event.position();
m_drag_origin_value = value();
return;
+ }
+
+ const auto mouse_offset = event.position().primary_offset_for_orientation(orientation());
+
+ if (jump_to_cursor()) {
+ float normalized_mouse_offset = 0.0f;
+ if (orientation() == Orientation::Vertical) {
+ normalized_mouse_offset = static_cast<float>(mouse_offset) / static_cast<float>(height());
+ } else {
+ normalized_mouse_offset = static_cast<float>(mouse_offset) / static_cast<float>(width());
+ }
+
+ int new_value = static_cast<int>(min() + ((max() - min()) * normalized_mouse_offset));
+ set_value(new_value);
} else {
- if (event.position().primary_offset_for_orientation(orientation()) > knob_rect().last_edge_for_orientation(orientation()))
+ auto knob_first_edge = knob_rect().first_edge_for_orientation(orientation());
+ auto knob_last_edge = knob_rect().last_edge_for_orientation(orientation());
+ if (mouse_offset > knob_last_edge)
set_value(value() + page_step());
- else if (event.position().primary_offset_for_orientation(orientation()) < knob_rect().first_edge_for_orientation(orientation()))
+ else if (mouse_offset < knob_first_edge)
set_value(value() - page_step());
}
}