62 lines
1.9 KiB
Plaintext
62 lines
1.9 KiB
Plaintext
@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
|