@startuml
title Компоненты проекта Wayland

package "Wayland Application" {
  
  [wayland-runtime] as Runtime
  [registry] as Registry
  [input] as Input
  [input-handle] as InputHandle
  [window] as Window
  
  package "Rendering & Animation" {
    [figure-draw] as FigureDraw
    [figure-animate (ASM)] as FigureAnimate
  }
  
  Runtime --> Registry : использует глобальные объекты
  Runtime --> Input : инициализирует
  Runtime --> Window : создаёт и управляет
  
  Input --> InputHandle : делегирует обработку
  InputHandle --> Runtime : вызывает run_window()
  InputHandle --> Window : изменяет параметры фигуры
  
  Window --> Registry : получает compositor, shm, wm_base
  Window --> FigureDraw : отрисовка фигуры
  Window --> FigureAnimate : aux_thread для анимации
  
  FigureDraw --> FigureAnimate : использует place_points_on_circle
}

package "System Libraries" {
  [wayland-client] as WaylandLib
  [xdg-shell-protocol] as XDGShell
  [xkbcommon] as XKB
}

Registry --> WaylandLib
Registry --> XDGShell
Window --> WaylandLib
Window --> XDGShell
Input --> WaylandLib
Input --> XKB

cloud "Wayland Compositor" as Compositor

Runtime --> Compositor : wl_display_connect()
Registry --> Compositor : получение глобальных объектов
Window --> Compositor : создание окон и буферов
Input --> Compositor : получение событий клавиатуры

note right of Runtime
  Центральный компонент:
  - Управление жизненным циклом
  - Многопоточность (окна + анимация)
  - Синхронизация через mutex
end note

note right of FigureAnimate
  Реализация на NASM:
  - Физика движения
  - Обработка коллизий
  - Математика (sin/cos)
  - SSE инструкции
end note

note right of Window
  Каждое окно в отдельном потоке:
  - window_thread: отрисовка
  - aux_thread: анимация
  - Event queue для изоляции событий
end note

@enduml
