tawasuyu

tawasuyu/llimphi

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

Rust 229TOML 101Markdown 82Shell 24052 Definiciones

⎇ main widgets/fitted-box/LEEME.md Markdown · 40 líneas · 1.5 KB Historia crudo

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-fitted-box
2
3*Read this in English: [README.md](README.md).*
4
5Escala un subárbol al slot disponible.
6
7Análogo a `FittedBox` de Flutter: el caller le pasa el **tamaño
8natural** del contenido y una **política de fit**, y el widget aplica
9un `transform` afín al subárbol para que entre en el slot real
10(medido por el seam `LayoutBuilder` del compositor). El subárbol
11queda **centrado** y, salvo `BoxFit::Fill`, **preserva su aspect
12ratio**.
13
14Por qué no sale solo: `taffy` dimensiona contenedores, pero el
15contenido (texto, imagen, painter custom) no escala con su contenedor
16— sólo se posiciona dentro. `FittedBox` aplica un escalado VISUAL
17sobre el subárbol completo, así un canvas `paint_with` o un texto
18grande caben en una celda chiquita sin que el caller los re-mida.
19
20El padre del widget tiene `clip(true)` para que ningún píxel se salga
21del slot (sólo importa cuando el aspect del contenido NO coincide con
22el slot bajo `BoxFit::None`, o nunca con `Contain`/`Fill`).
23
24## API
25```ignore
26use llimphi_widget_fitted_box::{fitted_box, BoxFit};
27// Una imagen 800×600 que tiene que caber en cualquier slot, preservando
28// aspect (mostrar entera, posibles bandas).
29fitted_box((800.0, 600.0), BoxFit::Contain, || my_image_view())
30```
31## Funciones puras
32
33`compute_fit` devuelve `(sx, sy, dx, dy)` para un `(slot, inner,
34fit)` dado y es testeable sin runtime. Útil para validar el algoritmo
35y para casos donde el caller ya tiene una transformación propia que
36quiere componer.
37
38---
39
40Parte de **llimphi** — ver [llimphi](../../LEEME.md).

LEEME.md

llimphi-widget-fitted-box

Read this in English: README.md.

Escala un subárbol al slot disponible.

Análogo a FittedBox de Flutter: el caller le pasa el tamaño natural del contenido y una política de fit, y el widget aplica un transform afín al subárbol para que entre en el slot real (medido por el seam LayoutBuilder del compositor). El subárbol queda centrado y, salvo BoxFit::Fill, preserva su aspect ratio.

Por qué no sale solo: taffy dimensiona contenedores, pero el contenido (texto, imagen, painter custom) no escala con su contenedor — sólo se posiciona dentro. FittedBox aplica un escalado VISUAL sobre el subárbol completo, así un canvas paint_with o un texto grande caben en una celda chiquita sin que el caller los re-mida.

El padre del widget tiene clip(true) para que ningún píxel se salga del slot (sólo importa cuando el aspect del contenido NO coincide con el slot bajo BoxFit::None, o nunca con Contain/Fill).

API

use llimphi_widget_fitted_box::{fitted_box, BoxFit};
// Una imagen 800×600 que tiene que caber en cualquier slot, preservando
// aspect (mostrar entera, posibles bandas).
fitted_box((800.0, 600.0), BoxFit::Contain, || my_image_view())

Funciones puras

compute_fit devuelve (sx, sy, dx, dy) para un (slot, inner, fit) dado y es testeable sin runtime. Útil para validar el algoritmo y para casos donde el caller ya tiene una transformación propia que quiere componer.


Parte de llimphi — ver llimphi.