Ver Fonte

LibGUI: Set correct value on click with set jump_to_cursor() in Slider

Prior this change, clicking on a slider with set jump_to_cursor() flag
didn't exactly match the knob to the mouse position, and therefore
the slider values were a bit off in the corners.
The calculation used the whole widget size to set new values, which
isn't correct as the track slider has margins on both ends.

I noticed this while seeking in the Sound Player.
Karol Kosek há 3 anos atrás
pai
commit
43a800a838
1 ficheiros alterados com 2 adições e 2 exclusões
  1. 2 2
      Userland/Libraries/LibGUI/Slider.cpp

+ 2 - 2
Userland/Libraries/LibGUI/Slider.cpp

@@ -93,9 +93,9 @@ void Slider::mousedown_event(MouseEvent& event)
         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());
+                normalized_mouse_offset = static_cast<float>(mouse_offset - track_margin()) / static_cast<float>(inner_rect().height());
             } else {
-                normalized_mouse_offset = static_cast<float>(mouse_offset) / static_cast<float>(width());
+                normalized_mouse_offset = static_cast<float>(mouse_offset - track_margin()) / static_cast<float>(inner_rect().width());
             }
 
             int new_value = static_cast<int>(min() + ((max() - min()) * normalized_mouse_offset));