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łaTITLEBAR_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.22jest budowany w edition 2024 i wymaga nowegorustc(≈ 1.85+). Jeśli masz starszy kompilator, wCargo.tomlzejdź docairo-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_shmwarto użyćmemfd_create+ pieczęćF_SEAL_SHRINK(patrz// API-NOTEwsrc/shm.rs).
Licencja
MIT.