The review on #9306 asked to build the live preview on main's Path
Selection dragging instead of a separate handler. A drag now draws the work
path, or the saved path selected in the Paths panel, where its release will
put it: the same whole-pixel offset and click threshold as
path_selection_finish (path_selection_offset, shared by both), and only the
selected components when some but not all are (path_components::
moved_selected, through the engine's own move_anchors). The document still
changes only on release, as one History step. A shape layer's or vector
mask's outline is not previewed: their pixels move only on release. A stale
drag (VectorGestureOwner) shows nothing, as its release moves nothing.
Co-Authored-By: FartmanAndBurps <FartmanAndBurps@users.noreply.github.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Adds an Alt+right-drag test (resizes, samples nothing), checks the
foreground while an Alt-drag is still held, that a plain click clears the
pixel, and that Control+Alt-drag changes the brush size.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Main now drags paths through Path Selection's own code (path_ops.rs
path_selection_finish, path_components::move_selected) and drops a stale
vector drag through VectorGestureOwner, and vector_ui.rs is split into
tools/vector_ui/. The separate work_path_drag.rs handler is dropped here, as
the review on the PR asked; the next commit ports the live preview onto
main's code.
Co-Authored-By: FartmanAndBurps <FartmanAndBurps@users.noreply.github.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Holding Alt with the Background Eraser now turns it into the Eyedropper
for that press, as with the Brush, Pencil, Gradient and Paint Bucket: a
click or drag sets the foreground colour, adds no history state and
changes no pixel, and the cursor shows the pipette. Control+Alt stays the
brush-resize gesture.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A tool letter pressed mid-drag hands the release to the new tool, so the sampler
drag was never ended and the next Escape (Deselect, a toolbar flyout) was eaten
by it. The Escape hook now drops a sampler drag once the Color Sampler is no
longer the tool, and only consumes Escape while it still is.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
At the limit a drag off a point drew marker 11 following the pointer, though the
release cannot place it. The marker drawing now skips the new-point preview once
the document has MAX_SAMPLERS points; the release still reports the limit as before.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Implement `Default` for `SampleAllLayers` with `patch: true` and all other
tools `false` so a fresh start and `Reset Tool` on the Patch tool leave
Sample All Layers on.
- Update `sample_all_key` in `crates/ui-egui/src/tools/tool_reset.rs` to
toggle the probed tool's slot against `SampleAllLayers::default()`.
- Add `crates/ui-egui/src/patch_sample_all_default_tests.rs`.
Fixes#12125
CodeRabbit found three things after the last fix-up:
- `engine.execute` and action steps without `name` replied `selected: []`
while the panel listed the layers its kept Name text matches. `run` now
fills in the panel's Name text for every path, as the menu did.
- With Filter Options > Hide, Find Layers left a focus request that took
the caret once the row was shown again. In the reference application the
row stays hidden and showing it later does not focus the field, so the
request is only made for a drawn row.
- The control protocol said the selection never changes; the Name filter
deselects a selected layer it hides (#10879). The doc now says so and
describes each entry point and the reply.
Tests for the first two fail without the fix.
Co-Authored-By: NaufalDzz <NaufalDzz@users.noreply.github.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
With no inverse map, the offset now comes from the pseudo-inverse of the box map's linear part, not from how far the top-left corner moved.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Conflicts: psd_import.rs (main's vector_preview field kept, the SmartObject
still built as a binding so pin_puppet_meshes runs), smart_cmds/rendering.rs
(main's JobCtx argument kept next to the PR's placed_puppet_params).
Co-Authored-By: Tungtono <Tungtono@users.noreply.github.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Also point the module comments at #10710's table: mapped events leave docs/atn.md's measured table (CodeRabbit review on docs/atn.md:1002).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The decoder set the active area and the crop to the whole plane and never
read ActiveArea, so a file with masked borders and no DefaultCrop developed
with the borders in. Read ActiveArea like the DNG path, use it as the
initial crop, and place DefaultCrop relative to it as DNG does. Also give
3FR/FFF its own row in the camera raw table instead of "embedded preview
only".
Co-Authored-By: Gotya-OFFCIAL <Gotya-OFFCIAL@users.noreply.github.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Main gained its own live Mixer Brush in #3627 (engine `cmd/brush_cmds/mixer_live.rs`, the
release path in `canvas/gesture.rs`), so this merge takes main's side for the engine, paint,
docs and scorecard files and drops this PR's parallel `LiveMixer` API and its engine test.
What stays from #5238 is the paint order: while a live painting tool is selected (and no dialog
owns the canvas), the image is prepared after this frame's pointer and navigation input, so a
dab or a wheel pan/pinch zoom shows in the frame it happens instead of one frame later. Ported
onto main's split `canvas.rs`, with its tests in `canvas/live_frame_tests.rs` and
`tests/it/live_stroke_canvas.rs`, adjusted for main (the removed `interface.enableAnimations`
preference, the new wheel event `source`, and the Mixer release that commits its preview pixels).
Co-Authored-By: bommerts <44821497+bommerts@users.noreply.github.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>