Commit Graph
3466 Commits
Author SHA1 Message Date
aiongg e2169d0dfd Merge PR #7847: Print: Portrait and Landscape in the Print dialog on Windows 2026-10-20 18:39:29 +00:00
aiongg c247a34bb6 Merge PR #7892: Indexed GIF opens in Indexed Color with its colour table, as in Photoshop (#7886) 2026-10-20 18:39:28 +00:00
aiongg c8cf9eaf0d Merge PR #7180: Brushes: accept .abr files up to 1 GiB 2026-10-20 18:39:28 +00:00
aiongg ea7553f031 Merge PR #5111: Large documents: a gigapixel New Document draws without freezing (#4017) 2026-10-20 18:39:28 +00:00
aiongg b82540845f Merge PR #7773: Give a new type layer a full Txt2 object and its own frame 2026-10-20 18:39:28 +00:00
aiongg 0ae688b59a Merge PR #6939: Mixer Brush: Clean Brush empties the brush, and the automatic Load and Clean can be switched off 2026-10-20 18:39:27 +00:00
aiongg 528ae50c7a Merge PR #6920: Pen: a finished path keeps its anchor squares on screen (#6884) 2026-10-20 18:39:27 +00:00
aiongg 20fb59b3f0 Merge PR #6222: Reveal newly created selections after hiding Extras 2026-10-20 18:39:27 +00:00
aiongg 40fed5e8ef Merge PR #5803: Snap: View › Snap off also disables smart-guide snapping (#5782) 2026-10-20 18:39:27 +00:00
aiongg c369483455 Merge PR #7225: Group all selected layers from the Layers panel footer 2026-10-20 18:39:27 +00:00
NetterSilverandClaude Opus 5.5 e86e6910ae fix(psd): bound the base style run a save copies per run
The base run comes from the file and is cloned once per character run, so
it now has to fit the template node budget, and each font is looked up
once per name. Also names the reopened-layer tuple in psd_kerning for
clippy::type_complexity.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-20 20:07:39 +02:00
f65cea0ea0 Integration: keep split warps past the quilt limit in place on PSD save (#6913)
The reader takes a `quiltWarp` of at most 64 patches along a side, but the
writer wrote any split warp and framed `Trnf` by its control box. A Warp
Grid of 64 plus one more split (65 patches) was refused on reopen while its
corners still framed the warped box, so the layer came back stretched and
shifted ([2,0,0,2,120,210] -> [2.4,0,0,2.4,100,200]). Such a warp is now
written as no warp, with a message, framed by the source rect, as before
#6913, and a stale imported `quiltWarp` is dropped.

Co-authored-by: Thang Nguyen <13392060+thangnm93@users.noreply.github.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 19:53:57 +02:00
David MannandClaude Opus 5.5 b3dfd1bf6a Regenerate docs/scorecard.md
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 19:51:52 +02:00
NetterSilverandClaude Opus 5.5 20c9103148 fix(psd): write complete Txt2 style runs from the layer, number only file indices as kept
Photoshop reads the character style from Txt2 and quit on the bare run
(`/0 0 /11 mode`) that new objects got. New and edited objects now get one
style run per character run, built on one of the object's own runs with
every key kept, and font, size, faux styles, leading, scales, tracking,
fill colour, OpenType keys and auto-kern mode set from the layer. A font
the block's font list lacks is appended to it. Edited objects therefore no
longer keep the old text's features by position.

build_tysh no longer writes TextIndex 0 for a layer without one: the
export took it as a kept number, so a Type tool layer landed on object 0
(a deleted layer's, or the one of a layer above it). set_text_index puts a
missing TextIndex right before EngineData, where Photoshop writes it.

pad_frames pads to at most MAX_TEXT_INDEX + 1 frames.

edited_text_keeps_the_files_txt2_object (#7220) now expects style runs
that follow the layer's runs and size.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-20 19:48:40 +02:00
David MannandClaude Opus 5.5 a9e779fd92 Regenerate docs/scorecard.md
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 19:42:32 +02:00
David MannandClaude Opus 5.5 2a4a15f3ab Regenerate docs/scorecard.md
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 19:40:18 +02:00
David MannandClaude Opus 5.5 a23d48f130 Merge main into docs/scorecard-stale-rows-2
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 19:25:37 +02:00
David MannandClaude Opus 5.5 d449d25d62 Merge main into feat/file-216-2-large-fixtures
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 19:25:10 +02:00
David MannandClaude Opus 5.5 b22b7b4645 Merge main into fix/5559-bitmap-dialog
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 19:24:57 +02:00
David MannandClaude Opus 5.5 8254fbbd3f Merge main into feat/file-215-2-noparam
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 19:24:32 +02:00
David MannandClaude Opus 5.5 b1b4a54e4a Merge main into fix/headless-save-quality
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 19:24:12 +02:00
David MannandClaude Opus 5.5 106600284f Merge main into feat/file-215-2-blur
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 19:23:52 +02:00
David MannandClaude Opus 5.5 f83bbd0a14 Merge main into feat/file-215-2-sharpen-noise
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 19:23:20 +02:00
David MannandClaude Opus 5.5 738541efda Merge main into perf/p25-blur-cancel
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 19:23:08 +02:00
David MannandClaude Opus 5.5 31dd6e7e41 Merge main into feat/ui-217-4-animated-zoom
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 19:23:08 +02:00
David MannandClaude Opus 5.5 a939785d63 Merge main into feat/ui-217-1-tool-options-persist
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 19:23:07 +02:00
David MannandClaude Opus 5.5 6ff19e55c0 Merge main into feat/file-215-2-stylize-pixelate
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 19:22:51 +02:00
David MannandClaude Opus 5.5 83aec38ba6 Merge main into feat/file-215-2-other
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 19:22:08 +02:00
David MannandClaude Opus 5.5 7240785492 Merge main into feat/file-215-2-wind-extrude-tiles
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 19:21:36 +02:00
David MannandClaude Opus 5.5 60ba61b1a4 Merge main into feat/file-215-2-mezzotint-halftone
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 19:21:06 +02:00
David MannandClaude Opus 5.5 f81230d86f Merge main into fix/6268-psd-perspective-warp-sf
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 19:20:37 +02:00
David MannandClaude Opus 5.5 c033313aae Merge main into fix/6267-psd-hue-sat-sf
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 19:19:06 +02:00
David MannandClaude Opus 5.5 73ba0b7a68 Merge main into feat/tool-213-4-cam-preview-large
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 19:12:13 +02:00
David Mann 38605ceac5 Merge main into feat/tool-213-7-live-retouch
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

# Conflicts:
#	crates/ui-egui/src/canvas.rs
#	docs/gaps.md
#	docs/target-app-parity.md
2026-10-20 19:05:39 +02:00
David Mann c2ce75f9b7 Merge main into feat/ui-217-4-save-in-background
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

# Conflicts:
#	docs/gaps.md
#	docs/scorecard.md
2026-10-20 19:05:35 +02:00
Akos Arinton e4c2867494 fix(gpu): batch runs no longer depend on the prefix cache
`batch_runs` cut a run at the pass where the render captured its prefix checkpoint, so a cached
render grouped plain layers differently from an uncached one. On D3D12 with FXC a layer's bits
batched and drawn alone differ by about 1 ULP, so reuse stopped being exact there (#5286):
prefix_follows_an_edit_up_the_stack_and_stays_exact and
chunks_keep_their_own_checkpoint_after_a_partial_refresh failed on an RTX 5070 Ti.

The runs now depend on the plan alone and are computed once per render. `run_starts` marks the
passes a run starts at, and the prefix cache captures and resumes only at checkpoints there, so a
resumed render draws the passes above in the same runs as an uncached one. It may resume up to
three layers lower than before, one more batched pass.

The cache tests give their layers a reveal-all mask so each draws alone and keeps a checkpoint;
prefix_follows also runs on batched layers and checks that a capturing render batches like an
uncached one, which fails on the old executor on any backend.

Claude-Session: https://claude.ai/code/session_01Aab8aPCQgoN1sYrWPk8Kr6
2026-10-20 20:05:27 +03:00
David Mann 23b94c6f54 Merge main into fix/6573-menubar-shortcut
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

# Conflicts:
#	crates/ui-egui/src/menu_keys_tests.rs
2026-10-20 19:05:23 +02:00
Akos Arinton bc1c75d303 test(gpu): parity tests on the backend WGPU_BACKEND asks for
wgpu's Instance::default() ignores WGPU_BACKEND and WGPU_DX12_COMPILER, so the parity tests
always took the default adapter: Vulkan on a Windows machine that has a driver for it, which hid a
D3D12-only difference. They now read both, and a backend asked for that has no adapter or can't
render Rgba32Float fails the tests instead of skipping them.

Claude-Session: https://claude.ai/code/session_01Aab8aPCQgoN1sYrWPk8Kr6
2026-10-20 20:05:00 +03:00
Guillem Hermida 872748fb5b Codecs: save DDS textures, uncompressed or BC1–BC3, with optional mipmaps (#1327) (#5993)
DDS textures can now be saved, not just opened: uncompressed (BGRA, BGRX, L8, A8L8; lossless) or BC1/BC2/BC3 (DXT1/3/5) from a clean-room block encoder, with an optional box-filtered mip chain, in the legacy header. Save As and Save a Copy ask with DDS Options; scripts pass `ddsCompression`/`ddsMipmaps` (file commands, control `app.save`, RPC `doc.save`, MCP `doc_save`/`doc_export`), and the CLI takes `--dds-compression`/`--dds-mipmaps`. Targa and DDS answers travel together as `FormatChoices` through the Save As flow.

Review follow-ups:
- File › Save behind DDS or Targa Options records a plain Save with its answer, and replaying `file.save` applies it (#3531).
- The block encoder finds the principal axis from every channel, so a channel that varies on its own can't hide the others' variation.
- DDS joins the shared round-trip suite; the header is built before the output buffer is allocated.
- Enter on a focused Cancel in DDS, Targa or TIFF Options cancels instead of saving.
2026-10-20 11:02:39 -06:00
David MannandClaude Opus 5.5 ce7e4f3752 Shape Density/Feather test: drag the curved Feather track from main (#6545)
Main made the Properties Feather slider's track cubic (#6727), so a
1% drag no longer reaches 10 px; drag a fifth of the way (8 px) as
main's own mask test does.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 17:44:35 +02:00
Brandon ThomasandClaude Opus 5.5 9b9643764f Skip CodeRabbit reviews on Dependabot PRs (#7991)
Adds .coderabbit.yaml so CodeRabbit no longer reviews or comments on PRs opened by dependabot[bot].

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 11:38:22 -04:00
Dylan M. Taylor 8e7841554e Merge pull request #7429 from dylanmtaylor/docs/add-sonar-coderabbit-badges
docs: add SonarCloud and CodeRabbit badges to README
2026-10-20 11:30:45 -04:00
David Mann e7f66e46b7 Merge main into feat/file-216-2-large-fixtures 2026-10-20 17:29:22 +02:00
David Mann ca506335e0 Merge main into fix/fill-layer-angle-finite 2026-10-20 17:18:33 +02:00
David Mann 1b0b3e218c Merge main into fix/6267-psd-hue-sat-sf 2026-10-20 17:13:41 +02:00
David Mann 0b39361076 Merge main into feat/tool-214-12-shape-feather 2026-10-20 17:12:29 +02:00
David Mann a3196466a3 Merge main into fix/6268-psd-perspective-warp-sf 2026-10-20 17:09:56 +02:00
David Mann 2cb994459f Merge main into feat/file-215-2-mezzotint-halftone 2026-10-20 17:01:53 +02:00
David Mann f119922f01 Merge remote-tracking branch 'origin/main' into HEAD 2026-10-20 16:58:51 +02:00
David Mann dd9671e8c1 Merge main into feat/file-215-2-wind-extrude-tiles 2026-10-20 16:57:02 +02:00