Create/Release Clipping Mask and Brightness/Contrast, Black & White and
Gradient Map were written out by hand with the same body as
adjustment_event! or each other, which SonarCloud counts as duplicated new
code (photocraft's quality gate fails on 9.8% duplication from the GrpL
entry). adjustment_event! takes an optional command id, and clipping_event!
builds the two clipping events. The mapping table is unchanged.
One conflict, pattern_cmds.rs: insert_fill_layer keeps the default_mask
argument and takes main's placement(command, params)? signature.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- canvas.rs: the Content-Aware Move preview now comes before the
Layers-panel reorder preview. The reorder preview is built from the
session document and would drop a pending Content-Aware Move result.
- layer_multi_cmds.rs: preview_rejects_invalid_drop_unchanged also runs
layer.moveTo for each rejected drop: the missing target, `into` on a
non-group and the invalid position are errors, the self-drop is a
no-op, and the document stays unchanged each time.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Conflicts:
- commands.rs: layer.duplicate keeps the "Add copy" option; main's #5880
dropped the second damage pass (`before` and note_insert) for single
duplicates, so the clone of the document goes away too.
- jobs.rs: the success arm runs main's relayout damage first, then our
Expand New Effects disclosure update.
- panels.rs: the Background no longer loads a transparency selection on a
thumbnail click (main), and a thumbnail size of None has no thumbnail to
click (ours); main's `pos` / `on_thumb` now come before layer.select, so
the size guard moved there.
- hu/sr/tr/vi catalogs: both sides appended rows at the end; kept both, no
duplicate keys.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
PhotoCraft reads GIMP's .xcf (and .xcf.gz) files, read only, through a new
reader in photocraft-io written from the public XCF specification: versions
0 to 26, uncompressed, RLE and zlib tiles, 8/16/32-bit integer and
16/32/64-bit float precisions (linear precisions get a linear profile),
pixel layers at any position, groups by item path with pass-through,
layer masks applied or disabled, opacity, visibility, locks, colour tags,
the 2.10 and legacy blend modes mapped to Photoshop's (modes without an
equivalent open as Normal with a note), the ICC profile, resolution,
guides, the comment, extra channels and the saved selection; indexed
images open as RGB. Text, vector and link layers open as their pixels;
layer effects, paths and floating selections are reported.
Fixtures are written by GIMP 3.2 itself (scripts/xcf_fixtures.py), each
with GIMP's merged rendering as a PNG. In gamma-encoded blend and
composite spaces our composite matches GIMP within 0.5/255; GIMP's
linear-light default, its Clip to backdrop and its clamp-after-alpha
for unbounded modes are documented and measured in docs/xcf.md.