Commit Graph
386 Commits
Author SHA1 Message Date
FredApps 78f9c137b3 Merge approved PhotoCraft PR #6621: Crop: right-click on the pending crop opens the crop menu (#6561)
Port behavior and regression coverage into current modules; preserve current upstream behavior.
Extended current crop menu with Reset and shield toggles, preserving newer preset management, overlays, ownership checks and no-menu-during-gesture logic. Ported reset-frame no-op/undo semantics into current CropState/release and crop commit; retained original regression cases in split modules.
2026-10-29 05:29:44 +01:00
FredApps a62b9ee217 Merge approved PhotoCraft PR #8347: Type: Roman Hanging Punctuation (trailing marks hang, don't steer the alignment)
Port behavior and regression coverage into current modules; preserve current upstream behavior.
Ported hanging punctuation into current line placement and kerning modules, preserving forced breaks, bounded edge-tip row merging, justified-last-line behavior, area exclusions and independent Roman orientation shaping; kept PSD/engine/UI regression coverage.
2026-10-29 05:22:57 +01:00
FredApps 663c0204dd Merge approved PhotoCraft PR #8896: Select and Mask: Photoshop's full-window workspace (#7069, #8148)
Resolve moved test modules and independent catalog/workflow additions without changing behavior.
2026-10-29 03:32:04 +01:00
bd9590d060 Arabic interface language, combined from the community catalogs
Adds Arabic (ar, العربية) as an interface language. The catalog combines
the open Arabic catalogs of #2505, #4520, #4569, #5593, #5915, #6092 and
#6287: each row takes the best of their translations, with one Arabic
term per concept across the UI, and the strings added since are filled
in. Modern Standard Arabic, Western digits, the six CLDR plural forms
(zero|one|two|few|many|other).

The two tests that used ar-SA as an unsupported locale now use sw-KE, and
the direction test expects Arabic to be the one right-to-left catalog.

Co-authored-by: azizr12 <163084230+azizr12@users.noreply.github.com>
Co-authored-by: hicbest <213873494+hicbest@users.noreply.github.com>
Co-authored-by: hasan-sdaif <306196098+hasan-sdaif@users.noreply.github.com>
Co-authored-by: NibrasAz7 <34162952+NibrasAz7@users.noreply.github.com>
Co-authored-by: vfggf95565 <74471233+vfggf95565@users.noreply.github.com>
Co-authored-by: syrrevshin4202-prog <243624842+syrrevshin4202-prog@users.noreply.github.com>
Co-authored-by: test-bit-sys <336050374+test-bit-sys@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 21:22:26 +01:00
Khawar Zamman Wani 56008a682d Merge origin/main into select-mask-workspace 2026-10-26 10:20:37 +05:30
VladimirPozdnyakov 516580ee07 The merge-back takes the edge tip only: two clusters, once per row, and leaves a justified paragraph's last line alone
davidmann4's round-3 review of #8347: a marks row the box had to split
out of a run folded row after row into one line running past the edge by
almost the whole run, and a row merged into a justified paragraph's last
line kept the row above's spread instead of the last-line align.

- A marks-only row steps back only while it is at most two clusters (the
  tip that hangs at the edge); a row above that already ends in a
  hangable mark takes no more.
- A justified paragraph's last row keeps its own align (centered, right
  or left): the placed clusters already carry the spread, and the merge
  only moves x1/range.end.
- hanging_marks_of_a_split_run_keep_their_breaks pins that a run keeps
  its rows and no line outgrows the box by more than two marks;
  hanging_marks_stay_off_a_justified_paragraphs_last_line pins the
  JustifyCenter/Right/All last lines. The old merged-row test now pins
  the tip (a_stepped_mark_row_keeps_its_clusters_and_glyphs_in_step).
