photocraft/docs
Brandon Thomas 01e330b33d fix(compose): clipped layers take the base's shape, not its fill; clipped Dissolve dissolves (#3052)
In Photoshop a clipping base's Fill opacity fades only the base's own pixels: the clipped layers
show at full strength inside the base's shape (its alpha with masks), and the whole group then
blends in the base's mode at the base's opacity. A base at 0 % fill (an invisible shape or text
with photos clipped to it) still shows its clipped layers. PhotoCraft composited the clipped
layers into the base's content and faded the result by the base's fill, so they vanished.

- CPU: plain, shape and effects bases below 100 % fill build the clipping group in the base's
  shape (`clips_by_shape`, `composite_clipped_in_shape`); with effects the base's alpha stays the
  effect shape and the group's own alpha becomes a per-pixel fill.
- GPU: the same model in the planner (Lerp by the base's alpha, per-pixel fill in the effect
  init), so these documents stay on the GPU and match the CPU oracle.
- A clipped Dissolve layer draws each pixel fully or not at all with the unclipped layer's
  noise (CPU atop path and GPU atop kernel), instead of blending as Normal.

Tests: 1x1 expected values (fill 0/50/100 %, group on/off, base opacity, base mask, effects)
at 8/16/32-bit; clipped Dissolve pixel counts, including a Solid Color fill clipped to the
Background; GPU/CPU parity across depths, base modes, opacity, masks and effects.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 11:56:52 -04:00
..
brand Licensing: MIT OR Apache-2.0 files, NOTICE, ArtCraft brand terms, attribution 2026-10-04 10:06:17 -04:00
images PSD text fill: keep the fix and its tests, drop the proof-only screenshots and example 2026-10-09 01:57:17 +07:00
architecture.md Support automatic monitor ICC profiles on Linux X11 (#2963) 2026-10-12 01:17:59 -04:00
brush-parity.md Brush and Pencil: hold ~ to erase, and Clear mode (#3439) (#3465) 2026-10-12 00:02:42 -04:00
camera-raw-histogram.md Camera Raw: read and write settings as a live PSD Smart Filter (part of #215) (#459) 2026-10-07 17:59:16 -04:00
camera-raw-zoom.md Rework Camera Raw filter preview and navigation (#781) 2026-10-07 18:40:24 -04:00
color-picker.md Type Color Picker opens the full Color Picker; screen eyedropper with a pixel loupe (#1232) 2026-10-09 00:30:50 -04:00
context-menu-inventory.md Zoom and Hand tools: right-click the canvas for the view menu (#3242) (#3255) 2026-10-11 12:50:01 -04:00
context-menu-parity.md Zoom and Hand tools: right-click the canvas for the view menu (#3242) (#3255) 2026-10-11 12:50:01 -04:00
contributing.md Progress docs: target-app parity, gaps, alpha gate, readiness by audience (#2696) 2026-10-10 15:09:04 -04:00
contributors.md About: contributor and model credits compiled in (grab bag + table, self-submitted names) (#898) 2026-10-07 21:22:11 -04:00
control-protocol.md Camera Raw on raw opens: Clarity, Texture and Dehaze in linear light, measured (#3815) 2026-10-12 08:52:45 -04:00
decisions.md Keep duplicated Smart Objects linked to shared contents (#2222) 2026-10-10 05:05:56 -04:00
development.md Fix main: wasm size cap, Windows Export As test, filter preview window (scope and a crash), CLI duplicate font warnings (#4147) 2026-10-12 11:48:28 -04:00
file-format-parity.md fix(io): preserve indexed BMP color tables (#3802) (#3869) 2026-10-12 09:13:38 -04:00
five-algorithm-performance.json Five exact-output speedups: dense Extrude 160s to 0.39s (#2685) 2026-10-11 10:50:45 -04:00
five-algorithm-performance.md Five exact-output speedups: dense Extrude 160s to 0.39s (#2685) 2026-10-11 10:50:45 -04:00
gaps.md Character panel: OpenType feature buttons (TYPE-218-5, #3752) (#3757) 2026-10-12 04:52:23 -04:00
gpu-composite-reuse.md Design: bounded GPU stack prefix reuse for property edits (#1164) 2026-10-11 02:08:08 -04:00
hardware-parity.md Progress docs: target-app parity, gaps, alpha gate, readiness by audience (#2696) 2026-10-10 15:09:04 -04:00
iris-blur-performance.md Speed up Iris Blur without changing output (#2578) 2026-10-10 14:00:53 -04:00
localization-es.md i18n(es): native-style review of the Spanish catalog (#3154) 2026-10-11 10:43:15 -04:00
localization-it.md i18n(it): translate the dynamic labels the Italian catalog was missing (#3742) 2026-10-12 04:38:03 -04:00
localization-ko.md Improve Korean terminology and dynamic UI translation coverage (#604) 2026-10-07 16:32:47 -04:00
localization-parity.md i18n(tr): add Turkish UI translation catalog (#3809) 2026-10-12 11:01:46 -04:00
localization-zh-hans.md i18n: complete Simplified Chinese catalog and localize brush sections (#359) 2026-10-07 07:46:52 -04:00
localization.md i18n: add Hungarian (hu) UI translation (#3831) 2026-10-12 11:07:17 -04:00
mcp.md MCP: command_batch says it is not atomic, and the docs explain recovery (#3338) 2026-10-11 22:10:12 -04:00
nikon-nef-development.md Keep fitted Camera Raw colour during tuning and crop Nikon D5100 borders (#3201) 2026-10-11 19:12:19 -04:00
octagonal-mask-performance.md Compute exact octagonal mask shifts with bounded workspace (#2154) 2026-10-10 06:46:06 -04:00
ora.md Add OpenRaster (.ora) import and export (#2257) 2026-10-10 08:40:35 -04:00
parity-checklist.md Type menu: Anti-Alias › None first and checked; checks follow the edited layer (#2983) (#2984) 2026-10-11 11:35:38 -04:00
pdn.md Add native layered Paint.NET (.pdn) import (#1998) 2026-10-09 21:05:00 -04:00
pixelate-performance.json Pixelate: CMYK Facet 13.7x faster, Lab halftone 5.0x faster (#2588) 2026-10-10 14:03:03 -04:00
pixelate-performance.md Pixelate: CMYK Facet 13.7x faster, Lab halftone 5.0x faster (#2588) 2026-10-10 14:03:03 -04:00
plugins.md Plug-ins: keep the originating error across parallel bands (#1654) 2026-10-09 09:11:00 -04:00
proximity-match-performance.md Proximity Match: 1.5-3.8x faster stroke searches, smaller mask tables (#2101) 2026-10-09 19:34:26 -04:00
quick-selection-performance.md Quick Selection: 3.5x faster CPU strokes with hybrid graph cuts (#2436) 2026-10-10 14:17:48 -04:00
radial-blur-performance.md Optimize Radial Blur sampling without changing output (#1499) 2026-10-09 14:41:52 -04:00
release-playbook.md docs: stop linking readers to the private craftrules repo (#493) (#779) 2026-10-08 15:04:21 -04:00
releasing.md Security: verify AppImage build inputs (#2270) 2026-10-11 22:33:26 -06:00
roadmap.md Tools: Artboard tool (#2858) (#2862) 2026-10-11 07:12:53 -04:00
scorecard.md fix(compose): clipped layers take the base's shape, not its fill; clipped Dissolve dissolves (#3052) 2026-10-12 11:56:52 -04:00
selection-distance-performance.md Selection distance transforms: 7.6-10.6x faster and correct past 4K (#2093) 2026-10-09 19:28:33 -04:00
shape-strokes.md Fix Shape Stroke controls, popup interactions and paint colours (#3019) 2026-10-11 09:46:44 -04:00
target-app-parity.md Remove tool: Create a new layer, and Remove after each stroke off (#1750) (#3808) 2026-10-12 08:51:56 -04:00
tilt-shift-performance.md Speed up Tilt-Shift with existing per-level halo trimming (#2880) 2026-10-11 11:58:04 -04:00
ui-design.md fix(ui): one eliding label for fixed-width chrome, so translations can't overrun (#3580) (#3616) 2026-10-12 04:10:40 -04:00
ui-dialogs.md feat: Alt+Cancel → Reset for opt-in command dialogs (#3871) 2026-10-12 10:52:19 -04:00
ui-parity.md feat: Photoshop's tool keys (arrows turn the brush, Shift-click new type, Space+F canvas colour) (#3725) 2026-10-12 09:17:43 -04:00