Catálogo de efectos
Efectos de frame integrados que distribuye este repositorio. Todos ellos
implementan el contrato de xtop-effect-api (ver docs/write-effect.md
para la guía de autoría y el contrato del host). El catálogo es aditivo: un
crate por efecto, una fila por efecto.
Fade (xtop-effect-fade, id del manifest fade)
El efecto de fundido de entrada. Tipo: xtop_effect_fade::FadeEffect — un
struct unit sin estado y sin configuración de ningún tipo.
Cómo se ve
Fade toma el frame totalmente renderizado de un tick y funde su contenido RGB
desde negro. Durante la ventana, cada primer plano y fondo Color::Rgb se
escala hacia negro; los colores que no son RGB (Color::Reset, indexados,
escala de grises) y todos los modificadores de celda nunca se tocan.
elapsed == 0: todos los canales RGB están a cero — el frame es negro donde los widgets pintaron colores RGB.elapsedestrictamente entre 0 y la ventana: cada canal RGB se sitúa enround(channel * alpha)conalpha = elapsed / 500 ms.elapsed >= 500 ms: intensidad completa.
En un terminal con fondo oscuro por defecto esto se lee como el frame entero
fundiéndose desde negro durante medio segundo. Con un fondo claro por
defecto, el fondo Color::Reset (por ejemplo el espacio vacío entre el
texto) es visible de inmediato, mientras que el texto y los fondos RGB
todavía suben desde negro.
Semántica exacta de la ventana
- Ventana: exactamente
FADE_DURATION = 500 ms(unaconstdel crate), medida desde el momento en que el efecto empezó, es decir, desde el valorelapsedque el host pasa en cada frame. - El efecto no conserva estado de progreso: es una función pura del buffer
del frame y de
elapsed, así que nunca se desvía con el ritmo de frames ni con el jitter del tick. - Garantía de determinismo: una vez que
elapsed >= FADE_DURATION,Effect::on_framevuelve sin escribir una sola celda. Cada frame posterior es byte-idéntico al buffer renderizado por el host, mientras el efecto siga activo — las llamadas repetidas son estables, y el buffer puede compararse celda por celda (el conjunto de tests lo demuestra).
Testing
El conjunto de pruebas de xtop-effect-fade cubre: identidad de bytes al final de la ventana,
atenuación con elapsed cero (las celdas RGB atenuadas, las celdas
Color::Reset/indexadas intactas), monotonía estricta en el punto medio del
fundido, metadatos del manifest estables, llamadas repetidas después de la
ventana y buffers vacíos.
Nota de integración
El kernel (repo xtop) cablea los efectos integrados en su pipeline de
renderizado detrás de una feature opcional effects (ROADMAP del ecosistema
M5.3, entregado con el hito del kernel): la closure de dibujo aplica el
on_frame del efecto activo al buffer después del layout y antes del flush
del terminal, pasando el tiempo transcurrido desde que el efecto empezó.
Hasta que ese cableado aterrice, este repositorio compila y hace test de
forma independiente contra el crate de contrato xtop-effect-api; nada de
aquí depende del kernel.