diff options
author | Rémi Verschelde <rverschelde@gmail.com> | 2018-01-03 11:34:42 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-01-03 11:34:42 +0100 |
commit | e3c744f9f14e29ec0c8ac4489d590414a24ab0bb (patch) | |
tree | 51bab073b0c496c239f49d15aa5e6155802cb268 | |
parent | fd5f193da5dd9e2647c3b63e1daf1c0ad0ba7af9 (diff) | |
parent | d640542f6d891a9385138a580f298054ff8bb216 (diff) |
Merge pull request #15127 from poke1024/smooth-scroll-play
Remove some lagginess from TextEdit's smooth scrolling
-rw-r--r-- | scene/gui/text_edit.cpp | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/scene/gui/text_edit.cpp b/scene/gui/text_edit.cpp index 836b11c349..5fbc0c9064 100644 --- a/scene/gui/text_edit.cpp +++ b/scene/gui/text_edit.cpp @@ -3139,6 +3139,9 @@ void TextEdit::_gui_input(const Ref<InputEvent> &p_gui_input) { void TextEdit::_scroll_up(real_t p_delta) { + if (scrolling && smooth_scroll_enabled && SGN(target_v_scroll - v_scroll->get_value()) != SGN(-p_delta)) + scrolling = false; + if (scrolling) { target_v_scroll = (target_v_scroll - p_delta); } else { @@ -3149,8 +3152,12 @@ void TextEdit::_scroll_up(real_t p_delta) { if (target_v_scroll <= 0) { target_v_scroll = 0; } - scrolling = true; - set_physics_process(true); + if (Math::abs(target_v_scroll - v_scroll->get_value()) < 1.0) { + v_scroll->set_value(target_v_scroll); + } else { + scrolling = true; + set_physics_process(true); + } } else { v_scroll->set_value(target_v_scroll); } @@ -3158,6 +3165,9 @@ void TextEdit::_scroll_up(real_t p_delta) { void TextEdit::_scroll_down(real_t p_delta) { + if (scrolling && smooth_scroll_enabled && SGN(target_v_scroll - v_scroll->get_value()) != SGN(p_delta)) + scrolling = false; + if (scrolling) { target_v_scroll = (target_v_scroll + p_delta); } else { @@ -3174,8 +3184,13 @@ void TextEdit::_scroll_down(real_t p_delta) { if (target_v_scroll > max_v_scroll) { target_v_scroll = max_v_scroll; } - scrolling = true; - set_physics_process(true); + + if (Math::abs(target_v_scroll - v_scroll->get_value()) < 1.0) { + v_scroll->set_value(target_v_scroll); + } else { + scrolling = true; + set_physics_process(true); + } } else { v_scroll->set_value(target_v_scroll); } |