From 512a675e10c66a8f32596f2e53cb21b622ccae4d Mon Sep 17 00:00:00 2001 From: Markus Sauermann <6299227+Sauermann@users.noreply.github.com> Date: Wed, 10 May 2023 20:53:13 +0200 Subject: [PATCH] Update input event tutorial Update input event flow graphic based on recent changes. Made some descriptions more precise. Input Event table: - Added missing InputEvents Gesture, MIDI and Shortcut - Removed unused Type Index column --- tutorials/inputs/img/input_event_flow.png | Bin 14218 -> 0 bytes tutorials/inputs/img/input_event_flow.webp | Bin 0 -> 6868 bytes tutorials/inputs/inputevent.rst | 101 ++++++++++++--------- 3 files changed, 56 insertions(+), 45 deletions(-) delete mode 100644 tutorials/inputs/img/input_event_flow.png create mode 100644 tutorials/inputs/img/input_event_flow.webp diff --git a/tutorials/inputs/img/input_event_flow.png b/tutorials/inputs/img/input_event_flow.png deleted file mode 100644 index d031ac85b0e2046e6360b45f1316c07ca56613c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14218 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 O$pW)N?mv4z;YtFdRuLEg literal 0 HcmV?d00001 diff --git a/tutorials/inputs/inputevent.rst b/tutorials/inputs/inputevent.rst index 8df0f5565..2406a2abd 100644 --- a/tutorials/inputs/inputevent.rst +++ b/tutorials/inputs/inputevent.rst @@ -61,19 +61,19 @@ How does it work? Every input event is originated from the user/player (though it's possible to generate an InputEvent and feed them back to the engine, -which is useful for gestures). The OS object for each platform will read -events from the device, then feed them to the :ref:`Window `. +which is useful for gestures). The DisplayServer for each platform will read +events from the operating system, then feed them to the root :ref:`Window `. The window's :ref:`Viewport ` does quite a lot of stuff with the received input, in order: -.. image:: img/input_event_flow.png +.. image:: img/input_event_flow.webp 1. If the Viewport is embedding Windows, the Viewport tries to interpret the event in its capability as a Window-Manager (e.g. for resizing or moving Windows). 2. Next if an embedded Window is focused, the event is sent to that Window and processed in - the Windows Viewport. If no embedded Window is focused, The Event is sent to the nodes of - the current viewport in the following order. + the Windows Viewport and afterwards treated as handled. If no embedded Window is focused, + the event is sent to the nodes of the current viewport in the following order. 3. First of all, the standard :ref:`Node._input() ` function will be called in any node that overrides it (and hasn't disabled input processing with :ref:`Node.set_process_input() `). If any function consumes the event, it can call :ref:`Viewport.set_input_as_handled() `, and the event will @@ -96,17 +96,17 @@ received input, in order: :ref:`InputEventShortcut ` and :ref:`InputEventJoypadButton `. If any function consumes the event, it can call :ref:`Viewport.set_input_as_handled() `, and the event will not spread any more. The shortcut input callback is ideal for treating events that are intended as shortcuts. -6. If so far no one consumed the event, the :ref:`Node._unhandled_input() ` callback - will be called if overridden (and not disabled with - :ref:`Node.set_process_unhandled_input() `). - If any function consumes the event, it can call :ref:`Viewport.set_input_as_handled() `, and the - event will not spread any more. The unhandled input callback is ideal for full-screen gameplay events, so they are not received when a GUI is active. -7. If so far no one consumed the event, the :ref:`Node._unhandled_key_input() ` callback +6. If so far no one consumed the event, the :ref:`Node._unhandled_key_input() ` callback will be called if overridden (and not disabled with :ref:`Node.set_process_unhandled_key_input() `). This happens only if the event is a :ref:`InputEventKey `. If any function consumes the event, it can call :ref:`Viewport.set_input_as_handled() `, and the event will not spread any more. The unhandled key input callback is ideal for key events. +7. If so far no one consumed the event, the :ref:`Node._unhandled_input() ` callback + will be called if overridden (and not disabled with + :ref:`Node.set_process_unhandled_input() `). + If any function consumes the event, it can call :ref:`Viewport.set_input_as_handled() `, and the + event will not spread any more. The unhandled input callback is ideal for full-screen gameplay events, so they are not received when a GUI is active. 8. If no one wanted the event so far, and :ref:`Object Picking ` is turned on, the event is used for object picking. For the root viewport, this can also be enabled in :ref:`Project Settings `. @@ -119,7 +119,7 @@ received input, in order: When sending events to its child and descendant nodes, the viewport will do so, as depicted in the following graphic, in a reverse depth-first order, starting with the node at the bottom of -the scene tree, and ending at the root node. Excluded from this process are embedded Windows +the scene tree, and ending at the root node. Excluded from this process are Windows and SubViewports. .. image:: img/input_event_scene_flow.png @@ -131,8 +131,8 @@ Since Viewports don't send events to other :ref:`SubViewports `, which automatically - sends events to its child :ref:`SubViewports ` during - :ref:`Node._input() ` and :ref:`Node._unhandled_input() `. + sends events to its child :ref:`SubViewports ` after + :ref:`Node._input() ` or :ref:`Control._gui_input() `. 2. Implement event propagation based on the individual requirements. GUI events also travel up the scene tree but, since these events target @@ -152,37 +152,48 @@ anything and only contains some basic information, such as event ID There are several specialized types of InputEvent, described in the table below: -+-------------------------------------------------------------------+--------------------+-----------------------------------------+ -| Event | Type Index | Description | -+-------------------------------------------------------------------+--------------------+-----------------------------------------+ -| :ref:`InputEvent ` | NONE | Empty Input Event. | -+-------------------------------------------------------------------+--------------------+-----------------------------------------+ -| :ref:`InputEventKey ` | KEY | Contains a keycode and Unicode value, | -| | | as well as modifiers. | -+-------------------------------------------------------------------+--------------------+-----------------------------------------+ -| :ref:`InputEventMouseButton ` | MOUSE_BUTTON | Contains click information, such as | -| | | button, modifiers, etc. | -+-------------------------------------------------------------------+--------------------+-----------------------------------------+ -| :ref:`InputEventMouseMotion ` | MOUSE_MOTION | Contains motion information, such as | -| | | relative, absolute positions and speed. | -+-------------------------------------------------------------------+--------------------+-----------------------------------------+ -| :ref:`InputEventJoypadMotion ` | JOYSTICK_MOTION | Contains Joystick/Joypad analog axis | -| | | information. | -+-------------------------------------------------------------------+--------------------+-----------------------------------------+ -| :ref:`InputEventJoypadButton ` | JOYSTICK_BUTTON | Contains Joystick/Joypad button | -| | | information. | -+-------------------------------------------------------------------+--------------------+-----------------------------------------+ -| :ref:`InputEventScreenTouch ` | SCREEN_TOUCH | Contains multi-touch press/release | -| | | information. (only available on mobile | -| | | devices) | -+-------------------------------------------------------------------+--------------------+-----------------------------------------+ -| :ref:`InputEventScreenDrag ` | SCREEN_DRAG | Contains multi-touch drag information. | -| | | (only available on mobile devices) | -+-------------------------------------------------------------------+--------------------+-----------------------------------------+ -| :ref:`InputEventAction ` | SCREEN_ACTION | Contains a generic action. These events | -| | | are often generated by the programmer | -| | | as feedback. (more on this below) | -+-------------------------------------------------------------------+--------------------+-----------------------------------------+ ++-------------------------------------------------------------------+-----------------------------------------+ +| Event | Description | ++-------------------------------------------------------------------+-----------------------------------------+ +| :ref:`InputEvent ` | Empty Input Event. | ++-------------------------------------------------------------------+-----------------------------------------+ +| :ref:`InputEventKey ` | Contains a keycode and Unicode value, | +| | as well as modifiers. | ++-------------------------------------------------------------------+-----------------------------------------+ +| :ref:`InputEventMouseButton ` | Contains click information, such as | +| | button, modifiers, etc. | ++-------------------------------------------------------------------+-----------------------------------------+ +| :ref:`InputEventMouseMotion ` | Contains motion information, such as | +| | relative and absolute positions and | +| | speed. | ++-------------------------------------------------------------------+-----------------------------------------+ +| :ref:`InputEventJoypadMotion ` | Contains Joystick/Joypad analog axis | +| | information. | ++-------------------------------------------------------------------+-----------------------------------------+ +| :ref:`InputEventJoypadButton ` | Contains Joystick/Joypad button | +| | information. | ++-------------------------------------------------------------------+-----------------------------------------+ +| :ref:`InputEventScreenTouch ` | Contains multi-touch press/release | +| | information. (only available on mobile | +| | devices) | ++-------------------------------------------------------------------+-----------------------------------------+ +| :ref:`InputEventScreenDrag ` | Contains multi-touch drag information. | +| | (only available on mobile devices) | ++-------------------------------------------------------------------+-----------------------------------------+ +| :ref:`InputEventMagnifyGesture ` | Contains a position, a factor as well | +| | as modifiers. | ++-------------------------------------------------------------------+-----------------------------------------+ +| :ref:`InputEventPanGesture ` | Contains a position, a delta as well as | +| | modifiers. | ++-------------------------------------------------------------------+-----------------------------------------+ +| :ref:`InputEventMIDI ` | Contains MIDI-related information. | ++-------------------------------------------------------------------+-----------------------------------------+ +| :ref:`InputEventShortcut ` | Contains a shortcut. | ++-------------------------------------------------------------------+-----------------------------------------+ +| :ref:`InputEventAction ` | Contains a generic action. These events | +| | are often generated by the programmer | +| | as feedback. (more on this below) | ++-------------------------------------------------------------------+-----------------------------------------+ Actions -------