remote-input-to-ui
Remote Input to an ovui Interface
Overview
ovstream delivers InputEvents and composed text on its worker thread; ovui's input must be written on the thread that ticks it, before the tick. The application queues events, drains them once per tick, decides per event whether the UI or the scene camera receives it, and injects the UI's share through omni.ui._ui._inject_*.
Hand-off and routing
Pointer events go to whichever surface the pointer is over: the chrome (everything outside the viewport) receives ovui injection in window coordinates, the viewport drives the camera. Keyboard and text follow the last click, so a click on the panel gives it keyboard focus and a click in the scene takes it back. When the pointer leaves the panel, ovui is sent a move out of bounds and a left-button release so no drag stays stuck.
Source:
examples/python/app_stream/app_stream/app.pysnippetinput-routing
Injecting into ovui
Mouse position first, then buttons and wheel; keyboard events as ImGui keys; composed text (Server.on_unicode) as text input. The ovstream key codes are StreamSDK's NVST codes; the example carries a compact table to ImGui keys.
Source:
examples/python/app_stream/app_stream/ui/host.pysnippetinject-inputandexamples/python/app_stream/app_stream/ui/keymap.py