🔒 Repository is read-only – file editing is disabled.

PaganDE/pagan-toolkit/README.md main

106 linii Raw ← Powrót

pagan-toolkit

Własna, minimalna biblioteka UI dla Waylanda — bez Qt, GTK, SCTK i iced. Rysuje okno bezpośrednio Cairo do bufora wl_shm, a rolę okna realizuje przez surowe xdg-shell + xdg-decoration.

To część PaganDE: mały, czytelny punkt startowy dla okienek i paneli DE.

Co jest w środku

Moduł Odpowiedzialność
src/lib.rs Re-exporty publicznego API.
src/window.rs MyToolkitWindow: model, hit-testing, hover, render_to_buffer, handle_mouse_click, handle_mouse_motion, resize_edge_at.
src/draw.rs Prymitywy Cairo: rounded_rectangle, draw_circle_button, draw_titlebar, draw_menu_button, draw_window_controls, clear_transparent.
src/shm.rs Alokacja memfd/tempfile + memmap2 + wl_shm pool/buffer (ShmBuffer trzyma File i MmapMut razem).
src/connection.rs wayland-client: registry, role xdg_surface/xdg_toplevel, dekoracje, pętla zdarzeń.
src/input.rs wl_seat/wl_pointer: hover, klik, serial z button-press, xdg_toplevel.move/resize.
src/i18n.rs Minimalna lokalizacja PL/EN (PAGAN_LANG).
examples/demo.rs Działające okno 800×500.

Wygląd

  • Ciemny motyw.
  • Pasek tytułu 40 px.
  • „Menu" po lewej i Zamknij/Minimalizuj/Maksymalizuj po prawej leżą na tej samej osi Y = 20.0 (stała TITLEBAR_CONTROL_CENTER_Y).
  • Zaokrąglone rogi okna, promień 12 px, tło przezroczyste (alpha = 0) poza zaokrągleniem.
  • Przyciski jako okręgi, kolor zależny od hover.

Wymagania

  • Linux z Waylandem (kompozytor PaganDE — albo dowolny inny).
  • Świeży toolchain Rust. cairo-rs 0.22 jest budowany w edition 2024 i wymaga nowego rustc (≈ 1.85+). Jeśli masz starszy kompilator, w Cargo.toml zejdź do cairo-rs = "0.20" i zweryfikuj miejsca oznaczone // API-NOTE.
  • Systemowe biblioteki: pkg-config, libcairo2-dev (nagłówki Cairo).

Instalacja Rust (rustup)

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source "$HOME/.cargo/env"
rustup update stable

Zależności systemowe (Debian/Ubuntu)

sudo apt install build-essential pkg-config libcairo2-dev

Budowanie

cargo build                 # biblioteka
cargo build --examples      # biblioteka + demo

Uruchomienie demo na naszym kompozytorze

Na kompozytorze PaganDE (lub dowolnym innym) — wskaż socket Waylanda przez WAYLAND_DISPLAY:

WAYLAND_DISPLAY=wayland-1 cargo run --example demo

Jeśli uruchamiasz demo z sesji, w której Wayland już działa, WAYLAND_DISPLAY jest zwykle ustawione automatycznie i wystarczy:

cargo run --example demo

Język interfejsu

Ustaw PAGAN_LANG:

PAGAN_LANG=pl cargo run --example demo
PAGAN_LANG=en cargo run --example demo

Nieznana wartość → angielski. Dodanie nowego napisu to jeden wariant w MsgKey i dwa stringi w tr() (src/i18n.rs).

Poziom logów

RUST_LOG=debug cargo run --example demo

Znane ograniczenia (wersja 0.1)

  • Menu jest tylko sygnalizowane (WindowAction::ShowMenu → log), bez rozwijanego popupu.
  • Brak obsługi klawiatury, dotyku i wielu seatów.
  • Brak wl_surface.frame (brak animacji/throttlingu) — przerysowanie tylko na żądanie.
  • Bufor SHM jest pojedynczy (bez podwójnego buforowania).
  • Bufor tworzymy przez tempfile; dla pełnej zgodności ze specyfikacją wl_shm warto użyć memfd_create + pieczęć F_SEAL_SHRINK (patrz // API-NOTE w src/shm.rs).

Licencja

MIT.