Files
photocraft/docs
2d6f9d172b Canvas: the redraw area covers a whole command, not just its last revision (#9329) (#10053)
* perf: add P85, the app frame after Paste Into on 24 MP (#9329)

Track-only row in the redraw area group: Paste Into a 5 % selection (untimed),
then time the next kittest frame. Guards: the command moves revision by >= 2 and
the frame records a refresh. Prints refresh px.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* perf: P85 re-creates the selection before each Paste Into (#9329)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* perf: a command's redraw area spans all its revisions; count whole redraws of small edits (#9329)

Session::dispatch is the one place damage spans revisions: a command that moved
the revision more than once reports step_damage of the document before and after
it, measured from DocState::damage_from. Deletes note_insert (Paste Into), Stroke
Path's hand-made union and the failed compound's None. Debug and test builds
count a whole-document redraw of an edit under 25 % in Session::whole_redraws.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* perf: the canvas redraws the damage since the revision it showed (#9329)

damage_since, the navigator and the histograms accept any cached revision within
DocState::damage_from..revision, not only the one before. The Move tool's
Auto-Select clause becomes the generic rule: no pixels changed since the cache.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* perf: P85 shows the selection for a frame before Paste Into (#9329)

Without that frame the canvas last showed the revision before select.rect,
two commands back, so it redrew everything whatever Paste Into reported.
The app always draws frames between a selection and the next command.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* perf: a newly added pattern no layer refers to changes no pixels (#9329)

Pattern Stamp copies its pattern into the document on first use, which made
a multi-subpath Stroke Path report the whole canvas. Appended patterns are
now pixel-equal unless a layer reference could resolve to one. The small-edit
sweep also covers layer.translate and layer.showOnly.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* perf: renumber the Paste Into frame row P85 -> P89 (#9329)

Main uses P83-P86 for #10259's open benchmarks. Regenerate docs/scorecard.md.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* style: rustfmt viewport_pages damage lookup

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* Canvas: bound the pattern-reference walk; P89 undoes each paste

- `any_layer` stops at the same depth as the file's other layer walks,
  treating a deeper tree as referring to the pattern.
- The Paste Into frame row undoes each paste, untimed, and checks the
  layer stack is restored, so every sample pastes onto the same document.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* Canvas: a same-named pattern a reference still resolves past is bounded

- `patterns_pixels_equal` compares where each reference resolves before
  and after the append, since `pattern::find` tries ids before names.
- P89 also undoes its selection each sample and checks the history
  length is restored; the timed frame is unchanged.
- Main's new `damage_since` callers take the `(damage_from, last_damage)` pair.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-authored-by: FredApps <FredApps@users.noreply.github.com>
2026-11-09 17:30:11 +01:00
..
…
…
…