tawasuyu

tawasuyu/llimphi

Sovereign retained-mode GPU UI framework in Rust (wgpu+vello+taffy+parley), Elm loop, 40+ widgets.

Rust 660Markdown 302TOML 157RON 312382 Sutichaykuna

⎇ main widgets/rive-button/LEEME.md Markdown · 41 siq'ikuna · 1.6 KB Ñawpa willay ch'uya

chore: refresco desde el monorepo — 27 crates nuevos (anim, lottie, svg, mesh, image, layer, test, wire-view, widgets rag-sidebar/router/lazy-list/rive-button) y sync de los 95 existentes 93253cc22 · Sergio ·

1# llimphi-widget-rive-button
2
3*Read this in English: [README.md](README.md).*
4
5Botón **reactivo** dirigido por una máquina de estados estilo Rive ([`llimphi_anim::StateMachine`]).
6
7Es el primer consumidor *real* de la máquina de estados fuera del
8`llimphi-anim-studio` (que la autora) y de los examples de `llimphi-lottie`.
9Encapsula la composición canónica del demo `pointer_listeners_demo` como un
10widget reusable: tres estados —`idle` / `hover` / `press`— cada uno con su
11clip Lottie, hilados por inputs que el motor deriva del puntero crudo:
12
13- **hover** (`bool`): los listeners `Enter`/`Exit` sobre toda la superficie
14  prenden/apagan el input `hovered`; `idle ⇄ hover` con crossfade.
15- **press** (`trigger`): el host llama `RiveButton::press` desde su
16  `on_click`; dispara el trigger `pressed`, la máquina entra al estado `press`
17  (clip **no-loop**) y, al terminar el clip (`ClipDone`), vuelve a `hover` o
18  `idle` según siga el puntero encima.
19
20El widget es **stateful** (como `text-editor`/`nodegraph`): el host lo guarda
21en su `Model`, lo avanza con `advance` desde un tick periódico, le reenvía
22el puntero con `pointer` y el click con `press`, y lo pinta con `view`.
23El hit-testing vive en el motor, no en la app.
24```ignore
25// En el Model del host:
26boton: RiveButton::builtin(),
27// update:
28Msg::Tick      => m.boton.advance(DT),
29Msg::Pointer(p)=> m.boton.pointer(p),
30Msg::Click     => { m.boton.press(); /* acción del host */ }
31// view:
32m.boton.view(Msg::Pointer, Msg::Click)
33```
34`advance`: RiveButton::advance
35`pointer`: RiveButton::pointer
36`press`: RiveButton::press
37`view`: RiveButton::view
38
39---
40
41Parte de **llimphi** — ver [llimphi](../../LEEME.md).

LEEME.md

llimphi-widget-rive-button

Read this in English: README.md.

Botón reactivo dirigido por una máquina de estados estilo Rive ([llimphi_anim::StateMachine]).

Es el primer consumidor real de la máquina de estados fuera del llimphi-anim-studio (que la autora) y de los examples de llimphi-lottie. Encapsula la composición canónica del demo pointer_listeners_demo como un widget reusable: tres estados —idle / hover / press— cada uno con su clip Lottie, hilados por inputs que el motor deriva del puntero crudo:

El widget es stateful (como text-editor/nodegraph): el host lo guarda en su Model, lo avanza con advance desde un tick periódico, le reenvía el puntero con pointer y el click con press, y lo pinta con view. El hit-testing vive en el motor, no en la app.

// En el Model del host:
boton: RiveButton::builtin(),
// update:
Msg::Tick      => m.boton.advance(DT),
Msg::Pointer(p)=> m.boton.pointer(p),
Msg::Click     => { m.boton.press(); /* acción del host */ }
// view:
m.boton.view(Msg::Pointer, Msg::Click)

advance: RiveButton::advance pointer: RiveButton::pointer press: RiveButton::press view: RiveButton::view


Parte de llimphi — ver llimphi.