feat(mirada): el cursor toma la forma que pide el cliente
El cursor dejaba de ser un cuadrado fijo. Ahora honra `wl_pointer.set_cursor`: sobre el texto de una terminal sale la «I», sobre un enlace la mano, etc. — la forma la dibuja el cliente en una superficie y el compositor la compone. - `App` guarda un `cursor_status: CursorImageStatus`; el handler `SeatHandler::cursor_image` lo actualiza. - `render()` lo interpreta: `Surface` → compone el árbol de la superficie del cursor en `pointer_loc - hotspot` (helper `cursor_hotspot`, vía `CursorImageSurfaceData`); `Named` o sin tema → el cuadrado de siempre; `Hidden` → nada. - Sobre el escritorio pelado (sin cliente debajo) el cursor vuelve al de por defecto, para que no se quede con la «I» de la última ventana. - La superficie del cursor también recibe frame-callbacks (cursores animados). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -204,10 +204,11 @@ Cerebro: **autónomo** (`Desktop` embebido) o **enlazado** (`MIRADA_SOCKET`
|
||||
anfitriona: `libseat` (sesión), `udev` (GPU), `DrmDevice` + GBM + EGL +
|
||||
`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.
|
||||
salida limpia. El ratón: el cursor toma la superficie que pide el
|
||||
cliente (`wl_pointer.set_cursor` → `cursor_image`) y cae a un cuadrado
|
||||
(`SolidColorRenderElement` `Kind::Cursor`) por defecto; el foco sigue
|
||||
al puntero (`BodyEvent::PointerEntered`) y clics y rueda van a la
|
||||
ventana debajo. Todo en un enum `Frame` de elementos de render.
|
||||
`Super`+arrastre mueve/redimensiona: el Cuerpo calcula el rectángulo y
|
||||
emite `BodyEvent::WindowFloatTo { id, rect }`; el Cerebro hace flotar
|
||||
la ventana ahí (`Workspace::set_floating`). Cada ventana lleva un marco
|
||||
|
||||
Reference in New Issue
Block a user