feat(mirada): puntero/ratón en el backend DRM del compositor

El backend DRM del Cuerpo deja de ser sólo-teclado: `libinput` ahora
mueve un cursor de software y reenvía clics y rueda a los clientes.

- Enum `Frame` (vía `render_elements!`) que mezcla superficies de
  cliente y un `SolidColorRenderElement` para el cursor, marcado
  `Kind::Cursor` y compuesto encima de todo.
- `handle_input` atiende `PointerMotion`/`PointerMotionAbsolute`/
  `PointerButton`/`PointerAxis`; el puntero se acota a la salida.
- Foco-sigue-ratón: `window_at` hace el test de impacto (flotantes
  sobre teseladas, contra el rectángulo real de la superficie) y, al
  cambiar de ventana, emite `BodyEvent::PointerEntered`.
- `surface_px_size` en main.rs — tamaño presentado de una superficie,
  reusado por el test de impacto.

Compila + clippy limpio; pendiente de verificar en hardware.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
sergio
2026-05-21 03:24:14 +00:00
parent 5230d42b11
commit b4ddab9c06
5 changed files with 255 additions and 56 deletions
+7 -3
View File
@@ -195,14 +195,18 @@ Cerebro: **autónomo** (`Desktop` embebido) o **enlazado** (`MIRADA_SOCKET`
- **`winit`** — corre anidado, una ventana en la sesión gráfica actual.
- **`drm`** (`drm_backend.rs`) — corre nativo sobre una TTY, sin sesión
anfitriona: `libseat` (sesión), `udev` (GPU), `DrmDevice` + GBM + EGL +
`DrmCompositor`, `libinput` (teclado), bucle `calloop`. Verificado en
hardware: sesión, render, teclado, atajos, clientes, salida limpia.
`DrmCompositor`, `libinput` (teclado y ratón), bucle `calloop`.
Verificado en hardware: sesión, render, teclado, atajos, clientes,
salida limpia. El ratón pinta un cursor de software (un
`SolidColorRenderElement` marcado `Kind::Cursor`, encima de todo en un
enum `Frame` de elementos de render); el foco sigue al puntero
(`BodyEvent::PointerEntered`) y clics y rueda van a la ventana debajo.
**Pendiente** — refinamientos del Cuerpo:
| capa pendiente | rol |
| ---------------- | ------------------------------------------------------------ |
| puntero en `drm` | ratón/touchpad por `libinput` (hoy el backend DRM sólo teclado) |
| puntero en `winit` | ratón en el backend anidado (hoy sólo el backend DRM) |
| `mirada-input` | repetición de teclas, gestos; conmutación de VT, hotplug |
| `mirada-sandbox` | aislamiento de clientes sobre `arje-incarnate` |