feat(renaser): Fase 13 — ratón, puntero y arrastre de flotantes
renaser dialogaba sólo con el teclado; las ventanas flotantes nacían en cascada y allí se quedaban. La Fase 13 trae el ratón. - Driver `drivers/raton`: el ratón PS/2 cuelga del dispositivo auxiliar del 8042 + IRQ12. El driver despierta el aux, programa su IRQ, le ordena reportar, ensambla paquetes de 3 bytes con guarda del bit-3. Posición como atómicos, eventos como cola lock-free — el mismo guardarraíl que el teclado. - El puntero, capa de PRESENTACIÓN: `Pantalla::estampar_puntero` pinta un sprite de flecha 12×18 sobre el framebuffer después de copiar el lienzo. El lienzo nunca lo contiene — hace de save-under natural—. - Compositor: `atender_raton` drena eventos. Botón bajando es un clic-para-enfocar consistente con `mover_foco` (silencia bocina, alza si flota). Si la enfocada flota, arranca un arrastre con el desfase de agarre; el botón sostenido la sigue al puntero; al soltar, termina. - `refrescar_puntero` reestampa el framebuffer si el puntero se movió en una vuelta tranquila en que ninguna app pintó. Verificado en QEMU (mouse_move / mouse_button del monitor): el puntero aparece al arrancar, se mueve por la pantalla, un clic sobre pulso le da el foco, y un arrastre con el botón sostenido mueve la flotante de la cascada al centro-abajo. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -906,3 +906,43 @@ capacidades. Hasta hoy renaser sólo sabía DIBUJAR para llamar la atención.
|
||||
pcspk-audiodev`), el PCM capturado —50 s— es una onda cuadrada oscilante de
|
||||
±24 000 de amplitud, con una frecuencia media de ~375 Hz: la de la escala de
|
||||
Do mayor.
|
||||
|
||||
## Fase 13 — Ratón, puntero y arrastre de flotantes — 2026-05-22
|
||||
|
||||
renaser tenía teclado y bocina como entrada/salida del usuario, pero no
|
||||
puntero. Las ventanas flotantes de la Fase 9 nacían en cascada y se quedaban
|
||||
ahí, clavadas. La Fase 13 trae el ratón: un puntero en pantalla, clic-para-
|
||||
enfocar y arrastre del marco de las ventanas flotantes.
|
||||
|
||||
### Añadido
|
||||
- **Driver `drivers/raton`** — el ratón PS/2 cuelga del dispositivo auxiliar
|
||||
del 8042 (la misma controladora que el teclado) y anuncia cada movimiento
|
||||
por la IRQ12. El driver despierta el aux, enciende su IRQ, le ordena
|
||||
reportar, y ensambla los paquetes de 3 bytes con la guarda del bit-3 que
|
||||
detecta desincronización. Como el teclado, la IRQ12 sólo toca atómicos
|
||||
—posición del puntero— y una cola lock-free de eventos.
|
||||
- **El puntero, capa de presentación.** `Pantalla` gana `formato` y la
|
||||
función `estampar_puntero`: un sprite de flecha de 12×18 que se pinta
|
||||
DIRECTAMENTE sobre el framebuffer, justo después de copiar el lienzo. El
|
||||
lienzo permanece libre de puntero —hace de save-under natural—; cada
|
||||
`presentar` sella el puntero al final.
|
||||
- **Capacidad del compositor**: `atender_raton` drena eventos del ratón cada
|
||||
fotograma. El botón izquierdo bajando es un CLIC: enfoca la ventana viva
|
||||
bajo el puntero (consistente con `mover_foco` — silencia la bocina, alza al
|
||||
frente si flota). Si la enfocada es flotante, arranca un ARRASTRE con el
|
||||
desfase de agarre; con el botón sostenido, la ventana sigue al puntero;
|
||||
soltarlo lo termina.
|
||||
- **`refrescar_puntero`**: en una vuelta tranquila en que ninguna app pinte,
|
||||
reestampa el framebuffer si el puntero se ha movido — el centinela
|
||||
empacado evita repintar dos veces el mismo instante.
|
||||
- `Escritorio` gana `arrastre: Option<Arrastre>` y `raton_izq: bool`.
|
||||
`Arrastre` guarda el índice de la ventana asida y el desfase de agarre.
|
||||
`cerrar` libera el arrastre si la ventana cerrada era la arrastrada.
|
||||
|
||||
### Verificado
|
||||
- QEMU (`mouse_move` + `mouse_button` del monitor). El puntero aparece en el
|
||||
centro al arrancar; `mouse_move` lo lleva por la pantalla. Clic sobre la
|
||||
ventana `pulso` (en la pila) la enfoca: el borde índigo deja la maestra y
|
||||
envuelve a `pulso`. `Alt+F` la flota; el ratón la agarra y la arrastra de
|
||||
la esquina superior izquierda al centro-abajo de la pantalla con el botón
|
||||
sostenido. El kernel sigue estable a través de los gestos.
|
||||
|
||||
Reference in New Issue
Block a user