Files
LlamaCasty/MyMistakes.md
T
gramps 9b56e88800 Revert ab29ec8: container==content auto-fit made it worse — back to alpha-crop with the container at element size
The container tracks the element's own Width/Height again; the crop stays in the bitmap.
2026-08-28 12:09:13 -07:00

47 lines
3.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# MyMistakes.md
> One task at a time. Updated before every commit touching that task: current iteration +
> why the last one failed. On task complete, committed AND pushed → truncate to this stub.
> A new task does NOT seed this file until its first failure.
## Task (active — committed `582d1f4`, NOT pushed, awaiting creator verification)
Stream widget bounding box: hug the widget on all four sides, pinned to canvas (0,0).
## Iterations that failed
1. **e917c41 — fixed 1920×1080 viewport + `Stretch="Uniform"` + startup registration.**
Failed: `Uniform` letterboxed the 16:9 canvas into arbitrary‑sized boxes → asymmetric dead
padding read as a "gap". Lesson: Fill the box with the cropped frame, never Uniform.
2. **9d4103c — per‑document CSS reset (`html/body` width/height 100%) + (0,0) anchor.**
Failed ("enlarged the gap"): forcing dimensions overrode the widget's own layout and expanded
the dead space. Lesson: inject only `overflow:hidden` + transparent background — never set sizes.
3. **8d793af — viewport == element‑box size + `Stretch="Fill"`.**
Failed (janky / truncating / scrollbars): hosting at the box size clips full‑bleed widgets to
their upper‑left chunk, and tracking the box reflows the page on drag. Lesson: render at a
fixed canvas size, never track the box.
4. **f39ebd9 — crop capture to `scrollWidth/scrollHeight` bounds + (0,0) + Fill.**
Partially passed (panel fixes 1a/1b/4 confirmed) but the box stayed loose; the apparent
"tight right/bottom" was just the small‑viewport clip edge. **ROOT CAUSE: the crop never ran.**
The script returned `JSON.stringify(...)` (a string); `ExecuteScriptAsync` JSON‑encodes every
result, so the JSON was double‑encoded → `JsonDocument.Parse` got a string node →
`GetProperty` threw → try/catch swallowed → bounds unset → no crop. Lesson: return a real JS
object, never a stringified one. Also: scroll extents ≠ widget rect (they include page margins).
5. **70fe2b8 — fixed canvas‑size viewport (1920×1080) + crop + Fill.**
Image render/resize became solid (creator confirmed) but the box still gapped right/bottom and
wasn't 0,0. Same silent JSON bug — the crop still never executed — and the measure was scroll
extents regardless. Lesson: verify declared mechanics actually execute; assume nothing ran.
## Current iteration (web bounding box — UNCOMMITTED, verification pending)
ALPHA-BBOX CROP: `FindContentBounds` scans the captured Bgra32 frame and returns the bounding box
of non-transparent pixels (the background is injected transparent, so alpha = the widget's extent).
Capture is cropped to that rect and `Stretch="Fill"` maps it flush under the box. No DOM query, no
layout timing — the crop rect IS the rendered widget by construction, so it can NEVER truncate
visible content. Worst case (widget fills the canvas) = full frame = the confirmed-good render.
Canvas-size viewport + Fill untouched. `QueryContentBoundsAsync` + the JS script are DELETED.
## Iteration that just failed (`a5b9952` — wrapper-excluded DOM-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: measure actual RENDERED PIXELS (alpha), never
transient DOM state; and never ship a crop blind.