Commit Graph
1644 Commits
Author SHA1 Message Date
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
aiongg 9c7cc91f82 Integration: track t05
# Conflicts:
#	crates/ui-egui/src/i18n/tr.tsv
#	crates/ui-egui/src/shortcuts.rs
#	docs/ui-parity.md
2026-10-22 15:38:18 +00:00
aiongg 1f0177f23c Integration: track t04
# Conflicts:
#	ATTRIBUTION.md
#	contributors/people.toml
#	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
2026-10-22 15:38:17 +00:00
aiongg 4d1b922ddf Integration: track t02
# Conflicts:
#	contributors/people.toml
#	crates/engine/src/file_cmds/tests.rs
#	crates/engine/src/print_cmds/tests.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
2026-10-22 15:38:14 +00:00
aiongg 82cf3c828c Integration: track t01
# 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/vi.tsv
#	crates/ui-egui/src/i18n/zh-hans.tsv
#	crates/ui-egui/src/i18n/zh-hant.tsv
#	docs/file-format-parity.md
#	docs/gaps.md
2026-10-22 15:38:14 +00:00
aiongg 0e80156397 Integration: track t16
Resolutions: CLI usage, flag lists and flag parsing carry both --tiff-compression (t15) and
--jpeg-format (t16); file.saveACopy, batch, imageProcessor and layersToFiles param specs carry
both tiffCompression and jpegFormat; file_cmds keeps tiff_compression_param and
jpeg_format_param; atn_cmds keeps flag_set/applies_at_canvas_bounds (t15) and UNHOLDABLE (t16),
edit.transform uses the pixel_target guard (t15) with layer_ref(p)? (t16); ui-egui open paths
build ImportOptions (t16) and apply raw_defaults (t15); docs headers/rows unioned; atn tests keep
both sides; tr.tsv "Keep Using CPU" kept once.
2026-10-22 15:38:13 +00:00
aiongg 3d1a4d6679 Integration: track t15
# Conflicts:
#	crates/engine/src/atn_cmds/tests.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/file-format-parity.md
#	docs/ui-parity.md
2026-10-22 15:38:12 +00:00
aiongg d1cd1387a1 Integration: fix the two merged tests that no longer compile against main (StrokeFx overprint, per-tool Sample All Layers) 2026-10-22 15:37:35 +00:00
aiongg 8ac5ae11ec Merge PR #8245: fix(engine): Remove Background looks for the subject in the layer, not the canvas (#8235) 2026-10-22 15:37:33 +00:00
aiongg 05b0ae05e4 Merge PR #6896: fix: detect dominant foregrounds with Object Finder
docs/gaps.md: header and change-log row once each (the PR's row on top).
docs/ui-parity.md: header and change-log row once each; the Selection row keeps main's #6549 sentence and adds the PR's #6548 sentence.
2026-10-22 15:37:31 +00:00
aiongg 7e3517c090 Merge PR #6835: Object Finder: hovering with an empty active layer shows the status-bar hint (#6549) 2026-10-22 15:37:30 +00:00
aiongg a1d23fd2a6 Merge PR #6484: Shapes: the Color panel, Swatches and Gradients fill the selected shape (#5568)
crates/engine/src/presets/tests.rs: tests appended by both sides, kept whole (the PR's before main's persistence sections).
crates/ui-egui/src/swatches_ui.rs: tests appended by both sides, kept whole.
2026-10-22 15:37:30 +00:00
aiongg 26dbd7953b Merge PR #5834: Shapes: rounded corners on live triangles, polygons and stars (TOOL-214-12)
docs/scorecard.md: ours (regenerated at combine).
docs/ui-parity.md: kept main's header and added the PR's change entry once.
2026-10-22 15:37:29 +00:00
aiongg 7654482fd1 Merge PR #3330: Moving a shape keeps its rendering: Artboards to Files matches the reference app
crates/engine/src/layer_multi_cmds.rs: took the PR's call to shift_shape; main's added check that the moved path (plus stroke) stays inside the canvas moved into shift_shape (vector_cmds.rs) so both behaviours hold.
2026-10-22 15:37:29 +00:00
aiongg 62d4573609 Integration: cargo fmt 2026-10-22 02:41:49 +00:00
aiongg 624b7ebaf7 Integration: #7262 Clipping Mask export refuses a numeric layer reference, as the other layer events do 2026-10-22 02:32:30 +00:00
aiongg dfde38919e Merge PR #7883: Save As JPEG: JPEG Options dialog (quality 0–12, Baseline / Optimized / Progressive) (FILE-215-19)
crates/ui-egui/src/lib.rs: replay_save doc comment names both Export As and JPEG; replay_save uses the PR's FormatChoices::from_step, after main's export_dialog::replay branch.
docs/file-format-parity.md: header keeps main's text plus the JPEG Options item (last updated 2026-10-19); TIFF row is main's, JPEG row is the PR's; change-log rows once each, newest first.
docs/gaps.md: header keeps main's text plus the G10 item (last updated 2026-10-19).
2026-10-22 02:27:46 +00:00
aiongg 0ad6cfccd7 Merge PR #7795: Print: Scale to Fit Media fills the driver's printable area (#7782)
Conflicts:
crates/engine/src/print_cmds/tests.rs: appended tests, kept both
2026-10-22 02:27:40 +00:00
aiongg 57028352b4 Merge PR #7662: Preferences: Zoom Resizes Windows resizes floating document windows, and the Zoom tool shows it as Resize Windows to Fit (#204)
crates/engine/src/prefs.rs: neither general.zoomResizesWindows (this PR implements it) nor general.animatedZoom (PR #3698 in this track implements it) stays in HIDDEN_UNTIL_IMPLEMENTED.
crates/ui-egui/src/prefs_ui.rs: kept both is_hidden asserts.
crates/ui-egui/src/i18n/*.tsv (20 catalogs): union of both sides' rows; no duplicate (context, source) keys.
docs/scorecard.md: ours (regenerated at combine).
2026-10-22 02:27:20 +00:00
aiongg 79ff67c3f2 Merge PR #7249: fix(atn): reject non-replace select.rect modes in .atn export (#7194)
Conflicts:
crates/engine/src/atn_cmds/tests.rs: appended tests, kept both
2026-10-22 02:27:06 +00:00
aiongg e42cfd2159 Merge PR #7574: Move tool: moving selected pixels shrinks the selection, transform controls and snapping to them (#7538)
crates/engine/src/float_cmds.rs: kept main's cut_piece (parallel, shares full tiles) and try_lift_coverage, and the PR's CutParts::outline; the outline is read from the piece's alpha, which holds min(alpha, selection) as the PR's own lift loop computed, instead of replacing cut_piece with that loop.
crates/engine/src/float_cmds/tests.rs: git interleaved the two sides' new tests; took main's file and appended the PR's added tests whole.
docs/ui-parity.md: header line keeps main's text plus the PR's #7538 item.
2026-10-22 02:26:55 +00:00
aiongg ac0e29ca4c Merge PR #7115: fix(atn): map Apply Layer Comp steps by name (#7101)
Conflicts:
docs/gaps.md: header line is ours plus the PR's missing change item (later Last updated date); change-log rows kept both, newest first
docs/file-format-parity.md: same
2026-10-22 02:26:51 +00:00
aiongg d1f5bae8c3 Merge PR #7232: fix(atn): export recorded layer.select with name parameter (#7185)
Conflicts:
crates/engine/src/atn_cmds/tests.rs: appended tests, kept both
2026-10-22 02:26:31 +00:00
aiongg 8a4fe7c607 Merge PR #7656: Refuse .atn export of resolution-only Image Size without keepPrintSize
Conflicts:
crates/engine/src/atn_cmds/tests.rs: appended tests, kept both
2026-10-22 02:26:26 +00:00
aiongg 02c9e32d1d Merge PR #8088: fix(type): resolve exact PostScript names in type.create 2026-10-22 02:26:06 +00:00
aiongg 4eef797fdf Merge PR #7968: fix(atn): a Group Layers step keeps its explicit layer through .atn (#7236)
Conflicts:
crates/engine/src/atn_cmds/tests.rs: appended test helper and tests (two blocks), kept both
2026-10-22 02:25:59 +00:00
aiongg d38019873a Merge PR #7142: perf(type): refresh type layers without cloning the document (#7092) 2026-10-22 02:25:53 +00:00
aiongg a77b078589 Merge PR #7417: Camera Raw: choose the demosaic method when a raw opens
crates/io/src/lib.rs: kept main's import_psd (and its call in import_stages); import_stages takes the PR's ImportOptions argument.
crates/io/src/raw.rs: the PR's demosaic summary on main's developed_document(name, bytes, ...) call.
docs/scorecard.md: ours (regenerated at combine).
2026-10-22 02:25:41 +00:00
aiongg 49a09628b6 Merge PR #7637: Record one action call when playback pauses for a step dialog
Conflicts:
crates/ui-egui/src/i18n/*.tsv (20 catalogs): rows kept both; no duplicate (context, source) keys
2026-10-22 02:25:34 +00:00
aiongg 624c9b743e Merge PR #7262: fix(atn): reject numeric layer references in .atn export (#7248)
crates/engine/src/jobs.rs: kept both Running fields (recorded_by, pre_selected) and both initialisers; main's new_fx_target block and foreign-recording flush kept; after_command takes the PR's pre_selected argument at both call sites.
2026-10-22 02:25:23 +00:00
aiongg b7e01f8bda Merge PR #7591: fix(atn): refuse strict export of canvas-bound selection modifies and placed pattern buckets
crates/engine/src/atn_cmds.rs: no `uncarried` macro arm; the four Select > Modify events (Feather, Expand, Contract, Smooth) use the existing `unless` arm with a new predicate `applies_at_canvas_bounds` (wraps the PR's `flag_set`). Helper fns kept both (`preserves_roundness`, `flag_set`).
crates/engine/src/atn_cmds/tests.rs: both sides' appended tests kept whole.
2026-10-22 02:24:51 +00:00
aiongg 3a72e25b02 Merge PR #3921: feat(layer-style): expose Bevel & Emboss highlight and shadow shading
crates/engine/src/layer_style.rs: union of main's glossAntiAlias and the PR's six shading params in the bevel defaults and overlay_effect; both sides' tests kept.
crates/ui-egui/src/layer_style.rs: union: P::Contour(Some("glossAntiAlias")) plus the six new rows and values_of lines.
crates/ui-egui/src/i18n/*.tsv (16 catalogs): union of both sides' rows; no duplicate (context, source) keys.
2026-10-22 02:24:33 +00:00
aiongg fe28d9d43c Merge PR #7395: Auto-Blend Layers: mask and blend the whole layers, past the canvas too
crates/engine/src/align_cmds.rs (tests module): four interleaved hunks of new tests; resolved as all of ours, then all of theirs, each test whole.
2026-10-22 02:24:08 +00:00
aiongg ff2ba37278 Merge PR #8353: Scale shape strokes when resizing for Export As
crates/ui-egui/src/export_dialog.rs: tests appended by both sides; kept both whole.
2026-10-22 02:23:59 +00:00
aiongg e41060429d Merge PR #7258: fix(atn): reject off-center radial blur in .atn export (#7234)
crates/engine/src/atn_cmds.rs: kept main's helper block (SMART_BRUSH, Color Range, clipping events) whole and the PR's radial blur consts and fns after it.
crates/engine/src/atn_cmds/tests.rs: kept both sides' tests whole.
2026-10-22 02:23:51 +00:00
aiongg 18bc4ab876 Merge PR #5816: Auto-Blend Layers: blend a layer the canvas crops to all-overlap (#5745)
crates/engine/src/align_cmds.rs (tests module): two interleaved hunks of new tests; resolved as all of ours, then all of theirs, both tests whole.
2026-10-22 02:23:50 +00:00
aiongg 8df0e70e3e Merge PR #8168: File names: keep Windows device names (nul, con, com1...) off the disk
crates/engine/src/file_cmds/tests.rs: tests appended by both sides; kept both whole.
2026-10-22 02:23:46 +00:00
aiongg 698aef6bab Merge PR #7396: Auto-Blend Layers: Seamless Tones and Colors turns on gain compensation
crates/engine/src/align_cmds.rs (tests module): both sides' appended tests kept whole.
2026-10-22 02:23:39 +00:00
aiongg 223e207642 Merge PR #8142: Quick Export: preserve floating-point EXR output (#7562) 2026-10-22 02:23:29 +00:00
aiongg 9d2612fc01 Merge PR #7611: Refuse strict ATN export of Select and Mask with brush strokes
crates/engine/src/atn_cmds.rs: kept main's smartBrushWorkspace/autoCutout/ClrR events and comment; refineSelectionEdge uses the PR's refine_edge_to, which also refuses a step with sampleAllLayers (main's earlier inline check).
crates/engine/src/atn_cmds/tests.rs: kept both sides' tests whole.
2026-10-22 02:23:25 +00:00
aiongg c76bae7f03 Merge PR #5635: Animated WebP: every frame loads into video layers (#1198)
docs/file-format-parity.md: header line kept from main with the animated WebP item added in front; BMP row from main; WebP row from main plus the PR's animation sentence; the PR's change-log line added once, above the first 2026-10-14 row.
2026-10-22 02:23:20 +00:00
aiongg d8acd0579a Integration: #7976 bound the ';' search in xml_unescape to 13 bytes
A long run of '&' without a nearby ';' scanned to the end of the string for every '&' (quadratic). Adds a test with a 200k-ampersand description.
2026-10-22 02:23:17 +00:00
aiongg 9af659d2f2 Merge PR #3868: feat(ui): nest light and dark themes into submenus
crates/ui-egui/src/i18n/*.tsv (20 catalogs): rows kept both; no duplicate (context, source) keys.
2026-10-22 02:23:14 +00:00
aiongg 9a9aab3bb3 Merge PR #7976: Decode numeric character references in File Info XMP text 2026-10-22 02:23:01 +00:00
aiongg 2d74af4c8e Merge PR #7721: fix(actions): refuse lossy fractional Crystallize ATN export
crates/engine/src/atn_cmds.rs: kept main's fields_from/fields_to doc comments and range-checked Kind::Long arm; one ExactLong definition (main's); Ripple Amnt stays ExactLong and Crystallize ClSz becomes ExactLong.
2026-10-22 02:22:59 +00:00
aiongg 11c3f1ec92 Merge PR #5180: Type tool: click a path to start type on it (TYPE-218-1, #218)
contributors/people.toml: union of both sides' entries.
crates/ui-egui/src/canvas.rs: main's Move cursor (arrow) plus the PR's Type path-cursor arm.
crates/ui-egui/src/type_tool.rs: main's has_transform in draw_overlay; the PR's earlier `shape` binding kept, the duplicate binding dropped.
crates/ui-egui/src/vector_ui.rs: main's draw_overlay (paths already show with any tool), the PR's vector_tool line dropped.
docs/gaps.md: header line from main, G8 text from main with the click-on-path clause, change-log lines of both.
2026-10-22 02:22:58 +00:00
aiongg 5b08c0ce79 Merge PR #7811: Preferences › Raw Defaults › Resolution: a developed raw opens at it (#7789)
docs/scorecard.md: ours (regenerated at combine).
2026-10-22 02:22:53 +00:00
aiongg a53c1ed1d7 Merge PR #7759: Actions: a setting the reference app's event cannot hold refuses the step
crates/engine/src/atn_cmds.rs: the filter macro's to guard keeps both checks (pixel_target && !skip && holds_its_settings); kept main's preserves_roundness and the PR's UNHOLDABLE table and holds_its_settings.
crates/engine/src/atn_cmds/tests.rs: kept both sides' tests whole.
2026-10-22 02:22:51 +00:00
aiongg 334636fc1e Merge PR #8085: Preferences › File Handling: Do not append "copy" to filename when saving a copy (#8080)
docs/scorecard.md: ours (regenerated at combine).
2026-10-22 02:22:50 +00:00
aiongg aa4f03a8ad Merge PR #7571: Refuse strict .atn export of Apply Image with a blending mask
Conflicts:
crates/engine/src/atn_cmds/tests.rs: appended tests, kept both
2026-10-22 02:22:48 +00:00