Revert web render to the creator-verified-good base (70fe2b8): full-frame capture, no crop, plain Stretch=Fill

The wrapper-excluded content-union crop measured an unsettled layout on NavigationCompleted
(async fonts/images, load animations) and produced a broken/zoomed sliver — the image was gone.
Restoring the exact confirmed-good pipeline; the bounding-box dead-space problem stays open and
will not be touched without explicit approval.
This commit is contained in:
2026-08-28 11:49:21 -07:00
parent a5b9952cbd
commit 5348b5c480
4 changed files with 31 additions and 85 deletions
+11 -14
View File
@@ -31,18 +31,15 @@ Stream widget bounding box: hug the widget on all four sides, pinned to canvas (
extents regardless. Lesson: verify declared mechanics actually execute; assume nothing ran.
## Current iteration (web bounding box — UNCOMMITTED, verification pending)
Render stays the confirmed-solid 1920×1080 canvas-size viewport + `Stretch="Fill"` (UNTOUCHED).
Crop now uses the WIDGET rect, not scroll extents: union of every visible element's
`getBoundingClientRect`, EXCLUDING elements spanning ≥98% of the viewport (bodies,
full-canvas background layers — they are wrappers, not content). Crop is taken AT the
rect's top-left (l,t) so content pins to bitmap (0,0). Web Image explicitly
`Margin="0"` + `HorizontalAlignment="Left"`/`VerticalAlignment="Top"`.
RENDER RESTORED to the last creator-verified-good state (`70fe2b8`): full-frame capture (no crop),
1920×1080 canvas-size viewport, plain `Stretch="Fill"`. Image rendering is back to "renders and
resizes beautifully". The bounding-box dead-space problem is STILL OPEN — do NOT reintroduce any
crop until the creator explicitly approves the approach.
## Iteration that just failed (`b862a0f` — reverted to f39ebd9's scrollWidth/Height crop)
Creator still saw a massive "ghost" frame around the visible widget. Root cause: for widgets
whose body/background spans the full 1920×1080 canvas, `scrollWidth/scrollHeight` returns the
WHOLE viewport → the crop keeps massive transparent margins → dead space inside the bitmap →
content floats inside the Fill-stretched box. So the earlier "nailed right/bottom" (f39ebd9) was
only right for box-sized viewports: at the canvas size, scroll extents == viewport for full-canvas
wrappers. Lesson: never trust scrollWidth/scrollHeight at canvas-size render; measure visible
content and exclude full-viewport wrappers/backgrounds.
## Iteration that just failed (`a5b9952` — wrapper-excluded content-union crop + image alignment)
Broke the image rendering — creator could not evaluate the box because the image was gone/ruined.
Why: the visible-element-union rect is measured ONCE on NavigationCompleted; widget layout isn't
settled then (async fonts/images, load animations, iframes), so the crop rect comes out tiny/wrong
and the Fill-stretched frame renders a broken/zoomed sliver. This was against the creator's explicit
"don't break the rendering" instruction. Lesson: the canvas-size render + Fill is the ONLY verified
good base; any crop must be built on it one tested step at a time, never shipped blind.