The zoom feature shipped without a task record while its index rows carried the "TASK 51" label — which belongs to the webcam background effects (Remove + Blur). For an honest catalogue and handoff: - TASKS/task-52-zoom-box.md: feature provenance (creator-requested), the three 2026-10-08 corrections (loupe -> anchored capture over the full composite drawn last -> never show the dim shading), shapes, implementation map, tests, DONE. - TASKS.md: row 52 added (shipped); row 51 reworded — unblocked now that the zoom build shipped. - TASK 51 -> TASK 52 in Models/index.md, ViewModels/index.md, and the two code comments that pointed at the zoom as "TASK 51". - HANDOFF.md: pre-push readiness notes (5 commits ahead, push-safe).
60 lines
4.1 KiB
Markdown
60 lines
4.1 KiB
Markdown
# HANDOFF — 2026-10-08 (zoom box shipped, READY FOR PUSH)
|
|
|
|
## Branch
|
|
- main (no feature branch)
|
|
|
|
## Push readiness
|
|
- **5 commits ahead of origin/main, clean to push** (fetch confirmed origin has not moved):
|
|
`966e718` zoom box visuals → `4b3d82f` zoom as layered + TASK 51 booking → `6bff21b`
|
|
anchored-capture rework → `948dd08` dims-shading fix → (docs unit: TASK 52 record +
|
|
numbering fixes + this HANDOFF).
|
|
- The pinned-chat work unit below is **uncommitted on purpose** — `git push` sends only
|
|
commits, so pushing is safe; the dirty files stay local.
|
|
|
|
## Dirty files (NOT mine — the in-flight "pinned chat" work unit; do NOT commit or co-edit)
|
|
- `Models/YouTube.cs`
|
|
- `ViewModels/MainViewModel.Chat.cs`
|
|
- `Controls/LeftPanel.xaml` (pinned-message UI)
|
|
- Untracked: `Helpers/RelayCommandGeneric.cs`
|
|
|
|
## What just happened (2026-10-08, third zoom pass — dims shading)
|
|
The zoom box shipped as a **loupe** (`4b3d82f`), then was corrected to an **anchored-capture
|
|
magnifier over the full composite drawn last** (commit `6bff21b`). The final correction: as the box
|
|
is dragged, the dim rectangles (55% black "div shading" around the box) were sliding under the
|
|
capture region — shown inside the box because its `VisualBrush` samples all of `CanvasGrid`, and the
|
|
`DimRects` ItemsControl previously lived INSIDE `CanvasGrid`.
|
|
|
|
Fix: the `DimRects` overlay is now a **sibling of `CanvasGrid`** (renders above the composed
|
|
content, below the `ZoomBox`), never a descendant — so the zoom sample can never pick up the shading
|
|
and the captured area stays clear no matter where the box is dragged. Behavior consequence to note:
|
|
in non-zoom ("quality dims") mode the dims now also shade the global overlays (brand flash, alert
|
|
ticker, social bar) that sit above them in the old tree — consistent with "chrome outside the crop
|
|
is dimmed". Structural invariant added to `ZoomBoxInteractionTests`: `DimRectsLayer` is a direct
|
|
child of `PreviewCanvas`, not inside `CanvasGrid`, and renders below the `ZoomBox`.
|
|
|
|
## Zoom feature state
|
|
- **TASK 52 (zoom box) is now a first-class record** — see [`TASKS/task-52-zoom-box.md`](TASKS/task-52-zoom-box.md):
|
|
feature provenance + the three creator corrections, shapes, implementation map, tests.
|
|
TASK 51 (webcam background Remove + Blur) is unblocked for the next unit.
|
|
- Models: `ZoomState.cs`, `ZoomShape.cs` (Circle/VerticalRectangle/HorizontalRectangle), `ZoomSceneElement.cs`.
|
|
- ViewModel (`MainViewModel.Zoom.cs`): `ActivateZoom`/`ToggleZoom`/`DismissZoom`/`StartZoomMove`/`UpdateZoomMove`/`EndZoomMove` + `RebuildDimRectsForZoom`; transient element healed/mirrored by `HealZoomLayers`/`EnsureZoomLayer`.
|
|
- Output: box composited last via `BlitZoom`/`ZoomMagnifier`; output crop = tier (box never the crop).
|
|
- Preview: `ZoomBox` + `DimRectsLayer` are both SIBLINGS of `CanvasGrid` (box above dims above content); box samples the full composite at the fixed capture, 2x; circle→ellipse clip, rect/square outline per shape; `LeftPanel` hides the placeholder row via `IsZoomLayer`.
|
|
- Rectangle shape = 4:3; Circle square; Phone 9:16. Capture anchored on click (`CaptureX/Y`); dragging the box never changes it.
|
|
|
|
## Tests
|
|
- Full suite: **406 passed / 0 failed** on a clean full run (the pre-existing audio-loopback timing
|
|
flake and `RealMouseDrag`'s interactive-desktop requirement recur occasionally — not zoom
|
|
regressions). Zoom tests 3/3 green, 0 build warnings.
|
|
|
|
## Known issues / follow-ups
|
|
- **Background "Use default background" toggle still not working** (carried from 2026-10-07):
|
|
binding exists (`UseDefaultBackground`), VM handler invalidates bake; investigate when time permits.
|
|
- The 3px selection / crop-outline strokes could still show in the zoom box IF the capture overlaps
|
|
them in edit mode — not shading, thin outlines only; the dims (the user's complaint) are gone.
|
|
|
|
## Next step
|
|
- User runs the app live to eyeball: drag the zoom box anywhere and the captured content stays clean
|
|
(no dim shading in the box; the scene outside the box stays dimmed). Then TASK 51 (webcam
|
|
background Remove + Blur) per `TASKS/task-51-webcam-bg-effects.md`, and the background-toggle
|
|
investigation if still open. |