Commit Graph
10451 Commits
Author SHA1 Message Date
David Mann 100997baaa Merge origin/main into feat/raw-xmp-crop
# Conflicts:
#	crates/ui-egui/src/dialogs/camera_raw_ui/open.rs
#	crates/ui-egui/src/dialogs/camera_raw_ui/sidecar.rs
#	docs/file-format-parity.md
2026-11-08 01:36:16 +01:00
David Mann 3aa1d9f432 Merge pull request #12164 from ElNeMeR70/fix/patch-sample-all-layers-default-on-12125
Patch tool: start Content-Aware Sample All Layers on (#12125)
2026-11-08 00:41:59 +01:00
David Mann 153fcff8c3 Merge pull request #7121 from texjer/feat/camera-raw-sidecars
Camera Raw: Done saves the raws' settings to their sidecars without opening them
2026-11-08 00:30:42 +01:00
David Mann 36a754da5c Merge pull request #12173 from hectorviov/fix/sampler-drag-gestures
Color Sampler: a new point lands where the drag ends, markers follow the pointer, a click on a point moves it, Escape cancels (#11729)
2026-11-08 00:30:07 +01:00
David Mann 15be79be5e Merge pull request #9058 from Gotya-OFFCIAL/raw-hasselblad-3fr
raw: decode Hasselblad 3FR/FFF (X2D II 100C, uncompressed)
2026-11-08 00:29:05 +01:00
David Mann be26364ebc Merge pull request #12093 from yoriswind/codex/count-psd-resource-11759
Preserve Count groups in PSD resource 1080
2026-11-08 00:28:20 +01:00
David Mann 49eabafbcb Merge pull request #11238 from NaufalDzz/layer-filter-find-layers
Select › Find Layers opens the Layers panel's Name filter (#10884)
2026-11-08 00:13:30 +01:00
David Mann 5525dc41ae Merge pull request #9306 from FartmanAndBurps/contrib/work-path-live-preview
Smooth live preview for Work Path dragging
2026-11-08 00:12:23 +01:00
David Mann d921488bc3 Merge pull request #11700 from TrevorBrown-dev/fix/magnetic-lasso-fastening-spacing-11687
Magnetic Lasso: fastening points are spaced as the reference measures (#11687)
2026-11-08 00:10:54 +01:00
David Mann 6d5254d319 Merge pull request #12134 from hectorviov/fix/atn-droplet-print-gradient-tool
Actions: map Create Droplet and cover the Gradient tool's recorded steps (#10710)
2026-11-08 00:01:17 +01:00
David Mann d438e97467 Merge pull request #10766 from yoriswind/codex/atn-menu-intent
Add five Classic Actions panel commands
2026-11-07 23:59:31 +01:00
David Mann f66bf92f42 Merge pull request #12190 from davidmann4/fix/11906-bg-eraser-alt-eyedropper
Background Eraser: Alt+click picks the foreground colour (#11906)
2026-11-07 23:54:39 +01:00
David Mann ebfd46de82 Merge pull request #12139 from hectorviov/fix/transform-relative-position
Free Transform: relative positioning toggle between X and Y (#11679)
2026-11-07 23:53:13 +01:00
David Mann 5e5884603c Merge pull request #12092 from yoriswind/codex/brush-behind-key-11894
Select Behind with Shift+Alt+Q for Brush and Pencil
2026-11-07 23:51:32 +01:00
David Mann 13d0d486e4 Merge pull request #12166 from hectorviov/fix/move-target-layer-default
Move tool: Auto-Select target defaults to Layer; dropdown lists Group, Layer (#11380)
2026-11-07 23:49:21 +01:00
David Mann 2385489d4f Merge pull request #12110 from hnoerenberg/fix/type-default-size-50pt-12051
fix(type-tool): start the type tool at 50 pt
2026-11-07 23:48:08 +01:00
David Mann 8b1e614e7b Merge pull request #11856 from RickiNano/fix/11810-brush-reset-default-tip
Reset Tool gives the Brush a 13 px soft tip (#11810)
2026-11-07 23:45:04 +01:00
David Mann 977f80dc42 Merge origin/main into PR #9058 (raw: Hasselblad 3FR/FFF)
# Conflicts:
#	docs/gaps.md
2026-11-07 23:30:32 +01:00
David Mann 5d0c8ce8c3 Merge pull request #8140 from Tungtono/feat/psd-puppet-warp-2
PSD: Photoshop's Puppet Warp smart filter, drawn with the mesh the file stores
2026-11-07 23:29:51 +01:00
David Mann c976762718 Merge pull request #5238 from bommerts/codex/live-mixer-brush-delay
Render live painting and canvas navigation in the input frame
2026-11-07 23:26:29 +01:00
David Mann 0a184f4a60 Merge pull request #8261 from Korg1ch/fix/8230-fade-preview
fix(ui): live preview in the Fade dialog (#8230)
2026-11-07 23:24:45 +01:00
e80f242575 PR #9306: preview Path Selection drags on main's own drag code
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>
2026-11-07 23:23:59 +01:00
David Mann 27ea4eddbc Merge pull request #5269 from augrclk/fix/brush-tip-geometry-layout
Brush Settings: align Angle and Roundness left of the tip widget
2026-11-07 23:23:49 +01:00
David Mann 6c9031da01 Merge pull request #10429 from hectorviov/fix/path-selection-chords
Paths: ⇧⌥⌘↩ intersects the path with the selection (#7726)
2026-11-07 23:22:16 +01:00
David Mann 50d9042e54 Merge pull request #10445 from hectorviov/fix/new-guide-arithmetic
New Guide takes arithmetic in its position, as in Photoshop (#10440)
2026-11-07 23:21:08 +01:00
David Mann 5967e6e7bc Merge pull request #8485 from david419kr/fix/persist-tool-colors
fix(ui): remember foreground and background colors between launches (Photoshop parity)
2026-11-07 23:20:15 +01:00
David MannandClaude Opus 5.5 d61aa40aa4 Background Eraser Alt tests: right-drag, held drag, erase and resize checks
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>
2026-11-07 23:06:00 +01:00
75bb7cea01 Merge origin/main into PR #9306
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>
2026-11-07 23:04:27 +01:00
David MannandClaude Opus 5.5 c052e3f5ec Background Eraser: Alt+click picks the foreground colour (#11906)
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>
2026-11-07 22:54:36 +01:00
Hector VillarrealandClaude Opus 5.5 b62fb60596 Color Sampler: a drag whose release went to another tool no longer takes Escape (CodeRabbit review on crates/ui-egui/src/tools/analysis_ui.rs:1094)
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>
2026-11-07 14:51:38 -06:00
Hector VillarrealandClaude Opus 5.5 b6c1f68869 Color Sampler: no 11th marker preview at the 10-point limit (CodeRabbit review on crates/ui-egui/src/tools/analysis_ui.rs:489)
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>
2026-11-07 14:50:46 -06:00
Hector Villarreal 584e1c35aa Color Sampler: a new point lands where the drag ends, markers follow the pointer, a click on a point moves it, Escape cancels (#11729) 2026-11-07 13:59:54 -06:00
Eng. Mahmoud Bek ElNemer 47eea2fb88 Patch tool: start Content-Aware Sample All Layers on (#12125)
- 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
2026-11-07 21:35:43 +02:00
8bf381f2d9 Find Layers: keep the Name text on every run path; no focus for a hidden filter row (#11238)
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>
2026-11-07 20:24:22 +01:00
Hector VillarrealandClaude Opus 5.5 5252735c97 Free Transform: a flattened box reads its reference point's own offset (CodeRabbit pre-merge check on #12139)
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>
2026-11-07 13:22:29 -06:00
5de6aa4e04 Merge origin/main into feat/psd-puppet-warp-2 (PR #8140)
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>
2026-11-07 20:18:37 +01:00
texjer f3348efd90 Merge remote-tracking branch 'upstream/main' into cr/7121a
# Conflicts:
#	crates/ui-egui/src/i18n/cs.tsv
#	crates/ui-egui/src/i18n/de.tsv
#	crates/ui-egui/src/i18n/el.tsv
#	crates/ui-egui/src/i18n/es.tsv
#	crates/ui-egui/src/i18n/fr.tsv
#	crates/ui-egui/src/i18n/hu.tsv
#	crates/ui-egui/src/i18n/id.tsv
#	crates/ui-egui/src/i18n/it.tsv
#	crates/ui-egui/src/i18n/ja.tsv
#	crates/ui-egui/src/i18n/ko.tsv
#	crates/ui-egui/src/i18n/nl.tsv
#	crates/ui-egui/src/i18n/pl.tsv
#	crates/ui-egui/src/i18n/pt-br.tsv
#	crates/ui-egui/src/i18n/ru.tsv
#	crates/ui-egui/src/i18n/sr.tsv
#	crates/ui-egui/src/i18n/tr.tsv
#	crates/ui-egui/src/i18n/uk.tsv
#	crates/ui-egui/src/i18n/vi.tsv
#	crates/ui-egui/src/i18n/zh-hans.tsv
#	crates/ui-egui/src/i18n/zh-hant.tsv
2026-11-07 14:12:46 -05:00
Hector Villarreal 18fd853447 Move tool: Auto-Select target defaults to Layer; dropdown lists Group, Layer (#11380) 2026-11-07 12:42:46 -06:00
Hector VillarrealandClaude Opus 5.5 4b3eb2ffd1 Free Transform: typing X or Y leaves the other axis at full precision (CodeRabbit review on options_bar.rs:308)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-07 12:39:37 -06:00
Hector VillarrealandClaude Opus 5.5 e1d7429266 Actions: Create Droplet steps follow a renamed loaded action, as Batch steps do (CodeRabbit review on steps_droplet.rs:59)
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>
2026-11-07 12:39:36 -06:00
ba3ea95007 raw: honour ActiveArea in Hasselblad 3FR/FFF (PR #9058)
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>
2026-11-07 19:39:30 +01:00
David Mann 0f0e76c44b Merge remote-tracking branch 'origin/main' into pr-11238
# Conflicts:
#	crates/ui-egui/src/panels/layer_filter_ui.rs
#	docs/control-protocol.md
2026-11-07 19:37:29 +01:00
David Mann b8b539c845 Merge origin/main into PR #9058 (raw: Hasselblad 3FR/FFF) 2026-11-07 19:37:23 +01:00
David Mann 9a079c811f Merge remote-tracking branch 'origin/main' into pr-8485-merge
# Conflicts:
#	docs/ui-parity.md
2026-11-07 19:28:44 +01:00
89f5946829 Merge main into #5238: keep main's live Mixer Brush, port the same-frame paint order
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>
2026-11-07 19:26:17 +01:00
David Mann b919607cd8 Merge main into #10445 2026-11-07 19:24:49 +01:00
yoriswind 99653a4626 fix(actions): preserve the Equalize dialog on recorded playback 2026-11-07 10:24:40 -08:00
David Mann e6ba4aca42 Merge pull request #5845 from devius/ka-language
i18n: Georgian (ka) interface language
2026-11-07 19:19:01 +01:00
David Mann c1ec8e6adf Merge pull request #10744 from Lcoding15/fix/curvature-pen-resumes
Curvature Pen: carry an open path on from its selected endpoint (#10726)
2026-11-07 19:15:55 +01:00
David Mann 90cdaa615d Merge pull request #10695 from Lcoding15/feat/arrange-drag-borders
Window > Arrange: drag the borders between arranged documents (#10101)
2026-11-07 19:14:43 +01:00