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.