//! PaganDE — kompozytor Wayland (floating, wymuszone dekoracje SSD) na Smithay 0.7. //! //! Wejście programu. Obsługujemy tylko backend developmentowy (winit); backend //! produkcyjny (tty-udev) jest zaplanowany i opisany w README. //! //! Modularność (wymóg projektu): //! - `state` – stan kompozytora + handlery protokołów, //! - `window` – reprezentacja okna w przestrzeni (z dekoracją SSD), //! - `input` – polityka myszy/klawiatury i Z-order, //! - `grabs` – przeciąganie i zmiana rozmiaru, //! - `render` – budowa elementów i rysowanie klatki, //! - `theme` – motyw (kolory tła/paska/kursora) z natychmiastowym przeładowaniem, //! - `focus` – cele fokusa (mysz/klawiatura), //! - `shaders` – wbudowane shadery GLSL (zaokrąglone prostokąty). mod app_menu; mod cursor; mod focus; mod foreign_toplevel; mod grabs; mod icons; mod input; mod output; mod render; mod screencopy; mod shaders; mod snap; mod state; mod text; mod theme; mod window; mod winit; mod xwayland; #[cfg(feature = "udev")] mod udev; use tracing::{error, info}; use tracing_subscriber::EnvFilter; fn main() -> anyhow::Result<()> { init_logging(); // Odnotowujemy, że shadery są wkompilowane (dotyka stałych, żeby nie były // martwym kodem; pełne podłączenie do potoku GL to kolejny krok). info!( rounded_corners_frag = shaders::ROUNDED_CORNERS_FRAG.len(), "Wbudowane shadery GLSL dostępne" ); match std::env::args().nth(1).as_deref() { Some("--winit") | None => winit::run_winit(), Some("--tty-udev") => { #[cfg(feature = "udev")] { udev::run_udev() } #[cfg(not(feature = "udev"))] { error!( "Backend tty-udev nie jest wkompilowany. Zbuduj z \"--features udev\" \ i upewnij się, że masz libdrm, libgbm, libinput, libudev oraz libseat." ); Ok(()) } } Some(other) => { error!("Nieznany backend: {other}. Dostępne: --winit, --tty-udev"); Ok(()) } } } /// Inicjalizuje logowanie. Poziom sterujemy przez `RUST_LOG`, np. /// `RUST_LOG=pagan_compositor=debug`. fn init_logging() { let filter = EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new("info")); tracing_subscriber::fmt() .compact() .with_env_filter(filter) .init(); }