2026-10-25 19:10:26 +03:00
David Mann c01dc04b5f Revert "Merge PR #4573: Interface: Animation Effects follows the system setting, or is on or off"
This reverts commit acd7e07252, reversing
changes made to bc0354db5d.
2026-10-25 16:36:09 +01:00
David MannandClaude Opus 5.5 38609e5615 Merge PR #8885: PSD: spot channels in Photoshop's polarity; PSDs from earlier PhotoCraft versions keep their ink
Merged with our fix-up branch pr-8885-fixup (8f6863f53) on the author's head 996b55eb4.

Conflicts resolved:
- crates/io/src/tiff_layers.rs: #9148's tiff_source (an empty LMsk gets Photoshop's 14 bytes)
  gives way to #8885's tiff_image_source, which writes the same bytes for an empty or short
  LMsk; #9148's test stays.
- crates/io/src/flat.rs: #8776's DDS alpha step and #8885's TIFF channel stamp both run.
- crates/io/Cargo.toml, Cargo.lock: #8402's zune dev-deps and #8885's tiff dev-dep.
- crates/io/tests/it/tiff_layers.rs, docs: unions; docs/scorecard.md kept as is, regenerated at
  the batch gate.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 16:28:00 +01:00
8f6863f536 Integration: a kept 1053 doesn't hide an earlier PhotoCraft's spot ink (#8885)
Earlier PhotoCraft versions kept the 1053 of a Photoshop file they opened
and wrote it back unchanged, while storing spot channels added there
straight. A transparent Photoshop document carries 1053 = [0], so a white
plate added to it in 0.16.0 or earlier sat behind a 1053, and the rule
read that file in Photoshop's polarity: the added spot opened inverted.

A 1053 that lists fewer channels (non-zero ids; 0 is the transparency's)
than the file has after its transparency now counts as kept, with the
PhotoCraft 1057 and DisplayInfo spot conditions unchanged. Planes the
kept 1053 lists stay in Photoshop's polarity (they are the Photoshop
file's own); the ones after them are read straight. Photoshop and this
version write one id per extra channel, so their files are unaffected.
Known limit, as before: channels reordered there, or as many deleted as
added, can't be told apart from the Photoshop file's own.

The earlier versions are 0.1.0 to 0.16.0, not 0.11.1: every release
since writes the same 1057 and straight spot planes without a 1053.

Co-authored-by: jasallen <615848+jasallen@users.noreply.github.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 16:22:13 +01:00
David MannandClaude Opus 5.5 4365c0537d Integration: merge main, resolve conflicts (#8885)
psd_import.rs keeps main's warning for an incomplete merged extra channel
next to the PR's Photoshop spot polarity. people.toml takes main's entries
plus jasallen's own. Docs take both sides' status lines and revision rows;
docs/scorecard.md is regenerated.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 16:07:44 +01:00
David Mann ef98aa507a Merge PR #3281: Vanishing Point: tear off planes and clone in perspective (#3280) 2026-10-25 15:57:43 +01:00
David Mann 7b79f70787 Merge PR #3297: Smart Filters: paint the filter mask directly, with undo (#3290)
Merged with our fix-up pr-3297-fixup (1de1e9eb58) on top of the author's head 053e1e0d03.
Conflicts resolved: channel_cmds.rs routed() keeps the PR's PAINT_IDS list plus the batch's
paint.artHistoryBrush; paint_cmds.rs Paint Bucket params keep the batch's "mode" and the PR's
"filterMask" target; docs/scorecard.md takes the batch's numbers with FILE-215-3 done.
2026-10-25 15:42:51 +01:00
David Mann bb39b4a8dd Revert "Merge PR #1199: Add optional local models for subject matting and object selection"
This reverts commit 5f2a7b9903, reversing
changes made to 9ef4c0a487.
2026-10-25 15:19:27 +01:00
David Mann d2f9aeb88d Merge PR #7203: feature: gradient paint to the shape tools, any shape can have a gradient stroke. 2026-10-25 14:29:48 +01:00
David Mann d576113233 Merge PR #3627: Mixer Brush: render mixed paint during the stroke and commit the live result
# Conflicts:
#	crates/engine/src/float_cmds.rs
2026-10-25 14:29:47 +01:00
David Mann b28073389c Merge PR #3316: Add intermediate UI scale presets between 100% and 125%
# Conflicts:
#	contributors/people.toml
#	docs/gaps.md
#	docs/scorecard.md
#	docs/ui-parity.md
2026-10-25 14:27:10 +01:00
David MannandClaude Opus 5.5 5f2a7b9903 Merge PR #1199: Add optional local models for subject matting and object selection
Merged with our fix-up d5139d177 (pr-1199-fixup), which merged main as of 8f09d122d.
Conflicts with main since then and with batch 8:
- photocraft-cli: main split the CLI into clap modules (#7071); the model wiring
  (local_headless, configure_cli_models, batch's shared backend, droplet) is re-applied there.
- Cargo.lock regenerated: crates/ml pins ureq =3.4.2, so the app's ureq goes 3.5.0 -> 3.4.2.
- cutout_cmds: main's subject area (#8235) kept for the classical path beside the model path.
- file_cmds batch: main's per-input closure takes `s` later, so the backend and
  integrations prefs are read before the closure instead of inside it.
- prefs_ui: model-choice filter with #4573's pref_choice_label; Integrations stays visible
  (#4097) with the model choices only where models run; the translation-coverage test main
  deleted (c3aa3f9e5) stays deleted; old section_fields test calls take PreferenceFieldOptions.
- Semantic clashes git did not flag: #4097's Integrations test literals in
  apps/photocraft take ..Default::default() for the new model fields; main's and #4573's
  section_fields test calls pass PreferenceFieldOptions.
- engine lib.rs, prefs.rs, smartselect tests, snapshot example, jobs_ui_tests, people.toml,
  docs and i18n catalogs merged as unions.


Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 14:23:25 +01:00
096ad5b194 Integration: merge main, resolve conflicts (#7203)
Main moved the shape options bar and paint swatch out of vector_ui.rs into
shape_options.rs and shape_paint_ui.rs (#5452). Carry the PR's gradient paint
over: PaintChange::Gradient, paint_param and the swatch's Gradient tab live in
shape_paint_ui.rs, the tool gradients and set_tool_paint in shape_options.rs,
and shape_gradient_ui.rs is its own module. Both sides' new tests are kept.

Co-authored-by: Denis <179751626+deniskhud@users.noreply.github.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 13:26:26 +01:00
a222c2aee4 Integration: Calibration keeps the Camera Raw preview on the CPU develop (#5128, #6923)
#6923 develops the Camera Raw dialog's preview on the GPU whenever no spatial stage is set,
from `per_pixel`'s stages. #5128 adds Calibration (primaries and Shadows tint) to the CPU
develop between white balance and Dehaze, which those stages don't run, so with both merged
a Calibration-only change previewed unchanged on the GPU while Open applied it. `per_pixel`
now returns None when Calibration is set, so the dialog develops on the CPU then. The
white and black points stay as they were, so the dialog's points cache is still right once
Calibration goes back to neutral. The hardware parity doc and BUG-204-3's note now say so.

Co-authored-by: Fabio Lissi <3223836+FabioLissi@users.noreply.github.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 13:12:57 +01:00
David Mann 7eec69f8f5 Merge PR #5128: Camera Raw: Calibration panel, Auto, raw sidecars and live Camera Raw Defaults (FILE-215-11)
# Conflicts:
#	crates/engine/src/prefs.rs
#	docs/gaps.md
#	docs/scorecard.md
2026-10-25 13:07:14 +01:00
David MannandClaude Opus 5.5 2415c6979f Integration: merge main, resolve conflicts (#3627)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 13:00:08 +01:00
David Mann 75e2ce844c Merge PR #8175: PSD: type on a path opens on its path and saves back into the file's Txt2 (#7962) 2026-10-25 12:40:11 +01:00
highperfocused e47346b09d Merge upstream/main into t3code/fix-low-hanging-issue-10
Conflicts:
- crates/ui-egui/src/canvas_tool_menu.rs: keep both the upstream type-layer
  menu field (#7324) and this PR's crop menu fields (#6561) in the struct
  literals and the auto-close condition.
- docs/context-menu-parity.md, docs/scorecard.md, scorecard/ui.toml: keep
  both sides' status-line, revision-history and UI-217-8 note entries.

Semantic fix from the merge: crop_size::resamples called target() with the
old two-argument signature; pass the Point Size preference like the other
callers.
2026-10-25 12:36:12 +01:00
David MannandClaude Opus 5.5 cfb5812fb9 Integration: merge main (#8175)
Resolves the conflicts with main's area type (TextShape::Area): EngineData keeps main's area arm beside the path comment, and a Txt2 frame of an area layer becomes a text box over the path's bounds, as its EngineData describes it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 12:14:17 +01:00
David Mann f85ff03a26 Merge PR #1610: Art History Brush in the Y-group flyout
# Conflicts:
#	crates/ui-egui/src/retouch_ui.rs
#	docs/brush-parity.md
2026-10-25 12:03:30 +01:00
David MannandClaude Opus 5.5 028d400454 Integration: merge main, resolve conflicts (#5128)
prefs.rs keeps main's demosaic default and the PR's write_xmp_sidecars, and
unhides the Camera Raw Defaults the PR makes live; the raw-open RawOpen built
without the dialog gains main's developed_with/demosaic; i18n and docs as
unions; docs/scorecard.md is regenerated in the fix-up.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 12:02:10 +01:00
David MannMatt Van HornFredAppscoderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>Claude Opus 5.5
ce6b831c03 Integration: Art History Brush tolerance, source window, History source (#1610)
- Tolerance defaulted to 50 and averaged alpha into the difference, so an
  ordinary edit (e.g. #c03030 -> #d04848) was never painted back, and a stroke
  that wrote nothing still left an empty History step. Photoshop's default is
  0; the difference is now the larger of the mean colour change and the
  alpha change (the Eraser keeps colour and lowers alpha), and a stroke that
  writes nothing is an error instead of an empty step.
- Each tile copied a source window of tile +- halo per dab: a leftward stroke
  or a curl across x = 64 read empty pixels there (seam), and a size-1000 click
  copied ~5e9 floats (11.9 s). The rotated read stays inside the dab, so it now
  samples the source directly; bilinear reads at pixel centres, so an
  unrotated dab copies the history pixel instead of a 2x2 blend.
- The brush used its own history lookup (state 0 by default): it now takes
  the History Brush's source (history.setSource, snapshots, refusal after a
  canvas size change).
- TOOL-213-20 is partial (8 of 10 styles, Area scales spacing); docs follow.

Co-authored-by: Matt Van Horn <455140+mvanhorn@users.noreply.github.com>
Co-authored-by: FredApps <153173854+FredApps@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 11:11:50 +01:00
David Mann acd7e07252 Merge PR #4573: Interface: Animation Effects follows the system setting, or is on or off
Conflicts with #5547 (Animated Zoom) resolved in wheel_nav.rs, canvas.rs and
panels.rs: the Navigator and canvas pass both Animated Zoom and
!animations_off; with Animation Effects off, the sideways part of an
animated wheel zoom pans by the frame's own events folded by their
modifiers (#4573's unsmoothed scroll) instead of the plain-event raw.x,
so Ctrl + wheel still pans sideways there. #4573's modifier test runs
with Animated Zoom off and on.
2026-10-25 10:30:00 +01:00
David MannandClaude Opus 5.5 d73c91133b Integration: merge main, resolve conflicts (#1610)
Translation catalogs keep main's strings plus the Art History Brush ones
(fr: main already has Area; hi: added the brush strings). docs/scorecard.md
regenerated.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 10:19:42 +01:00
David Mann ed401d5321 Merge PR #5478: Blend mode keys: Shift+Alt+letter picks a mode, as in Photoshop
# Conflicts:
#	docs/ui-parity.md
2026-10-25 10:15:19 +01:00
VladimirPozdnyakov 352a633611 Address the follow-up review; merge upstream/main
- Photoshop's documented hang list carries weights: period, comma, quote,
  apostrophe and hyphen hang 100%, colon, semicolon, ellipsis and dash hang
  50%; ! and ? are not in the list (davidmann4). The drawn positions never
  change: the weights only come out of the composed width.
- A marks-only row after a forced break keeps its row: the merge-back must
  not cross the author's break (CodeRabbit).
- The merge-back reads its pair style from the mapped byte; the box slack
  and the justify-all path take the shaped advance scaled once and the
  (already scaled) trim on top, so horizontal scale no longer scales the
  trim twice; area type keeps its planned rows (hanging applies to point
  and box lines only).
- The Styles editor row label goes through tl!, the dock comment loses its
  (#...), space-before keeps upstream's arrow order, tests get abs() and
  exact centering assertions; hi.tsv carries the label.
2026-10-24 22:30:30 +03:00
VladimirPozdnyakov d16841f2fb Merge remote-tracking branch 'upstream/main' into qol-type-hanging
# Conflicts:
#	crates/text/src/layout.rs
#	docs/scorecard.md
#	docs/ui-parity.md
#	scorecard/type.toml
2026-10-24 22:05:31 +03:00
vangel76andClaude Sonnet 5.5 47fa9fa3a5 Keep TOOL-214-14 partial and regenerate docs/scorecard.md
The row's own note says the window's Marquee tool and the Stamp's Heal modes
are still missing, so it stays partial; the scorecard is regenerated to match.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-24 14:32:41 +02:00
vangel76 053e1e0d03 Merge upstream/main into fix/3290-filter-mask-paint 2026-10-24 14:24:45 +02:00
vangel76 8c855f3fcd Merge upstream/main into fix/vp-stamp-tearoff 2026-10-24 13:56:35 +02:00
Khawar Zamman Wani 3450ca20bc select-mask: bind the preview's base cache to the document revision
A preview job still running when the document changed stored its base
selection back, and the next preview reused it for the new pixels.
BaseCache now records its revision and compute reuses it only on a match.
Also describe TOOL-214-1 as the full-window workspace.
2026-10-24 11:02:59 +05:30
Khawar Zamman Wani cbc55433fd Merge remote-tracking branch 'origin/main' into select-mask-workspace
# Conflicts:
#	crates/ui-egui/src/distort_ui.rs
#	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
#	docs/gaps.md
#	docs/target-app-parity.md
2026-10-24 09:22:48 +05:30
Ratul Paul 2818bc1e7c Merge upstream main and preserve UI scale progress
Keep all upstream contributor entries, progress notes and current document
dates alongside the existing intermediate UI scale feature.

Validation: fmt, locked engine/UI tests (6389 passed), Clippy, layers, wasm,
scorecard generation/check, and panic_hunt all passed.
2026-10-24 09:41:37 +06:00
Jeremy YaoandClaude Opus 5.5 e332010d92 Merge branch 'main' into feature/animation-effects
Brings in 412 commits from main (cf9ff2a2). Two conflicts:
- crates/ui-egui/src/lib.rs: main added updates_ui::tick right after
  prefs_ui::tick, where this branch calls wheel_nav::unsmooth. Both stay,
  main's first; the update tick reads no input.
- Cargo.lock: main's, with cargo adding back this branch's one line (the
  desktop app's direct windows dependency).

docs/scorecard.md is regenerated; it differs from main only in UI-217-10.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 22:08:50 -04:00
aiongg 7aaa59712a Merge main into integration-batch-7 2026-10-23 20:37:05 +00:00
Jeremy YaoandClaude Opus 5.5 9232f2da4d Merge branch 'main' into feature/animation-effects
Brings in 72 commits from main (bde13687). Two conflicts:
- apps/photocraft-web/Cargo.toml: main added the web-sys RequestMode feature;
  the list is main's plus this branch's MediaQueryList.
- crates/ui-egui/src/prefs_ui.rs: main deleted the translation-coverage test
  preference_labels_are_translated (c3aa3f9e, missing translations are now
  reported by xtask ci); this branch had only adjusted it, so it goes.

docs/scorecard.md is regenerated; it differs from main only in UI-217-10.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 16:23:55 -04:00
Khawar Zamman WaniandClaude Opus 5.5 4e816dc0ca feat(ui): Photoshop's Select and Mask workspace
Select > Select and Mask... opens a full-window workspace laid out as
Photoshop's, replacing the parameter dialog:

- options bar: tool, add/subtract, Size, Hardness (Brush), Sample All
  Layers, Select Subject, Refine Hair (greyed: #2671)
- tools: Quick Selection W, Refine Edge Brush R, Brush B, Object
  Selection W, Lasso and Polygonal Lasso L (one slot), Hand H, Zoom Z;
  Shift+W / Shift+L cycle
- the document under its tab, shown in the chosen view
- Properties: Remember Settings, View Mode (view letters, Show Edge J,
  Show Original P, Real-Time Refinement, High Quality Preview,
  Transparency/Opacity, Overlay colour and Indicates), Refine Mode
  (Object Aware greyed: #2788), Edge Detection, Global Refinements with
  Clear Selection and Invert, Output Settings; Reset, OK, Cancel

The tools become select.refineEdge `edits` (the Refine Edge Brush its
`refineStrokes`): OK is one history step, Cancel drops everything,
Ctrl+Z undoes per edit. The preview runs in the background on a reduced
copy (full size with High Quality Preview), reusing the selection after
the edits it already applied; Real-Time Refinement previews the stroke
being drawn. A targeted layer mask is refined and output to the mask.

Closes #7069. Closes #8148.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 20:47:26 +05:30
Jason DandClaude Opus 5.5 e4acb3c5ca Merge PR 3 (now on current main) into PR 4
Brings split/tiff-channels-io at f53aa0b9 (PR 1 and PR 2 on main
1695f323). Resolutions:
- PsdExportOptions: main's read_linked_files kept; PR 3's
  photoshop_spot_polarity switch stays removed, as this branch does.
- crates/io/src/lib.rs: main's import_psd(), calling
  psd_to_document_decoded without the removed PsdImportOptions.
- docs: PR 3's and main's text, with this branch's PSD statements
  re-applied (dated 2026-10-23). docs/scorecard.md is regenerated next.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 09:10:08 -04:00
Jason DandClaude Opus 5.5 e5be3083a7 Merge PR 1 (codecs, now on current main) into PR 3
Brings split/tiff-extra-samples-codecs at e6fca054, which merged main
1695f323. Conflicts:
- crates/io/src/lib.rs: main moved PSD import into import_psd(); it now
  passes PsdImportOptions::default().
- PsdExportOptions (psd_export.rs, tiff_layers.rs): main's new
  read_linked_files next to this branch's photoshop_spot_polarity.
- docs: main's newer status lines and rows, with this branch's TIFF
  statements re-applied (dated 2026-10-23). docs/scorecard.md is main's
  and is regenerated after PR 2 is merged too.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 08:48:35 -04:00
Khawar Zamman WaniandClaude Opus 5.5 4970534e05 feat(engine): Select and Mask tool edits as select.refineEdge params
select.refineEdge takes `edits`: the Select and Mask workspace's Quick
Selection, Brush, Lasso, Object Selection, Select Subject, Clear Selection
and Invert, applied in order to the starting selection (or layer mask)
before the edge is refined. Cancel discards them, OK is one history step,
and agents drive them over MCP and the control channel.

- engine/select_mask_edits.rs: parse (bounded, every bad field an Err)
  and a pure apply/apply_one the workspace preview can share
- algo matting::brush_region: soft round brush coverage (hardness)
- ATN export reports steps with edits instead of dropping them
- "Edits" label in the 21 catalogs

Part of #7069 and #8148 (the workspace UI follows in a second PR).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 10:30:46 +05:30
Ratul Paul b088a6cbac Merge upstream main and retain complete UI scale coverage
Preserve upstream progress documentation alongside the scale-preset notes.
Add numeric preset labels to the newly introduced Hindi catalog, keeping all
21 catalogs covered. Preserve contributors, tests and existing coauthor credit.

Validation: fmt, locked engine/UI tests (6196 passed), Clippy, layers, wasm,
scorecard generation/check, and panic_hunt all passed.
2026-10-23 10:04:33 +06:00
Jeremy YaoandClaude Opus 5.5 a0f29d4cc2 Merge branch 'main' into feature/animation-effects
Brings in 2794 commits from main (98de85c6). Resolved as the PR review
suggested:
- wheel_nav.rs, canvas.rs, panels.rs: main's read_with(.., smooth,
  touch_gestures) stays, and its callers (the canvas's two wheel reads and the
  Navigator) pass the resolved Animation Effects value,
  !app.prefs_rt.animations_off, instead of the removed
  interface.enable_animations. That flag works in every window, a second OS
  window for a document included; unsmooth stays for the main window's panels
  and lists.
- apps/photocraft/Cargo.toml: main's NSGraphics feature (Beep When Done) next
  to this branch's NSAccessibility and NSWorkspace.
- docs/scorecard.md is regenerated; the UI-217-10 note says where the glide
  is taken out now.
- French and Russian gained their own "On" entries on main, so this branch's
  copies are dropped.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 18:33:59 -04:00
David Mann 9e7b35b716 Integration: stack #6055 (its merge onto main, conflicts resolved) 2026-10-22 23:40:11 +02:00
David MannandClaude Opus 5.5 945a10dc7c Merge PR #6055: Color panel: Photoshop's panel-menu modes, the same in every theme (#6000)
Conflicts:
- crates/ui-egui/src/i18n/{cs,de,el,es,fr,hu,id,it,ja,ko,nl,pl,pt-br,ru,sr,tr,uk,vi,zh-hans,zh-hant}.tsv: kept every key of both sides (main's block, then the PR's Color panel block); no duplicate keys.
- crates/ui-egui/src/panels.rs: took the PR's removal of color_picker/hsb_sliders/rgb_sliders (moved to color_panel_ui.rs); kept main's color_field_height doc comment; main's #5842 slider recolour tests ported to color_panel_tests.rs for the new HSB/RGB slider modes; main's black-HSB test dropped as the PR's hsb_sliders_take_values_on_black covers it.
- crates/ui-egui/src/color_panel_ui.rs (no textual conflict, adapted): set_color now goes through apply_color::foreground_changed with the gesture (was type_tool::foreground_changed), so every mode (sliders, ramp, alerts, wheel) recolours selected type/shapes tool-gated in one undo step per gesture; panel() calls apply_color::track_focus.
- crates/ui-egui/src/color_panel_tests.rs (adapted): new every_slider_mode_recolours_the_selected_shape test.
- docs/gaps.md, docs/ui-parity.md: union of both sides' status lines, rows and revision history; the PR's done row replaces the old "missing" Color panel row.
- docs/scorecard.md: generated, took b7-base's version.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-22 23:39:04 +02:00
David MannandClaude Opus 5.5 f56147655d Merge PR #5485: Add opt-out startup release checks and manual update status
Conflicts resolved:
- crates/ui-egui/src/i18n/hu.tsv: kept base's Bevel & Emboss keys, then the PR's update-check keys
- crates/ui-egui/src/i18n/ru.tsv: kept base's Bevel & Emboss keys, then the PR's update-check keys
- crates/ui-egui/src/i18n/sr.tsv: kept base's added sections, then the PR's update-check keys
- crates/ui-egui/src/i18n/tr.tsv: kept base's Bevel & Emboss keys, then the PR's update-check keys
- crates/ui-egui/src/menus.rs: kept base's saved-workspace entries, then the PR's Help › Check for Updates reordering
- docs/gaps.md: base status line with the PR's G17 clause prepended; PR revision row above base's rows
- docs/target-app-parity.md: base status line (updated 2026-10-22) with the PR's clause prepended; PR revision row above base's rows
- docs/scorecard.md: generated, took b7-base's version

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-22 23:38:46 +02:00