diff --git a/docs/IRIS_EXTRACTION_HANDOFF.md b/docs/IRIS_EXTRACTION_HANDOFF.md index 0f13388..86abd5f 100644 --- a/docs/IRIS_EXTRACTION_HANDOFF.md +++ b/docs/IRIS_EXTRACTION_HANDOFF.md @@ -9,13 +9,27 @@ Canonical `main` is **`43ce8c7`** (#12, pointer routing). Fourteen slices are in. - **#16** `split/16-draw-size`, worktree `/home/bob/repos/iris-pr16`, head - `f192f75`. A widget sizes itself while drawing; `SizeCtx`, the `desired_*` - methods and the size cache are gone, and `size_dependence(axis)` drives the - retained path. `tabs`, `view` and `minimal` render byte-identical to `main`. + `9520996`. A widget sizes itself while drawing; `SizeCtx`, the `desired_*` + methods and the size cache are gone, and `on_resize(axis)` drives the + retained path. One review round answered: `Widget::draw` returns the `Size` + (no `Painter::set_size`), both `place` methods are folded back into + `widget_within`/`draw_inner`, `Painter::size_hint` records the size + dependency `place` used to, and `()` sizes itself rest so it is a gap. + `tabs` (all five tabs, and a replay that adds two images), `view` and + `minimal` render byte-identical to `upstream/main`. - **#17** `split/17-headless-rig`, worktree `/home/bob/repos/iris-pr17`, head - `9d13f15`. The compositor script, `rig-input`'s `replay-touch` and the + `deb9c1b`. The compositor script, `rig-input`'s `replay-touch` and the `.touch` parser, so a rendering claim no longer has to be checked from - ai-app's checkout. Small, and disjoint from #16. + ai-app's checkout. One review round answered: machine-specific prose out of + the comments, and `sway`/`swaymsg`/`grim` detected up front. Small, and + disjoint from #16. + +**Waiting on the owner:** whether size dependencies should be recorded per +axis. They could be, but `highest_reader`'s only trigger is `needs_redraw`, +which carries no axis, so the precision would be unusable until the trigger +changes: redraw a child first, compare its new size to the old, and propagate +only to readers of the axes that moved. Offered on #16 as its own slice, ahead +of the position chain. Check for a review before starting anything, and read the newest `submitted_at` rather than the first result: @@ -90,24 +104,13 @@ Other standing instructions from the owner: ## The next slice -**Widget draw size and measurement** (source commit `6671194`), because it -reaches furthest: `desired_width`/`desired_height` and `SizeCtx` go, a widget -sizes itself during `draw` with `painter.set_size`, and `size_hint` is the -cheap answer for a parent that needs a size without drawing. Every widget's -body changes, so anything written before it is written twice. It also deletes -the separate measurement recursion and its cache. +**Built-in alignment** โ€” see the first entry below. #16 and #17 are both +waiting on review, and the alignment slice is disjoint from either. -It is testable now that `iris::harness` is in: `tests/layout.rs` is where the -acceptance goes. - -Two things to settle with the owner before writing it. The archive's `Widget` -grows five methods โ€” `size_hint`, `is_size_independent`, `requires_exact_region`, -`access_role` and `child_order`; only the first three are sizing, and she -dislikes capability methods on the core trait, so `requires_exact_region` in -particular wants justifying (`Pad` sets it and then clears it when the content -fits, which reads as a workaround). And the archive writes all of it against -`LayoutLen` and `density`, which canonical does not have โ€” recreate it on -today's `Len` and let the dp slice follow, rather than pulling both in at once. +The archive is not a patch here: it writes `Widget::draw` against +`painter.set_size`, which #16 replaced with a returned `Size`, and it writes +lengths against `LayoutLen` and `density`, which canonical does not have. +Recreate on today's `Len` and let the dp slice follow. Still in the target, roughly in dependency order: @@ -128,8 +131,8 @@ Still in the target, roughly in dependency order: content, which otherwise has to say `Redraw` because only its own draw knows where the middle was. - Size is the harder half: a declared size beside `set_size` is two sources of - truth for one thing, so settle what each means before building it. + Size is the harder half: a declared size beside the one `draw` returns is two + sources of truth for one thing, so settle what each means before building it. - **The position chain** (LAYOUT.md ยง2): `UiData::move_offsets`, per-primitive slot ids and a bounded chain walk in WGSL, so moving a subtree writes one slot instead of every descendant's primitives.