🎉 Phase 6.3 — display + input + compositor-core intégrés runtime
Captures preuves dans docs/phase6-3-*.png : 4 frames qui prouvent
visuellement que raise change l'ordre Z et que compose_into propage le
résultat à l'écran QEMU :
- default-z.png : 3 surfaces overlap, blue top (créé en dernier)
- red-top.png : sendkey 1 → raise(red) → red couvre vert et bleu
- green-top.png : sendkey 2 → raise(green) → green couvre tout dans sa zone
- blue-top.png : sendkey 3 → raise(blue) → retour visuel à initial
Modifications :
compositor-core (commit dbf3bff → maintenant) :
- + iter_z_order_front_to_back() : utile pour hit testing
- + hit_test(x, y) -> Option<SurfaceId> : trouve la surface visible la
plus haute qui contient le point
- + 4 tests unitaires : 27 total / 27 pass natif (0.00s)
redox-wl-display :
- + dep redox-wl-compositor-core
- + impl Framebuffer for RedoxOutput (délègue à pixels_mut + width/height)
bin redox-wl-test-compose-static (190 lignes) :
- ouvre RedoxOutput + take_crtc
- crée InputBackend partagé
- 3 surfaces ARGB unies (rouge/vert/bleu) avec overlap centré
- boucle event : '1'/'2'/'3' raise resp. red/green/blue
- clic souris → hit_test puis raise (motion non testé sans usb-tablet)
- ré-render seulement si raise → économie CPU
- present_with_takeover() à chaque iter pour tenir le CRTC
Validation QEMU automatisée : sendkey 1/2/3 + screendump entre chaque.
Les 4 PNG montrent l'ordre Z évoluer correctement.
Image Redox restaurée à boot Orbital normal.
docs/phase6-compositor-core.md : compte-rendu 6.1-6.3 complet,
architecture, dépendances, API, limitations, plan 6.4.
Phase 6.3 close. Reste 6.4 (frontend Wayland : wl_compositor + wl_shm
+ xdg-shell mappés vers compositor-core, damage tracking, frame
callbacks). Estimé 2-3 sessions.
Leyoda 2026 – GPLv3
This commit is contained in:
parent
dbf3bffa2b
commit
509aae7769
10 changed files with 608 additions and 0 deletions
|
|
@ -236,6 +236,23 @@ fn libredox_call_fpath(fd: usize, buf: &mut [u8]) -> io::Result<usize> {
|
|||
libredox::call::fpath(fd, buf).map_err(|e| io::Error::from_raw_os_error(e.errno()))
|
||||
}
|
||||
|
||||
/// Implémentation du trait `Framebuffer` de `compositor-core`. Permet à
|
||||
/// `SurfaceRegistry::compose_into(&mut output)` de copier ses surfaces
|
||||
/// directement dans le buffer ARGB du display Redox.
|
||||
impl redox_wl_compositor_core::Framebuffer for RedoxOutput {
|
||||
fn width(&self) -> u32 {
|
||||
RedoxOutput::width(self)
|
||||
}
|
||||
fn height(&self) -> u32 {
|
||||
RedoxOutput::height(self)
|
||||
}
|
||||
fn pixels_mut(&mut self) -> &mut [u32] {
|
||||
// Délègue à la méthode existante. Panic si CRTC pas pris,
|
||||
// ce qui est cohérent avec l'usage normal (compose après take_crtc).
|
||||
RedoxOutput::pixels_mut(self).expect("Framebuffer::pixels_mut: CRTC not taken")
|
||||
}
|
||||
}
|
||||
|
||||
impl Drop for RedoxOutput {
|
||||
fn drop(&mut self) {
|
||||
if let Some(fb) = self.fb.take() {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue