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
+7 -10
View File
@@ -917,17 +917,14 @@ capturing the primary display (which causes the infinity mirror effect).
8. ✅ Preview shows live web content (not just a blank rectangle)
9. ☐ Handle navigation errors, invalid URIs, timeout gracefully
**Rendering model (2026-08-28, canvas-size viewport + wrapper-safe content-rect crop):**
**Rendering model (2026-08-28, canvas-size viewport, NO crop — the only creator-verified state):**
the page renders at the MASTER CANVAS size (1920×1080), stable, never tracked (no reflow/truncation;
scrollbars suppressed via `overflow:hidden`). After each navigation the manager measures the WIDGET
rect — union of every visible element's `getBoundingClientRect`, EXCLUDING elements that span
≥98% of the viewport (bodies, full-canvas background/overlay layers are layout wrappers, not
content; full-bleed widgets fall back to the full rect) — and crops the capture AT that rect's
top-left (l,t), pinning the widget to the bitmap's (0,0). `Stretch="Fill"` (+ explicit `Margin=0`,
Left/Top alignment) maps the frame flush under the box: the selection box bounds the widget tight
on all four sides, no dead space. ⚠️ `ExecuteScriptAsync` JSON-encodes the returned value — the
script must return a real OBJECT (not `JSON.stringify`, which double-encodes → parse exception →
crop silently skipped). Graceful-error handling (item 9) is a follow-up.
scrollbars suppressed via `overflow:hidden`). Capture is the FULL frame; `Stretch="Fill"` maps it
under the box. Image rendering verified good ("renders and resizes beautifully"). WEB BOX DEAD SPACE
STILL OPEN: previous cropping attempts all failed (JSON double-encode silently disabled the crop;
scrollWidth returns the full canvas for full-canvas wrappers; content-union measured an unsettled
layout on NavigationCompleted and BROKE the image). Any further crop needs creator approval first.
⚠️ `ExecuteScriptAsync` JSON-encodes the returned value — never return `JSON.stringify` from script.
**Properties panel (2026-08-28):** web URI ✓/✕ icon buttons are `IsTabStop="False"` so Tab flows
X→Y→W→H→URI; the ✕ button now clears the URI textbox (was reverting to the pre-accept snapshot).