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.