Add the SmoothScroll node to all windows that need smooth scrolling. The node works only on one window at a time and does not work on embedded windows. If some specific Control shoudln't be smooth scrolling, add the SmoothScrollIgnore node to it.
Enabling the addon will automatically add a SmoothScroll node as an autoload and add smooth scrolling to the godot editor.
This addon enables smooth scrolling by interecpting non-smooth scroll events and turning them into smooth ones.
This is done with the _input() callback, accept_event() and Input.parse_input_event().
If it receives a InputEventMouseButton in _input, it will check if it has a (smooth) factor.
If it doesn't, it will set its factor to 0 to prevent it from being used in normal Control nodes.
Then it will record the events scroll amount in a variable _needed_scroll, to then later split the needed scroll amount up into smaller chunks, which will make scrolling smoother.
That is done in _process(), in which it will create new InputEventMouseButton's with a modified factor to be parsed.
- This will increase the amount of scroll events, which might mess with components that work with single scroll events. To work around this, you can add the
SmoothScrollIgnorenode to theControlnode that should not receive smoothed scroll events. You can also also check for smoothed scroll events withevent.button_mask & 2048or disabled (factor 0) scroll events withevent.button_mask & 4096 - This might not report the correct mouse location if the window is scaled with the viewport expand mode.
- This will not work on embedded windows.