Commit Graph
424 Commits
Author SHA1 Message Date
aiongg 713197635d Merge origin/main into prefs/gpu-adapter-typed-read 2026-11-01 13:16:28 +00:00
David Mann 8e01f18a37 Merge PR #8725: feat(ui): Photoshop Fill/Stroke popover and full Color Picker for every colour swatch 2026-10-30 16:07:08 +01:00
David Mann b2db24400e Merge main at b1cfff9d3 into integration batch 10
Conflicts resolved as unions of both sides: codecs re-exports (PngRows + TiffBands), smart_cmds source imports
(main's source_surface_from_buffer and cache API with #8571's svg_source_image_in/convert_svg_source; main's
duplicate rendering import dropped), io flat.rs test modules (#8536's banded TIFF tests and main's PNG ones),
menus/invoke.rs (#8571's smart SVG intercept and main's layer.selectUnderCursor), state.rs (#8311's
type_box_overflow and main's type_insertion_style), the canvas_geom test keeps the is_finite guard, docs
status lines keep both change lists, i18n catalogs keep both sides' rows (hi.tsv: main's wording where both
added the same string).
2026-10-30 14:28:02 +01:00
Claude a825498e05 Merge storytold/photocraft main into the Fill/Stroke popover branch
748 upstream commits: append-only conflicts (i18n, ui-parity, people.toml,
the tools module lists) keep both sides. Scorecard: 12 of 183 settings do
nothing; docs/ui-parity.md follows it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TYsCL5E2GM6hUabP9dmYAv
2026-10-30 13:11:19 +00:00
Claude 7a2794c730 Merge storytold/photocraft main into the Fill/Stroke popover branch
217 upstream commits. Upstream added a colour swatch (Select and Mask's
overlay colour): it now opens the Color Picker titled "Color Picker
(Overlay Color)". Content-Aware Fill and Select and Mask leave their keys
to an open Color Picker, as they did for the swatch popup it replaced
(test keys_wait_while_the_overlay_colour_picker_is_open).
docs/ui-parity.md keeps the scorecard's 12 of 182.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TYsCL5E2GM6hUabP9dmYAv
2026-10-30 01:11:55 +00:00
FredApps 5349314b7f Refresh generated scorecard and restore original documentation workflow 2026-10-29 19:30:11 +01:00
FredApps 255ecc81d0 Remove 21 requested PR contributions from the 108-PR integration
Retain 87 PRs. Reconcile overlapping integration fixes and update testing scope.
Removed: #7153 #7742 #5493 #9282 #3455 #9172 #3139 #3967 #4783 #5453 #8347 #1991 #3345 #4042 #4305 #4883 #4890 #5090 #6621 #5870 #5939.

Combined CI pending for this source; historical portable artifact is not applicable.
2026-10-29 18:49:17 +01:00
Khawar Zamman Wani a24e155a6f Merge upstream main into large TIFF fix 2026-10-29 22:39:27 +05:30
aiongg c645d5fcc9 Merge pull request #8896 from wanikhawar/select-mask-workspace
Select and Mask: Photoshop's full-window workspace (#7069, #8148)
2026-10-29 12:15:14 -04:00
Claude b46caa37e5 Merge storytold/photocraft main into the Fill/Stroke popover branch
Clean merge of 92 upstream commits; scorecard unchanged (12 of 182).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TYsCL5E2GM6hUabP9dmYAv
2026-10-29 13:27:19 +00:00
FredApps e40cdadb63 Preserve opening snapshot assertions and refresh generated scorecard 2026-10-29 07:52:28 +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 959b41dca4 Merge approved PhotoCraft PR #9606: fix(ui): the Color panel remembers its options across restarts
Port behavior and regression coverage into current modules; preserve current upstream behavior.
Persist and restore Color panel options through the current dock/startup modules and regenerate the scorecard from current source.
2026-10-29 04:46:40 +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
Claude cd111a0339 Merge storytold/photocraft main into the Fill/Stroke popover branch
Clean merge of 16 upstream commits; scorecard unchanged (12 of 182).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TYsCL5E2GM6hUabP9dmYAv
2026-10-29 01:10:22 +00:00
David MannandClaude Opus 5.5 f66f749f96 Merge main
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 22:18:30 +01:00
aiongg e2f9ae6bfb Merge main into perf/9328-slow-frames
Conflicts in perf/budgets.toml and docs/scorecard.md: both sides added perf rows (P80 here, P81 and P82 from #9942). Kept all three; scorecard regenerated with cargo xtask scorecard.
2026-10-28 20:30:50 +00: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
Claude 30abc52781 Merge storytold/photocraft main into the Fill/Stroke popover branch
Upstream's strict-Clippy refactor removed glob imports and split the
Content-Aware Fill properties into caf_props_panel: the swatch title moved
there, and the frame loop calls crate::color_picker_ui::widget_tick.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TYsCL5E2GM6hUabP9dmYAv
2026-10-28 07:55:52 +00:00
Brennan StehlingandClaude Opus 5.5 a9c26551f1 perf: add P81/P82 redraw-area rows on full-canvas layers (#9329)
Track-only rows that check they hit the whole-document-redraw path and
print the refreshed pixel count: undo of a brush dab on a 16-bit
15000x10000 full-canvas layer (reps capped at 5) and a fill of a 2 %
selection on a 24 MP full-canvas layer.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-27 23:08:30 -07:00
Brennan Stehling 00522c852e Perf: P80, app frame time for a full CPU refresh of a 24 MP document (#9328)
Track-only row, the slow-frame recorder's worst case. A 24 MP photo plus
three full-canvas blended copies (Multiply, Screen, Overlay); each sample
toggles the top copy and times one harness.step(), so every frame
recomposites all 24 MP on the CPU (the photo's tiles are never uniform,
which keeps the reduced render's one-colour shortcut out of the way).
The row errors unless each frame recorded a CPU refresh covering at least
95 % of the canvas, so it can't silently take a fast path. 10 samples.
2026-10-27 23:06:56 -07:00
Khawar Zamman Wani 0ce7991aaa Merge origin/main into fix/8169-huge-tiff-open 2026-10-28 09:22:54 +05:30
Khawar Zamman Wani 4e22d214dc Merge origin/main into select-mask-workspace 2026-10-28 09:22:54 +05:30
aiongg a9e6f73ac5 Merge remote-tracking branch 'upstream/main' into HEAD 2026-10-28 02:31:52 +00:00
Brennan StehlingandClaude Opus 5.5 e43762ac0d Perf: rename P79 to the reduced composite it times (#7494)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-27 14:38:45 -07:00
Brennan Stehling 5b057e2247 Scorecard: regenerate for the cliff rows (#7494) 2026-10-27 14:38:45 -07:00
RickiNanoandClaude Opus 5.5 599b85a7cd Merge main into prefs/gpu-adapter-typed-read
Integration batch 9 (#9775) raised the preference count to 181 and
added its own 2026-10-27 status lines and history rows to gaps.md and
ui-parity.md. Both sides are kept: the scorecard regenerates to 11 of
181 do nothing, the branch's entries say 181 and are dated 2026-10-27,
above main's 12-of-181 rows.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 22:30:17 +01:00
Claude f84111c2d8 Merge storytold/photocraft main into the Fill/Stroke popover branch
i18n and ui-parity conflicts were append-only: upstream's entries first,
this branch's after. docs/scorecard.md regenerated (12 of 182).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TYsCL5E2GM6hUabP9dmYAv
2026-10-27 21:13:57 +00:00
Claude 957e7d3347 Merge storytold/photocraft main into the Fill/Stroke popover branch
Upstream moved the touched modules (dialogs/, tools/, widgets/ split) and
added its own Gradient tab to the shape Fill/Stroke swatches. Resolved by
porting this branch's changes onto the new layout:

- widgets/color.rs: color_edit_button* open the full Color Picker dialog
  (tests in widgets/color_button_tests.rs).
- tools/paint_picker.rs (was paint_picker.rs): the popover reuses
  shape_paint_ui::PaintChange (plus OpenPicker) and upstream's
  shape_gradient_ui Gradient tab instead of its own gradient preset list,
  so gradients now also work for the next shape's defaults.
- shape_paint_ui::swatch draws the popover; shape_options and
  vector_ui/options handle OpenPicker and Recently Used Colors.
- adjust_editors, caf_ui, file_ui call sites and tests moved to their
  new files; i18n entries appended after upstream's.
- docs/scorecard.md regenerated (12 of 181 settings unread).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TYsCL5E2GM6hUabP9dmYAv
2026-10-27 21:04:03 +00:00
RickiNanoandClaude Opus 5.5 3aff459ad8 Merge main into prefs/gpu-adapter-typed-read
Picks up the export speed work (#9877) and the rest of main. Main's
prefs audit now counts 180 preferences, so the regenerated scorecard
reads 11 of 180 do nothing, and the branch's doc entries say 180 to
match; the 2026-10-25 history rows keep their 178.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 20:27:58 +01:00
David MannandClaude Opus 5.5 5ccb6fb723 Merge main
Conflicts with main's batch #9880:
- psd file.rs / layer.rs: #5287 (PSB by encoded size, RLE tables widened on
  promotion) against #6583's lazy reader. Main's new widening and length code
  read `.data`, which #6583 leaves empty while the bytes stay in the source;
  it now goes through `encoded()` / `encoded_len()` (also the auto-merged
  lines in `rle_widening`, `encoded_len` and `LayerRecord::write`), and the
  lazy reader sets `write_as_psb: false`. New test
  `a_lazy_psd_promotes_to_the_same_psb_as_an_eager_one`: a lazily read PSD
  writes the same PSB bytes as an eager one; it fails with a `.data` read.
- direct_select.rs / vector_ui.rs: #9321's Type Path and #6353's hidden
  Work Path both kept.
- io tests main.rs: both modules. scorecard.md regenerated (12 of 181);
  ui-parity.md and gaps.md follow it.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-27 19:49:42 +01:00
e3b2854838 Integration: font menu fix-ups after merging main (#6526)
- Character section: a style picked under a family's ">" with type layers
  selected set the layers but not the style for new type (the options bar
  did both). Pick "Inter > Thin" in Properties > Character: new type stayed
  Regular.
- Faux bold: a pointed tip moved r/sin(half its angle) along its bisector,
  uncapped (3.9 r at 30 degrees, an A apex grew a spike), and tips sharper
  than about 20 degrees did not move at all. Every tip now moves at most
  2r, continuously; inner corners (the crotch of a V) keep their exact
  miter.
- Faux bold: each point searched past runs of coincident points for its
  neighbours, O(n^2); a contour of 50 000 copies of one point took ~8 s per
  glyph. Neighbours now come from one O(n) pass over the runs.
- prefs.reset {"path":"type"} and Preferences > Type > Reset Section wiped
  the favourite fonts; they are kept now (type.favoriteFonts by name, or
  Reset All, still clear them).
- An expanded family whose own row scrolled out of view lost its style
  rows, so the list below jumped up.
- Show Similar Fonts re-sorted around each font an arrow step applied, so
  Down went back and forth between two fonts; the list now compares with
  the font current when the filter was turned on (or the menu opened).
- Docs: an uninstalled favourite is kept but not listed; FAUX_BOLD_RADIUS
  and the raster budget describe the thickened outline; the unused
  "Recent font list" rows are gone; docs/scorecard.md regenerated (the
  favourite fonts are one more setting).

Co-authored-by: D-monized <341904702+D-monized@users.noreply.github.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 14:52:20 +01:00
David Mann 9ca53a162a Merge remote-tracking branch 'origin/main' into HEAD
# Conflicts:
#	crates/ui-egui/src/panels.rs
#	docs/scorecard.md
2026-10-26 15:01:52 +01:00
RickiNanoandClaude Opus 5.5 bcd8f89168 Prefs: startup reads Graphics Adapter through the typed Performance section
Graphics Adapter (performance.gpuAdapter) always took effect, but startup read it by its raw
JSON key, which the scorecard prefs audit can't see, so it was counted as a setting that does
nothing. read_gpu_adapter now deserialises the performance section into prefs::Performance, as
read_display_server already does. A malformed value elsewhere in the section falls back to
automatic, as the display server does.

Settings that do nothing: 12 -> 11 of 178. Scorecard regenerated; gaps G9, ui-parity and
target-app-parity updated.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 07:14:21 +01:00
Khawar Zamman Wani 56008a682d Merge origin/main into select-mask-workspace 2026-10-26 10:20:37 +05:30
Khawar Zamman Wani cdc3bdbd2f Merge origin/main into fix/8169-huge-tiff-open 2026-10-26 10:20:12 +05:30
Hector VillarrealandClaude Opus 5.5 a7b412d422 docs: regenerate the scorecard
The gate's scorecard check failed on #9606: the new remembered Color
panel option is one more preference (179). Regenerated with
`cargo xtask scorecard`.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 22:03:16 -06:00
Brennan Stehling 43581abc5f perf budgets: judge P25 on p95, keep P16 unenforced (#7494)
P25 broke at 299 ms once on the contended runner (2026-10-18). It now uses
the p95 metric with the same 200 ms budget; with n <= 20 the p95 rank equals
the max, so on the runner (n = 8) this has no effect until reps >= 21.
P16 stays unenforced: the new --from enforce report over the 2026-10-18..25
nightlies lists it as flaky (p95 103.7 ms on 2026-10-18).
2026-10-25 16:04:30 -07:00
Brennan Stehling 6caa8056ce scorecard: label a contended baseline and say where the regression check runs (#7494)
The 2026-10-05 baseline was recorded at load 224.9 on 14 cores; the scorecard now
says so without changing a number, shows the baseline's run count, and replaces
the claim that the nightly checks regressions with the machine class it actually
runs on.
2026-10-25 16:04:30 -07:00
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 MannandClaude Opus 5.5 ac7de75007 Integration: scorecard regenerated without #4573
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-25 16:36:23 +01:00
David Mann ff479a2c01 Merge PR #9139: Rebuild the Histogram panel
# Conflicts:
#	crates/ui-egui/src/control.rs
#	docs/scorecard.md
#	docs/ui-parity.md
2026-10-25 16:11:31 +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 MannandClaude Opus 5.5 53e118bec5 Integration: scorecard summary counts File compatibility rows again (#3297)
The summary row still said 9/13/5 after an earlier batch PR moved FILE-215-11 to partial,
and #3297 moves FILE-215-3 to done: scorecard/file_compat.toml now counts 10 done,
14 partial, 3 missing.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 15:46:30 +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 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
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