48 lines
5.7 KiB
Markdown
48 lines
5.7 KiB
Markdown
# Frozen canvas renderer union — independent source review
|
|
|
|
Reviewer: Codex-ytr83r /root/windows_release_gap_review, 2026-09-11. Verdict: **no material integration finding in the three reviewed frozen files**. This is a source-review verdict, not compiler, test or native acceptance. Root owns combined integration and validation.
|
|
|
|
Reviewed worktree: `.local/canvas-union-ytr83r-20260911`, root baseline `32334c66317692befb6517a917dc7ae90641c11a`, peer renderer/camera source `a31b40d0f8551ed87c8cd66250b9afb4809b3a79`.
|
|
|
|
| Reviewed file | SHA256 |
|
|
| --- | --- |
|
|
| crates/oa-desktop/src/behavior.rs | 82DCAAED9EB17F15329F80BCC7442FFF94C17D426A50DEA68455339F60FFA246 |
|
|
| crates/oa-desktop/src/behavior/scenario_lifecycle/render.rs | BF1C05EA1E709B3503D8BCF92F091446FD7A9B80B1A29C5A55919DF58F3B0271 |
|
|
| crates/oa-desktop/src/behavior/scenario_lifecycle/render_tests.rs | A95201F7D0DCC88C9C54863F0E95E09C1DB204668743ABBD32C495B577EA53EF |
|
|
|
|
## Findings and preservation
|
|
|
|
All three hashes matched the worker's freeze. The parent frame, header text child frame and Create-label child frame each apply screen-space translation before uniform scale. Both clip helpers compute `pan + scale * world` once and intersect the actual parent frame size. Neither adds the widget origin or subtracts the clip origin. The reviewed draw call sites therefore agree with the underlying Iced transform/clip behavior.
|
|
|
|
The numerical regression correctly distinguishes missing or misordered pan. For header rectangle(100,200,204,70), scale2, pan(-200,-400), viewport(300,100), the padded clip is(20,16,280,84). For Create rectangle(100,200,140,28), the corresponding clip is(16,8,248,40). Other asserted positive/negative pan, partial-edge, fully offscreen and nonfinite-pan cases were checked against their arithmetic.
|
|
|
|
Independent readback from the frozen Git blobs and candidate files, explicitly decoded as UTF-8 and normalizing line endings, confirmed:
|
|
|
|
- The entire `impl Scene` geometry/hit section matches root32334c6 except initialization of `scroll_offset` becoming `camera_pan`.
|
|
- The lifecycle rendering prefix before `draw_markers` and suffix from `marker_distance` remain unchanged.
|
|
- All 15 existing lifecycle render test names remain, including minimum-scale marker/header and ordinary-message priority regressions. Two tests were added: `panned_header_and_create_clips_use_screen_translation_and_actual_viewport` and `real_scene_panned_zoomed_program_keeps_header_birth_and_death_hit_identity`.
|
|
|
|
The new Program test exercises OA/SA header, Create and Delete selection through mouse events at scales0.5/1/2, positive/negative pan and nonzero widget origin. Its `canvas::Program::update`, `Action::into_inner`, message matching and fixture API usage showed no source-level mismatch. Source inspection also confirmed the intended single Select publication for the tested press/release paths. No test execution by this reviewer is claimed.
|
|
|
|
An initial comparison using Python's platform-default text decoding produced a comparison failure around Unicode punctuation. Repeating the readback with explicit UTF-8 for both sides resolved that reviewer-tool issue and established the preservation results above; it did not require or identify a production change.
|
|
|
|
## Direct Iced provenance
|
|
|
|
The actual locked dependencies are registry packages, not a located Git fork: `iced_graphics0.14.0`, `iced_wgpu0.14.0`, `iced_tiny_skia0.14.0`, `iced_widget0.14.2` and `iced_core0.14.0`. The inspected copies are under main `.local/toolchain/cargo/registry/src/index.crates.io-1949cf8c6b5b557f`, matching Cargo.lock.
|
|
|
|
- `iced_graphics/src/geometry/frame.rs::with_clip` drafts a child frame and then pastes it.
|
|
- `iced_wgpu/src/geometry.rs:116` initializes the frame transform to identity. `draft:412` constructs a fresh frame with the supplied clip; `paste:416` appends its primitives without reapplying the parent transform or intersecting the parent's clip. `fill_text:306` records transformed text position/font size and the child's clip bounds.
|
|
- Tiny-skia's `geometry.rs` uses the same fresh-identity draft and direct-paste behavior.
|
|
- `iced_widget/src/canvas.rs:300` applies widget-origin translation outside `Program::draw`, establishing canvas-local coordinates for these clip and text operations.
|
|
- `iced_core/src/rectangle.rs::intersection` uses floating-point min/max followed by positive-dimension checks; it is not itself a general finite-input validator.
|
|
|
|
## Limits and remaining root validation
|
|
|
|
The new Program test does not dispatch App camera messages: its separately held Document remains untouched. It supports Scene hit identity and lifecycle equality, not complete App camera/history integration. Existing App/workspace camera, source and Undo/Redo gates must remain in combined validation.
|
|
|
|
The clip helpers reject nonfinite pan and invalid scale. General invalid rectangle/viewport coordinates and transformed arithmetic overflow are not fully covered or newly guarded. Production Scene geometry and peer camera event validation supply the ordinary finite-domain assumptions; this review found no demonstrated reachable regression requiring a broader camera rewrite. The original obligations note documents additional robustness falsifiers and remains unchanged.
|
|
|
|
Arithmetic clip tests do not establish native glyph containment. The reviewed child-frame call sites match the inspected Iced implementation, but actual rendered pixels, ancestor clipping, combined compiler/tests/Clippy and runtime acceptance remain root-owned. Earlier root707 and peer729 results retain their original source/runtime scope and do not validate this union.
|
|
|
|
No candidate source edits, compiler/test/native execution, Git mutations or WSL/Linux actions were performed by this reviewer. This file persists the already completed review; no additional investigation was performed to write it.
|