tawasuyu

tawasuyu/llimphi

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

Rust 660Markdown 302TOML 157RON 312382 Definitions

⎇ main widgets/timeline/LEEME.md Markdown · 29 lines · 1.0 KB History raw

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-timeline
2
3*Read this in English: [README.md](README.md).*
4
5Barra de progreso/scrub clickeable.
6
7Pattern análogo a `llimphi-widget-slider`/`-progress`: el widget **no
8mantiene estado**. El caller guarda la posición actual en su `Model`,
9le pasa la **fracción de avance** (`0.0..=1.0` = posición/duración) y un
10handler `Fn(f32) -> Option<Msg>` que recibe la fracción **donde el
11usuario clickeó** (scrub absoluto, estilo VLC). El widget no sabe de
12tiempo ni de duración: sólo pinta el avance y reporta dónde se clickeó
13como fracción del ancho de la barra (`on_click_at`). Quien mapea esa
14fracción a un seek concreto es la app.
15```text
16  [ ██████████▏░░░░░░░░░░░░ ]
17       recorrido  playhead   resto
18```
19Uso típico (reproductor):
20```ignore
21let frac = pos.as_secs_f64() / dur.as_secs_f64();
22timeline_view(frac as f32, &TimelinePalette::default(), |f| {
23    Some(Msg::Command(MediaCommand::SeekTo { fraction: f }))
24})
25```
26
27---
28
29Parte de **llimphi** — ver [llimphi](../../LEEME.md).

LEEME.md

llimphi-widget-timeline

Read this in English: README.md.

Barra de progreso/scrub clickeable.

Pattern análogo a llimphi-widget-slider/-progress: el widget no mantiene estado. El caller guarda la posición actual en su Model, le pasa la fracción de avance (0.0..=1.0 = posición/duración) y un handler Fn(f32) -> Option<Msg> que recibe la fracción donde el usuario clickeó (scrub absoluto, estilo VLC). El widget no sabe de tiempo ni de duración: sólo pinta el avance y reporta dónde se clickeó como fracción del ancho de la barra (on_click_at). Quien mapea esa fracción a un seek concreto es la app.

  [ ██████████▏░░░░░░░░░░░░ ]
       recorrido  playhead   resto

Uso típico (reproductor):

let frac = pos.as_secs_f64() / dur.as_secs_f64();
timeline_view(frac as f32, &TimelinePalette::default(), |f| {
    Some(Msg::Command(MediaCommand::SeekTo { fraction: f }))
})

Parte de llimphi — ver llimphi.