Commit Graph
2475 Commits
Author SHA1 Message Date
dotCooCoo e207210745 Merge main into feat/equalize-entire-image 2026-11-07 08:24:11 -08:00
Dan 4c46db6206 fix(ui): retain held-Z menu anchoring 2026-11-07 16:14:56 +00:00
Dan 593c7d487b fix(ui): keep Zoom menu steps centred on the view 2026-11-07 16:09:14 +00:00
a3712435c3 Merge main into #5269 (Brush Tip Shape Angle/Roundness layout)
main moved brush_sections.rs to panels/ with its tests in
panels/brush_sections/tests.rs, and gave the Angle and Roundness fields
accessible names. Keep the PR's left column and right-hand widget with
main's accessible names, move the PR's three layout tests and
section_harness_width into the new tests file, and find the captions with
main's caption_rect (get_by_label now also matches the named fields).
Docs: both sides' status entries kept.

Co-Authored-By: augrclk <217665348+augrclk@users.noreply.github.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-07 17:07:55 +01:00
David Mann f202206901 Merge origin/main into PR #8485
# Conflicts:
#	crates/engine/src/prefs.rs
#	crates/engine/src/presets/tests.rs
#	crates/ui-egui/src/prefs/prefs_ui.rs
#	crates/ui-egui/src/prefs/prefs_ui/tests.rs
#	crates/ui-egui/src/tool_memory.rs
#	docs/scorecard.md
#	docs/ui-parity.md
2026-11-07 17:07:45 +01:00
David Mann 6d408847ae Merge pull request #9876 from SvenCarstensen/codex/guide-position-units
Guide dialogs: add Position Tab navigation and preserve exact positions
2026-11-07 16:49:49 +01:00
David Mann e3f3465fe8 Merge pull request #10840 from TrevorBrown-dev/feat/gradient-overlay-drag
Layer Style: a drag on the image moves a Gradient Overlay (#10763)
2026-11-07 16:11:57 +01:00
David Mann f98218cbe8 Merge pull request #10529 from luben93/raw/nef-lossy-after-split-v2
raw: decode Nikon "lossy after split" NEFs
2026-11-07 16:06:23 +01:00
David Mann 0eb51ace19 Merge pull request #8239 from nikolainyegaard/vocab-parity
Labels: match Photoshop's menu, tooltip and spelling conventions
2026-11-07 15:43:52 +01:00
Hartmut Nörenberg 2b68188779 Regenerate the scorecard after merging main 2026-11-07 15:42:23 +01:00
FredApps 0c88c596bf Merge pull request #11684 from RickiNano/fix/windows-pen-eraser-end-2285
Windows: the pen's eraser end selects the Eraser (#2285)
2026-11-07 15:40:37 +01:00
David Mann f71b8d7f69 Merge remote-tracking branch 'origin/main' into pr-5224 2026-11-07 15:37:34 +01:00
Hartmut Nörenberg 76326721f0 Merge remote-tracking branch 'upstream/main' into feat/reset-transform-smart-object-11662 2026-11-07 15:33:24 +01:00
David Mann fd4f9c9703 Merge remote-tracking branch 'origin/main' into pr-5224
# Conflicts:
#	crates/ui-egui/src/panels/brush_sections.rs
#	docs/brush-parity.md
#	docs/gaps.md
2026-11-07 15:09:34 +01:00
Hartmut Nörenberg 819e6382fd chore(docs): regenerate the scorecard after the skip-transform-when-placing preference
53917dc17 (#9075, Preferences: Skip Transform when Placing, #8492) added
General::skip_transform_when_placing to crates/engine/src/prefs.rs, so the
prefs audit total in the scorecard is 194, not the 193 the committed file
says (the unread count stays 10). The regeneration in 3c4431945 (#11984)
covered #11322's total of 193 but predated this merge, so every open PR's
gate job fails with "docs/scorecard.md is stale: run cargo xtask scorecard
and commit the result".

This is the committed output of `cargo xtask scorecard` at base 67e3457b0:
the Workspace and UI summary row and the prefs-audit prose, 193 -> 194, two
lines, no source changes. `cargo xtask parity` produces no change here.
2026-11-07 14:55:05 +01:00
David Mann 67e3457b02 Merge pull request #10001 from indy2kro/feat/8064-psd-maximize-compatibility-param
Saves take maximizeCompatibility for a PSD/PSB's merged image (#8064)
2026-11-07 14:44:52 +01:00
Hartmut Nörenberg c5defde144 docs: regenerate parity and scorecard after merging main
From the merged tree: the menu count goes to 662 of 662 live, main's 661
plus the Reset Transform item this PR adds, and the prefs audit counts
193 `Preferences` leaves where the committed scorecard still said 192
because main's #11322 added the pref `group_tools` without regenerating.
Both files are `cargo xtask parity` and `cargo xtask scorecard` output,
not hand-edited.
2026-11-07 14:22:33 +01:00
Hartmut Nörenberg 2c96b71cc4 Merge upstream/main into feat/reset-transform-smart-object-11662
`docs/ui-parity.md`'s status line conflicted: the branch and main each
prepended a clause at the head of the change list, and the branch also
carried the newer `Last updated` date. The merged line keeps main's
toolbar tool-memory clause (#3569) word for word after our Reset
Transform clause (#11662), with one `Change:` header and the later date.
2026-11-07 14:22:32 +01:00
David Mann 3c000ea238 Merge pull request #8307 from midasdf/jp/print-paper-sizes
Print: Japanese paper sizes (はがき・往復はがき・JIS B5/B4・L判)
2026-11-07 14:11:19 +01:00
David MannandClaude Opus 5.5 3c44319455 docs: regenerate the scorecard after #11322 added a setting (#11983)
The prefs audit counts 193 settings since Preferences.groupTools landed;
docs/scorecard.md still said 192, which failed the gate and the Windows
staleness test on main.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-07 13:56:20 +01:00
David Mann 41aa2b86f5 Merge pull request #3693 from funkvay-star/feat/levels-reset-clipping
Levels: Alt-drag clipping display (#3328)
2026-11-07 13:38:09 +01:00
David Mann 339adcb7bc Merge pull request #11322 from Saloouu/fix/toolbar-groups-survive-restart
Toolbar slots and tool keys keep their last tool across launches (#3569)
2026-11-07 11:55:58 +01:00
Sven Carstensen 2928191557 Merge main and retain guide keyboard and exact-position fixes 2026-11-07 11:54:29 +01:00
Davit Matchakhelidze a9be0ce965 Merge main into ka-language 2026-11-07 12:28:48 +04:00
Hartmut Nörenberg 1475708c14 fix(engine): Reset Transform requires its re-render
Review finding on this PR (#11675, discussion_r4499346688): with the warp now cleared as part of
the reset, a smart object whose stack holds a visible filter this build cannot apply took the
Free Transform path's forgiving branch - `refresh_layer` returns false for that stack,
`refresh_text` drops it on the floor, and `restore_unrendered` put the OLD cache back warped by
the relative map. The step recorded a placement at 100 % with no warp whose pixels still showed
the warp.

The step now insists on the guarded refresh the other smart-object edits use:

- `unapplied_filters` is checked before anything changes, so an unsupported Photoshop filter kept
  verbatim from a PSD names itself in the error and the document is never touched.
- `refresh_or_fail(doc, id)?` runs at the reset boundary, right after `transform_by_map` and
  before the exact map is pinned. It is a cache-warm call in the normal case (same document state
  as the render `transform_by_map` just did), and it refuses an unreadable source or a render that
  fails outright. Because `Session::edit` runs its closure on a copy and returns early on `Err`,
  a refused reset leaves the document, the placement, the warp and the history list exactly as
  they were - the fallback pixels are never accepted.

Regression test `reset_transform_refuses_a_stack_it_cannot_re_render` (red before this commit:
the reset returned Ok) asserts the error names the filter, that transform, warp and filter stack
are unchanged, that no history state was added, and that the same object resets normally once the
unsupported filter is off the stack. The four existing reset tests still pass, so the success
path and its warp clearing are unchanged.

No new dependency; photocraft_io's UNSUPPORTED_FILTER was already re-exported by this module.
2026-11-07 06:17:54 +01:00
David Mann f68e227026 Merge pull request #11780 from davidmann4/i18n-fallback-no-coverage-tests
i18n: no test fails on a missing translation (#11778)
2026-11-07 02:20:37 +01:00
Hartmut Nörenberg efaa011d0e docs: Reset Transform clears the warp
The ui-parity row, its revision entry and the status line said the Warp survives Reset Transform.
It does not: measured against the reference application 2026-11-06 (report in #11675), the warp is
cleared with the rest of the transform, and the object centres on the average of the placement's
four corners. A 2026-11-07 revision row records the correction; the 2026-11-06 entry stays as the
history of what landed when.

cargo xtask parity and scorecard re-run: unchanged (661 of 661 live), so nothing to regenerate.
2026-11-07 02:18:23 +01:00
David Mann 927c63d394 Merge pull request #11022 from Hamza0101/fix/crop-overlay-and-fill-defaults
Crop: Always Show Overlay by default, Fill resets on another open document, and an untouched frame shows only itself (#10894, #10930)
2026-11-07 01:11:21 +01:00
David MannandClaude Opus 5.5 b826eb3650 i18n: no test fails on a missing translation (#11778)
Remove the Azerbaijani menu coverage test (red on main), the crop Fill
label coverage test and the has() loop in the pen path Esc test. A
missing string falls back to English; cargo xtask i18n-coverage lists
the gaps. docs/contributing.md now says tests never require a string to
be translated.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-07 00:30:56 +01:00
Davit Matchakhelidze 20bbd27c84 Merge upstream main into ka-language 2026-11-07 02:53:58 +04:00
David MannandClaude Opus 5.5 20142544b0 Regenerate docs/scorecard.md after merging main
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-06 23:03:17 +01:00
David Mann 017c4aab9e Merge remote-tracking branch 'origin/main' into HEAD
# Conflicts:
#	docs/scorecard.md
2026-11-06 22:57:46 +01:00
David Mann 6b0f7762e1 Merge pull request #11671 from davidmann4/integration-batch-20
Integration batch 20: 7 i18n PRs (Thai, Hebrew, Urdu, Tamil, Azerbaijani, Romanian, Korean)
2026-11-06 22:49:42 +01:00
David Mann fd890eaca4 Merge pull request #11669 from davidmann4/feat/crop-task-bar-10890
Crop: Contextual Task Bar under the crop frame, as a reusable task-bar widget (#10890)
2026-11-06 22:49:21 +01:00
David Mann 7ecfccbd64 Merge pull request #11643 from davidmann4/integration-batch-19
Integration batch 19: epic PRs (WIP)
2026-11-06 22:48:55 +01:00
Sven Carstensen 779a27e7fb Limit guide dialog changes to keyboard editing and exact positions 2026-11-06 20:14:37 +01:00
Hartmut Nörenberg 9a7ec924ab docs: regenerate the parity files after merging main
cargo xtask parity and scorecard on the merged tree: 661 of 661 menu items live (Layer 162 of 162, so the Reset Transform row is counted live), and the prefs audit is 10 of 191 now that upstream removed the Enable animations preference.
2026-11-06 20:07:59 +01:00
Cristi RaduandClaude Opus 5.5 20900a5432 Say what an unset maximizeCompatibility does in app.save (#8064)
Unset or null follows Preferences › File Handling: Always and Ask When Saving
write the real merged image, Never the placeholder, and app.save opens no dialog.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-06 21:07:10 +02:00
Cristi RaduandClaude Opus 5.5 0c449729d7 Say Bitmap, Indexed Color and Duotone keep the merged image (#8064)
The PSD writer always writes the real merged image for those modes (Bitmap and
Indexed are saved without layers; Duotone is exempt), so maximizeCompatibility
false does not give them the placeholder. The MCP params, control protocol and
CLI help now say so.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-06 21:07:10 +02:00
Cristi RaduandClaude Opus 5.5 a1bb9f003f Saves take maximizeCompatibility for a PSD/PSB's merged image (#8064)
Photoshop's Maximize Compatibility checkbox, for one save: `maximizeCompatibility`
(true or false) on Save, Save As, Save a Copy, `app.save`, serve `doc.save`, MCP
`doc_save`/`doc_export`, Batch, Image Processor and Layers to Files decides the
merged image over Preferences > File Handling > Maximize PSD and PSB File
Compatibility; unset, the preference decides. Anything but a boolean is refused
before anything is written. The CLI takes `--no-maximize-compatibility`.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-06 21:07:10 +02:00
RickiNano 265fedc687 Merge remote-tracking branch 'origin/main' into fix/windows-pen-eraser-end-2285
# Conflicts:
#	apps/photocraft/src/tablet.rs
#	crates/tablet/Cargo.toml
#	crates/tablet/src/lib.rs
#	crates/tablet/src/windows.rs
#	crates/ui-egui/src/lib.rs
#	crates/ui-egui/src/services.rs
#	docs/hardware-parity.md
2026-11-06 19:53:07 +01:00
RickiNano 1aa85bd796 Windows: the pen's eraser end selects the Eraser (#2285)
The pointer hooks read PEN_FLAG_INVERTED from GetPointerPenInfo and
report the pen end through Services::pen_end, so flipping the pen
switches to the Eraser and the tip restores the previous tool, as on
macOS. A WH_CALLWNDPROC hook beside WH_GETMESSAGE catches
WM_POINTERLEAVE, which Windows documents as sent, not posted.
PEN_FLAG_ERASER alone is an eraser button on the barrel and does not
switch tools.
2026-11-06 19:45:17 +01:00
David MannandClaude Opus 5.5 e078c560ec Address CodeRabbit review: task bar tile, inspect and ui.set merge
- Draw the Crop task bar only on the active document's tile: a click into
  another tile activates its document mid-pass, and the tile drawn after it
  put the new frame's bar on itself for that frame.
- ui.inspect reports the bar hidden (and no rect) as soon as it can't show,
  not only after the next draw.
- ui.set merges panels.task_bar field by field: {"at": [x, y]} keeps a pin,
  {"pinned": true} keeps a dragged place; unknown nested fields are refused.
- Tests for each (each fails with its fix reverted), plus the task bar's
  preset dropdown picking 1 : 1 in sync with the options bar.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-06 19:41:21 +01:00
David MannandClaude Opus 5.5 5d5519dcac Regenerate docs/scorecard.md after merging main
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-06 19:41:20 +01:00
Hartmut Nörenberg e5d597f6e7 Merge remote-tracking branch 'upstream/main' into feat/reset-transform-smart-object-11662
# Conflicts:
#	docs/ui-parity.md
2026-11-06 19:36:36 +01:00
Firstbober 7f96ce5343 Preserve Indexed profiles and preview current tool colors 2026-11-06 19:26:52 +01:00
David Mann d1d913e7e6 Merge remote-tracking branch 'origin/main' into feat/crop-task-bar-10890 2026-11-06 19:24:17 +01:00
Firstbober 2fbec8b533 fix: preserve document colours for indexed mattes 2026-11-06 19:14:59 +01:00
Firstbober b57ec9f729 fix: preserve indexed matte when picker is canceled 2026-11-06 19:14:59 +01:00
Firstbober 3a7a0aaa1e feat: add Indexed Color matte control 2026-11-06 19:14:58 +01:00