🔒 Repository is read-only – file editing is disabled.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
//! 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();
}