Record explicit span orthogonal sizing
This commit is contained in:
1 parent
3a5d96a8ae
commit
7b8b43a7d2
1 file changed
+34
-16
+34
-16
@@ -8,7 +8,7 @@ log.
|
|||||||
|
|
||||||
Canonical Iris `main` is **`ca2b4b2`** (#17, the headless rig). **#18
|
Canonical Iris `main` is **`ca2b4b2`** (#17, the headless rig). **#18
|
||||||
`split/18-position-chain`** is open in `/home/bob/repos/iris-pr18`; its local
|
`split/18-position-chain`** is open in `/home/bob/repos/iris-pr18`; its local
|
||||||
head is **`29c7881`**, forty-five commits, pushed to the fork. No PR reviews
|
head is **`f437495`**, forty-six commits, pushed to the fork. No PR reviews
|
||||||
were present when checked on 2026-09-15; the verification summary is posted on
|
were present when checked on 2026-09-15; the verification summary is posted on
|
||||||
the PR.
|
the PR.
|
||||||
|
|
||||||
@@ -17,14 +17,27 @@ The current head completes LAYOUT.md §2's position chain and the requested
|
|||||||
nothing is left. A child that also asks for pixels or a relative fraction keeps
|
nothing is left. A child that also asks for pixels or a relative fraction keeps
|
||||||
that part and overflows as before.
|
that part and overflows as before.
|
||||||
|
|
||||||
The last commit replaces the parallel resize rules with one retained-layout
|
`29c7881` replaces the parallel resize rules with one retained-layout contract,
|
||||||
contract, `Holds`: the interval of box lengths for which a widget's drawing and
|
`Holds`: the interval of box lengths for which a widget's drawing and reported
|
||||||
reported size stay valid. Reading `Painter::px_len` or `px_size` narrows the
|
size stay valid. Reading `Painter::px_len` or `px_size` narrows the interval to
|
||||||
interval to the length read; `Painter::holds` lets the widget widen it. Parent
|
the length read; `Painter::holds` lets the widget widen it. Parent validity is
|
||||||
validity is the intersection of the ranges its children induce. This contract
|
the intersection of the ranges its children induce. This contract is trusted.
|
||||||
is trusted. A widget that declares an incorrect range is a defective widget;
|
A widget that declares an incorrect range is a defective widget; Iris does not
|
||||||
Iris does not add defensive work to recover optimizations from a false
|
add defensive work to recover optimizations from a false declaration.
|
||||||
declaration.
|
|
||||||
|
`f437495` restores explicit `Span::ortho(OrthoSize::{Children, Full})` sizing.
|
||||||
|
`Children` remains the default and preserves the old conservative behavior:
|
||||||
|
the largest fixed orthogonal length is reported, while any relative or
|
||||||
|
`leftover` child makes the span report `leftover`. `Full` reports exactly
|
||||||
|
`Len::rel(1.0)`. It does not read the children's orthogonal sizes, but their
|
||||||
|
`Holds` ranges still propagate through placement, so a resize repositions them
|
||||||
|
without redrawing when their own contracts permit it.
|
||||||
|
|
||||||
|
Do not change `Children` to select the pixel-longest arbitrary `Len` at the
|
||||||
|
span's current width. A fixed child and a relative child can create multiple
|
||||||
|
self-sizing fixed points; generated seed 13 settled differently warm and cold
|
||||||
|
under that attempted implementation. A `Holds` interval says where an already
|
||||||
|
chosen answer stays valid, but cannot make that circular choice unique.
|
||||||
|
|
||||||
The implementation also fixes three counterexamples found while finishing the
|
The implementation also fixes three counterexamples found while finishing the
|
||||||
rewrite:
|
rewrite:
|
||||||
@@ -43,22 +56,27 @@ rewrite:
|
|||||||
`core/src/ui/holds.rs`, the retained tests, and the generated cold-layout oracle
|
`core/src/ui/holds.rs`, the retained tests, and the generated cold-layout oracle
|
||||||
pin those rules. Seeds 10 and 86 are now in the ordinary generated set.
|
pin those rules. Seeds 10 and 86 are now in the ordinary generated set.
|
||||||
|
|
||||||
## Verification at `29c7881`
|
## Verification at `f437495`
|
||||||
|
|
||||||
- `cargo fmt --all --check`
|
- `cargo fmt --all --check`
|
||||||
- `cargo clippy --workspace --all-targets --all-features -- -D warnings`
|
- `cargo clippy --workspace --all-targets --all-features -- -D warnings`
|
||||||
- `cargo test --workspace`: 74 passed, 8 ignored
|
- `cargo test --workspace`: 77 passed, 8 ignored
|
||||||
- `cargo test --release --test generated -- --ignored
|
- `cargo test --release --test generated -- --ignored
|
||||||
a_long_run_of_seeds_agrees`: 100 seeds passed in 65.63 s
|
a_long_run_of_seeds_agrees`: 100 seeds passed in 66.81 s
|
||||||
- Reference renders against `/home/bob/repos/iris-main-cmp` at `ca2b4b2`:
|
- The `tabs` reference at 900x1200 remained byte-identical to `ca2b4b2` after
|
||||||
|
retaining `Children` as the default.
|
||||||
|
- At preceding head `29c7881`, reference renders against
|
||||||
|
`/home/bob/repos/iris-main-cmp` at `ca2b4b2` covered:
|
||||||
`tabs`, `view`, `minimal`, and `text` at 1920x1200; `tabs` cold at
|
`tabs`, `view`, `minimal`, and `text` at 1920x1200; `tabs` cold at
|
||||||
900x1200; live resize from 1920x1200 to 900x1200; and the tab interaction
|
900x1200; live resize from 1920x1200 to 900x1200; and the tab interaction
|
||||||
before and after replay. Every comparison had zero differing pixels. The
|
before and after replay. Every comparison had zero differing pixels. The
|
||||||
live-resize image is also byte-identical to the cold 900x1200 image.
|
live-resize image is also byte-identical to the cold 900x1200 image.
|
||||||
|
|
||||||
The final pre-submit review was run in four passes. It caught the retained
|
The final pre-submit review was run in four passes. The earlier retained-layout
|
||||||
layer defect above, corrected validity-range inversion for negative relative
|
review caught the layer defect above, corrected validity-range inversion for
|
||||||
extents, and removed an impossible-state `unwrap` from `Scroll`.
|
negative relative extents, and removed an impossible-state `unwrap` from
|
||||||
|
`Scroll`. The orthogonal-sizing review caught both the circular longest-child
|
||||||
|
choice and the incompatible visual effect of making `Full` the default.
|
||||||
|
|
||||||
### Performance
|
### Performance
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user