26 Commits
Author SHA1 Message Date
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
midasdf b60b58af6c Merge remote-tracking branch 'origin/main' into pr
# Conflicts:
#	docs/target-app-parity.md
2026-11-05 18:00:44 +09:00
Trevor BrownandClaude Fable 5.1 fb3efc02fc Merge upstream/main into feat/gradient-overlay-drag (both ROADMAP.md rows kept)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-11-04 10:46:39 -05:00
David MannandClaude Opus 5.5 f05bb0ea9b Fix-up for #9979, #9182 and #10837: review findings on the batch
- #9979: ui.dialog.set can no longer rewrite an open field picker's __colorPicker
  marker (its OK went to the Crop shield instead of the field), and Preferences Apply
  waits for an open colour picker as OK does, so it never saves a previewed colour.
  Both have regression tests that fail without the fix.
- #9182: the stress test's PC_BUILD_ROUNDS / PC_BUILDS_PER_DEVICE fall back to the
  default for 0, which ran no builds and passed.
- #10837: the ROADMAP entry no longer says a Latin hint rules windows-1251 out; the
  hint settles a word-initial rare letter and breaks exact ties.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-04 13:22:51 +01:00
Trevor BrownandClaude Opus 5.5 cc5f6d6875 Merge upstream/main into feat/gradient-overlay-drag
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 16:45:59 -05:00
Trevor BrownandClaude Opus 5.5 c0b23817d6 Merge upstream/main into fix/atn-mac-roman
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 16:43:47 -05:00
midasdf 7f592772c8 Merge remote-tracking branch 'origin/main' into pr
# Conflicts:
#	ROADMAP.md
2026-11-03 05:52:38 +09:00
FredApps 9236d27eb6 Merge current main into fix/gnome-window-decorations 2026-11-02 19:10:43 +01:00
Trevor BrownandClaude Fable 5.1 dab1280b1b Layer Style: a drag on the image moves a Gradient Overlay (#10763)
With the dialog on a Gradient Overlay page, a drag on the image moves the gradient's centre (params.offset, a fraction of the layer's bounds) by the pointer's movement over the layer's size, as a drag moves a shadow. Tests in layer_style and gradient_overlay.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-11-02 05:57:36 -05:00
Trevor BrownandClaude Fable 5.1 f0f80c016a Load Actions: Mac Roman step names with accented letters or a degree sign read as Mac Roman (#10774)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-11-02 05:24:32 -05:00
midasdf d1a02c7f2f Merge remote-tracking branch 'origin/main' into pr
# Conflicts:
#	docs/target-app-parity.md
2026-11-01 22:50:04 +09:00
aiongg 6d737c219e docs: tidy agent, contributor and release docs 2026-10-31 04:17:45 +00:00
Daniel 17c5fb36af test(docs): preserve integrated Linux title bar and remove redundant NOTICE install 2026-10-26 11:57:44 +01:00
Daniel 8e1cf9dc97 Merge latest upstream main and preserve GNOME titlebar defaults
Retain PhotoCraft's updated UI and preferences, while preserving explicit saved titlebar settings, Linux frame dependencies, regression tests, packaging notices and roadmap entry.
2026-10-24 10:32:26 +02:00
midasdf 1779e69c7d Merge remote-tracking branch 'origin/main' into jp/print-paper-sizes 2026-10-23 21:01:23 +09:00
midasdf fadb558d6c Merge origin/main into jp/print-paper-sizes
Conflicts resolved keeping both sides, newest first:
- ROADMAP.md: status line, progress log, revision history
- docs/printing.md: Paper sizes then Positioning the preview
- docs/target-app-parity.md: status line, Print row, revision history
2026-10-23 02:02:40 +09:00
aiongg ffa400c754 Keep tests correct and docs current with one test binary per crate
- gpu: the test modules share one GPU_LOCK, and timing and vector_mask
  take it too, so one process drives one wgpu device at a time.
- ui-egui: the wgpu tests in pattern_preview_canvas, adjust_preview_gpu,
  marquee_autoscroll and layout_perf take gpu_lock().
- affinity compound_limits: the child process selects its test by the
  module path (compound_limits::<name>); with --exact, the bare name
  matches no test and the child passes without running the check.
- xtask scorecard reads crates/io/tests/it/corpus.rs.
- Docs and comments name the new test paths and the --test it filters.
2026-10-22 16:55:34 +00:00
aiongg ba120dc48e Integration: track t06
# Conflicts:
#	ROADMAP.md
#	crates/ui-egui/src/i18n/tr.tsv
#	docs/gaps.md
#	docs/ui-parity.md
2026-10-22 15:38:19 +00:00
Daniel Miguel 1d70f5d6bf M0: default to the system title bar on Linux and preserve saved choices 2026-10-21 20:02:27 +02:00
midasdf 161c1d21f7 Print: Japanese paper sizes (はがき, 往復はがき, JIS B5/B4, photo sizes)
Japanese printing had no paper of its own: the Print dialog and `file.print`
only offered letter/legal/tabloid/A3–A5/4x6/5x7, so a 年賀状 (New Year card),
はがき, a JIS B5 handout or an L判 photo could not be printed or exported to
PDF at its size. Add the customary papers at their exact metric sizes after the
existing entries, whose order and sizes are unchanged:

はがき 100×148 mm (283.46×419.53 pt), 往復はがき 148×200, JIS B5 182×257
(515.91×728.50), JIS B4 257×364 (728.50×1031.81), A6, L判 89×127
(252.28×360.00), 2L判 127×178, KG判 102×152, 六切 203×254 and 四切 254×305.

Names resolve case-, space- and punctuation-insensitively, and the customary
names are aliases (はがき/ハガキ/葉書/ポストカード, 往復はがき, JIS B5/B5 (JIS),
JIS B4/B4 (JIS), L判/Lサイズ/L-size, 2L判, KG判, 六切/6切, 四切/4切). The Print
dialog lists the sizes with their customary names and metric sizes, and the PDF
page (MediaBox) takes the paper's size.

Tests: `print_cmds::tests::japanese_paper_sizes_and_aliases` pins every size to
0.1 pt, the aliases and the unchanged existing papers;
`japanese_paper_sizes_reach_the_pdf_page` prints on はがき, L判, the はがき alias
and JIS B5 and reads the actual PDF MediaBox (283.46×419.53 and 252.28×360.00 pt).

Docs: docs/printing.md gains a Paper sizes section, docs/target-app-parity.md's
print row and revision history, and ROADMAP.md's progress log and revision
history, dated 2026-10-22; existing revision rows keep their dates.
2026-10-22 01:35:17 +09:00
Stepan Pavlenko e4bc5c25e8 i18n(ru): translate the dynamic labels the Russian catalog was missing
The Russian catalog passed `cargo xtask i18n-coverage` (100% of measured keys)
but lacked the runtime-only labels the other catalogs already carry, so they
showed in English: filter and adjustment parameter names and choices, gallery
names, Camera Raw panels (Balance/Clarity/Dehaze/Color Mixer/Texture/…),
History/Layers/paths/channels menu labels, metadata and File Info fields,
System Info and hardware status lines, rasterize prompts, composed status
templates and dialog text.

All of them are translated (1,229 keys added; the catalog is now 4,227 keys
against upstream's 2,998), written from the meaning of the English labels and
reusing the vocabulary the catalog already uses (Highlights → Света,
Midtones → Полутона, Feather → Растушёвка, Pattern → узор). Filter and gallery
names are aligned with the menu labels already in the catalog so a filter never
reads two ways (Texturizer → Текстуризатор, Unsharp Mask → Нерезкое
маскирование, Shape Blur → Размытие по фигуре, …).

Tests: `russian_covers_generated_filter_options_and_gallery_names`
(filter_dialog.rs, the Italian/Korean/Spanish check) and
`russian_dynamic_status_hardware_and_dialog_labels_are_translated` (i18n/mod.rs).
Docs: docs/localization-ru.md (terminology), localization-parity, gaps G13,
ROADMAP, ATTRIBUTION and LICENSE-translations.

Validated on a rebase onto upstream/main: `cargo test -p photocraft-ui-egui
--lib` 2,998 passed / 0 failed; clippy clean (the only lint is a pre-existing
`nonminimal_bool` in canvas.rs, untouched here and present on upstream main);
`xtask layers` OK; `xtask wasm` OK; `xtask i18n-coverage` ru 1,863 / 1,863;
offscreen `snapshot` in Russian checked.
2026-10-18 02:27:44 +03:00
euisuhandOpenAI Codex f58107b505 docs: record Object Finder foreground detection fix
Document the boundary-based classification change and keep semantic segmentation explicitly open so the parity notes do not imply Photoshop-level recognition.

Closes #6548

Co-Authored-By: OpenAI Codex <noreply@openai.com>
2026-10-17 10:13:21 +09:00
Michael HigginsandClaude Opus 5.5 2388d82165 Docs: oracle floor, open issues, workspace size and layer filters match main (#5376) (#5382)
- ROADMAP.md: the oracle floor is 145 of 258 (crates/io/tests/corpus.rs,
  gaps.md G1), not 133 of 256; 953 open issues, not 579.
- docs/architecture.md: ~539,000 lines in ~1,310 files and ~8,040
  #[test] functions, recounted 2026-10-13.
- README.md: "a layer kind filter" instead of "layer filters"; only the
  Kind filter exists.
- AGENTS.md: drop an empty bullet at the end of section 7.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 01:58:22 -04:00
d8d8d9f3d2 Tools: Convert Point tool in the Pen flyout (#3204) (#3211)
Convert Point is a tool of its own, built on the existing path.convertPoint
edit that Pen + Alt already drives. A click makes a smooth anchor a corner, a
drag from an anchor pulls out smooth handles, a drag on a handle moves it
alone. The tool selects the anchor it converts so its handles show; a press on
empty canvas or a segment does nothing, and Cmd/Ctrl is Direct Selection, as
with the Pen. It shares the Pen's key (P).

Original glyph with an ATTRIBUTION.md row; tool name in all catalogs; README
tool list and the G6 / ui-parity / roadmap counts updated (tools 56 of 68, the
earlier 53 was stale).

Co-authored-by: Brandon Thomas <echelon@gmail.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 11:09:38 -04:00
ade5799165 Mirror the shell for right-to-left UI languages (DIST-220-4) (#3114)
* Mirror the shell for right-to-left UI languages (DIST-220-4)

Arabic, Hebrew, Persian and Urdu read right to left, but the window's
chrome was hard-wired left to right, so an RTL catalog (#2505) would
put Arabic labels into a left-to-right layout.

The reading direction now follows the language code
(i18n::dir_for_code: ar, ckb, dv, fa, he, ps, sd, ug, ur, yi), so a
catalog needs no extra setting and the LANGUAGES rows are unchanged.
In a right-to-left language the shell mirrors:

- the menu bar starts at the right with File; menus open under their
  title's right edge, and the arrow keys step through them in screen
  order
- the toolbox docks on the right, the panel dock and its rail on the
  left; tool flyouts open towards the canvas and their corner marks
  and the header chevrons follow
- the title, options and status bars read from the right, with the
  workspace controls and the Fit/progress group at the left end; the
  title and window-drag gap use the free span between them

New module direction.rs holds the helpers (start_panel/end_panel,
row/trailing layouts, horizontal_centered, the popup alignment). Left
to right, every change lays out as before.

No RTL catalog ships yet, so PHOTOCRAFT_UI_DIRECTION=rtl forces the
mirrored layout for review (read once, native only). Panel interiors,
dialogs, menu rows, submenus and document tabs stay left to right, and
egui still draws UI labels without Arabic shaping or bidi reordering;
docs/localization.md and the parity docs say so.

Adds Lucide's chevron-left (the status bar's info menu arrow points
left in RTL; Timeline's Previous frame button asked for it too and drew
the fallback square).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Localization docs: egui shapes Arabic words; what's missing is a font and bidi word order

egui 0.36 shapes right-to-left runs with HarfRust, so letters join within
a word. The gaps are an Arabic fallback font in the UI and paragraph bidi
(words are placed left to right; emilk/egui#8576, #8577).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: MathMattTech <334629259+MathMattTech@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 10:06:18 -04:00
Brandon ThomasandClaude Opus 5.5 939c8f2c70 Progress docs: target-app parity, gaps, alpha gate, readiness by audience (#2696)
Progress docs per craftrules standards/progress-docs.md: target-app parity (merges parity-estimate.md), gaps, roadmap with alpha gate, readiness by audience (full / mainstream / essentials) with Opus 5.5 hours, and UI, brush, format, hardware and localization parity docs. docs/parity.md is now docs/parity-checklist.md.

The Windows test failure (file_dialog::tests::save_dialogs_remember_where_each_document_was_last_saved) is pre-existing on main: the test hard-codes POSIX paths.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 15:09:04 -04:00