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

PaganDE/pagan-compositor/src/main.rs main

82 linii Raw ← Powrót
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();
}