@startuml title Обработка клавиатурного ввода actor User participant "Wayland Server" as Server participant "input" as Input participant "input-handle" as Handler participant "wayland-runtime" as Runtime participant "window" as Window User -> Server: Нажатие клавиши Server -> Input: keyboard_key(key, state) activate Input Input -> Input: xkb_state_key_get_one_sym() note right: Преобразование keycode в keysym Input -> Handler: keyboard_key_handle(kc, ks, state, window) activate Handler alt Клавиша Enter Handler -> Runtime: run_window() note right: Создание нового окна else Клавиша '1' Handler -> Window: figure.type = CIRCLE else Клавиша '2' Handler -> Window: figure.type = TRIANGLE else Клавиша '3' Handler -> Window: figure.type = SQUARE else Клавиша '-' Handler -> Handler: pthread_mutex_lock() Handler -> Window: figure.speed -= 0.5 Handler -> Handler: Ограничить [1, 30] Handler -> Handler: pthread_mutex_unlock() else Клавиша '+' или '=' Handler -> Handler: pthread_mutex_lock() Handler -> Window: figure.speed += 0.5 Handler -> Handler: Ограничить [1, 30] Handler -> Handler: pthread_mutex_unlock() else Клавиша Up Handler -> Handler: pthread_mutex_lock() Handler -> Window: figure.radius += 2.0 Handler -> Handler: Ограничить [1, max] Handler -> Handler: pthread_mutex_unlock() else Клавиша Down Handler -> Handler: pthread_mutex_lock() Handler -> Window: figure.radius -= 2.0 Handler -> Handler: Ограничить [1, max] Handler -> Handler: pthread_mutex_unlock() end deactivate Handler deactivate Input note over Window Изменения параметров фигуры влияют на следующий frame анимации и отрисовки end note @enduml