diff options
author | Rémi Verschelde <rverschelde@gmail.com> | 2023-03-08 14:06:30 +0100 |
---|---|---|
committer | Rémi Verschelde <rverschelde@gmail.com> | 2023-03-08 14:06:30 +0100 |
commit | 677cba3d588aa30ef556b947cb2db5c7d2fd90ac (patch) | |
tree | c652692699e9ade6ec2b3c68a9f0749f2c3ac143 | |
parent | dac2d8fb4214d3394bfb33b28f35f6d1e61518a8 (diff) | |
parent | 1608bea18809dcb4e744ee936f8de8f5660adfbe (diff) | |
download | redot-engine-677cba3d588aa30ef556b947cb2db5c7d2fd90ac.tar.gz |
Merge pull request #67910 from pkowal1982/scroll_bar
Fix scrolling behaviour with zero/low page value
-rw-r--r-- | scene/gui/scroll_bar.cpp | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/scene/gui/scroll_bar.cpp b/scene/gui/scroll_bar.cpp index b8faf22a59..fcf9302953 100644 --- a/scene/gui/scroll_bar.cpp +++ b/scene/gui/scroll_bar.cpp @@ -55,12 +55,14 @@ void ScrollBar::gui_input(const Ref<InputEvent> &p_event) { accept_event(); if (b->get_button_index() == MouseButton::WHEEL_DOWN && b->is_pressed()) { - set_value(get_value() + get_page() / 4.0); + double change = get_page() != 0.0 ? get_page() / 4.0 : (get_max() - get_min()) / 16.0; + set_value(get_value() + MAX(change, get_step())); accept_event(); } if (b->get_button_index() == MouseButton::WHEEL_UP && b->is_pressed()) { - set_value(get_value() - get_page() / 4.0); + double change = get_page() != 0.0 ? get_page() / 4.0 : (get_max() - get_min()) / 16.0; + set_value(get_value() - MAX(change, get_step())); accept_event(); } @@ -99,7 +101,8 @@ void ScrollBar::gui_input(const Ref<InputEvent> &p_event) { if (scrolling) { target_scroll = CLAMP(target_scroll - get_page(), get_min(), get_max() - get_page()); } else { - target_scroll = CLAMP(get_value() - get_page(), get_min(), get_max() - get_page()); + double change = get_page() != 0.0 ? get_page() : (get_max() - get_min()) / 16.0; + target_scroll = CLAMP(get_value() - change, get_min(), get_max() - get_page()); } if (smooth_scroll_enabled) { @@ -122,7 +125,8 @@ void ScrollBar::gui_input(const Ref<InputEvent> &p_event) { if (scrolling) { target_scroll = CLAMP(target_scroll + get_page(), get_min(), get_max() - get_page()); } else { - target_scroll = CLAMP(get_value() + get_page(), get_min(), get_max() - get_page()); + double change = get_page() != 0.0 ? get_page() : (get_max() - get_min()) / 16.0; + target_scroll = CLAMP(get_value() + change, get_min(), get_max() - get_page()); } if (smooth_scroll_enabled) { |