Zpět na projekty
TUIX v0.3Beta

Naposledy aktualizováno: 2026-05-20

Zpracování vstupu

TUIX zachytává vstup z klávesnice a myši ve vyhrazeném vlákně na pozadí a předává události widgetům pomocí snímků. Ve v0.3 je zpracování vstupu ve výchozí builder pipeline automatické.

Architektura

Vstupní systém běží jako vlákno na pozadí spuštěné pomocí input.listen(). Čte surové události platformy a ukládá je do dvou kruhových bufferů: jeden pro klávesnici a jeden pro myš. Každý buffer pojme až 128 událostí. Ve standardním použití v0.3 snapshoty automaticky spotřebovává frame loop a builder callbacky.

Snímky vstupu

Snímek je okamžitý záznam stavu vstupu. Obsahuje aktuální rozměry terminálu a ukazatele na data událostí klávesnice a myši.

# Automatic path (v0.3 default)
while running:
    engine.main_loop()

Snapshoty jsou stále mostem mezi vstupním vláknem a logikou widgetů. V případě potřeby můžete input.get_snapshot() volat ručně, ale výchozí builder flow ve v0.3 to dělá za vás.

Události klávesnice

Události klávesnice obsahují kód klávesy, scancode, modifikační příznaky, stav stisku/opakování, časové razítko a až 8 bajtů UTF-8 textu.

PoleTypPopis
btnintIdentifikátor klávesy
codeintKód klávesy
scancodeintHardwarový scancode
modifiersintModifikační příznaky (Shift, Ctrl, Alt)
pressedint1 pokud je klávesa stisknutá, 0 pokud není
repeatint1 pokud jde o opakovanou událost
timestampdoubleČasové razítko události
has_eventint1 pokud je událost přítomná
textchar[8]UTF-8 text generovaný klávesou

Události myši

Události myši zachycují pozici, tlačítko a typ události. Systém podporuje stisk, uvolnění, hover, drag, scrollování a dvojklik.

Typ událostiHodnotaPopis
TUIX_MOUSE_NONE0Žádná událost
TUIX_MOUSE_PRESS1Tlačítko stisknuto
TUIX_MOUSE_RELEASE2Tlačítko uvolněno
TUIX_MOUSE_HOVER3Pohyb myši (bez tlačítka)
TUIX_MOUSE_DRAG4Pohyb myši se stisknutým tlačítkem
TUIX_MOUSE_SCROLL_UP5Scroll kolečka nahoru
TUIX_MOUSE_SCROLL_DOWN6Scroll kolečka dolů
TUIX_MOUSE_DOUBLE_CLICK7Detekován dvojklik
TUIX_MOUSE_HSCROLL_LEFT8Horizontální scroll doleva
TUIX_MOUSE_HSCROLL_RIGHT9Horizontální scroll doprava
TlačítkoHodnota
TUIX_BTN_LEFT0
TUIX_BTN_MIDDLE1
TUIX_BTN_RIGHT2
TUIX_BTN_X13
TUIX_BTN_X24

Implementace na platformách

Na Windows používá vstupní vlákno ReadConsoleInputW pro příjem nativních struktur KEY_EVENT_RECORD a MOUSE_EVENT_RECORD. Stavový automat tlačítek sleduje hrany stisku/uvolnění pro přesnou detekci kliknutí. ENABLE_VIRTUAL_TERMINAL_INPUT se záměrně nepoužívá kvůli chybě Windows, kdy jsou SGR kódované události myši mylně vyhodnoceny jako klávesnicový vstup.

Na POSIX systémech (Linux, macOS) se terminál přepne do raw režimu a jedno vlákno pthread čte ze stdin. Události myši se parsují ze SGR escape sekvencí. Režim terminálu se obnoví po zavolání input.stop().

Vzor použití

from tuix.core import engine, input

input.listen()
while running:
    engine.main_loop()
input.stop()
Ruční kompatibilní cestaPokud potřebujete explicitní kontrolu, ruční API pro feed snapshotu stále existují (objects.tuix_choice_feed_input a objects.tuix_input_feed_input), ale pro běžné aplikace v0.3 už nejsou nutné.
Směrování fokusu (v0.3)Použijte scenes.set_focus(scene_name, uid) pro výběr interaktivního widgetu, který má dostávat fokus klávesnice, a scenes.set_previous_focus(scene_name) pro návrat na předchozí cíl.