Dla deweloperów
Zbuduj coś na libLunie.
Jedna zależność, jedno okno, graf sceny i zestaw 77 widgetów w modelu immediate. Ta dokumentacja prowadzi od pierwszego run(...) do własnego motywu i własnego komponentu — bez GTK, Qt i GObject.
Cztery ścieżki
Nie musisz czytać wszystkiego po kolei. Wybierz to, czego potrzebujesz teraz — każda strona kończy się linkiem do następnego kroku.
Szybki start
Od cargo run do okna z reakcją na klik. Zależność, AppConfig, Frame i pierwszy rysunek.
Biblioteka widgetów
77 komponentów z prawdziwymi podglądami, kategorią, opisem i przykładem kodu do skopiowania.
Przeglądaj widgety →Motywy i tokeny
Kolory, akcenty, typografia i metryki kontrolek. Zmiana wyglądu bez przepisywania widgetów.
Zobacz tokeny →Indeks API
Przeszukiwalny spis publicznych typów, funkcji i metod z sześciu crate'ów libLuny.
Szukaj w API →Najkrótszy działający program
Tyle wystarczy, żeby otworzyć okno, narysować tło i napis. Reszta to rozwinięcie tego samego kontraktu.
use libluna::prelude::*;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let config = AppConfig::new("Moja apka").initial_size(800, 600);
run(config, |frame: &mut Frame| {
let theme = frame.theme;
let (w, h) = (frame.size.width, frame.size.height);
frame.scene.fill_rect(
Rect::from_xywh(0.0, 0.0, w, h),
theme.colors.window_bg,
);
frame.scene.text(
TextRun::new(Point::new(24.0, 64.0), "Hello, Luna", 24.0)
.with_color(theme.colors.text)
.with_weight(700),
);
})
}
Pełny przykład z obsługą zdarzeń: Szybki start → pierwsze zdarzenie.
Co jest czym
Fasada libluna zbiera sześć crate'ów w jedno wejście. Aplikacja prawie zawsze używa tylko fasady i prelude.
libluna fasada
Re-eksportuje warstwy i prelude. To jedyna zależność, jakiej potrzebuje typowa aplikacja.
libluna-core fundament
Point, Rect, Color, zdarzenia, motyw, tokeny i ustawienia wyglądu.
libluna-render rysowanie
Graf sceny, tekst, ikony SVG i backend CPU (tiny-skia + fontdue).
libluna-platform okna
Okna xdg-shell, panele wlr-layer-shell, wejście, schowek i pętla zdarzeń.
libluna-widgets komponenty
77 widgetów w modelu immediate: paint + *_at, a nad nimi retencyjny layout.
libluna-i18n języki
Pliki .lang, wykrywanie locale, tr(...) i makro t!.
Warstwy zależą tylko w dół: widgety nie wiedzą, jak działa DRM, a platforma nie wie, jak rysowany jest przycisk. Szczegóły: Architektura.
Stan na dziś
Działa: render CPU, okna Wayland, wejście, motywy jasny/ciemny/auto, 9 akcentów, i18n, layout measure/allocate, 77 widgetów i pełna powłoka Luna.
Jeszcze nie: backend GPU/dmabuf, IME, pełne HiDPI, dostępność AT-SPI. API może się zmieniać przed 0.1 — dlatego wersjonujemy każdy crate osobno.