photocraft/assets/icons
Brandon Thomas abf785f7b1
Magic Eraser and Background Eraser tools; canvas rotation/flip/size move vector geometry (#70)
* Magic Eraser and Background Eraser engine commands

paint.magicEraser erases the wand region (tolerance, anti-alias,
contiguous, sample all layers, opacity) to transparency, tile by tile in
parallel; paint.backgroundEraser erases colours similar to the one under
the brush hotspot (continuous / once / background swatch sampling,
discontiguous / contiguous / find-edges limits, tolerance, protect
foreground colour). Both compare and erase in the layer's own channels at
any depth, respect the selection, turn the Background into Layer 0 like
Photoshop, and are one undo step. The Magic Eraser paints the background
colour on layers with locked transparency.

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

* Magic Eraser and Background Eraser tools in the Eraser group

Shift+E / E cycles Eraser, Background Eraser and Magic Eraser; the
toolbar flyout lists all three. Options bars: Magic Eraser tolerance,
anti-alias, contiguous, sample all layers and opacity; Background Eraser
sampling toggles, limits, tolerance and protect foreground colour. The
Background Eraser cursor always shows its sampling hotspot. Icons are
derived from Lucide's eraser (ISC), recorded in ATTRIBUTION.md.

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

* Image Rotation, Canvas Size, Crop, Trim and Image Size move vector geometry

Canvas-wide operations remapped only pixels: type, shape and smart-object
transforms, vector masks, saved/work paths, guides, slices, notes and
Count/Ruler marks stayed put, so they jumped back on the next re-render.

New engine module canvas_geom applies the canvas map to all non-pixel
geometry. 90°/180°/flip turns remap every pixel surface exactly (incl.
type/shape/smart/fill caches and smart filter masks) and move geometry
through the matching affine; guides swap orientation under 90° turns;
rect/ellipse/line live shapes stay live; gradient fill angles follow.
Canvas Size/Crop/Trim translate geometry (shapes re-render for the new
canvas), Image Size scales it and re-renders vectors, Arbitrary rotation
also moves unlinked vector masks and document marks. Layer effect angles
stay (Global Light), as in Photoshop.

Tests compare the CPU composite of a rotated document (type, shapes,
vector mask, smart object) against the rotated flattened original, also
after re-rendering everything from geometry, at 8/16/32-bit RGB, CMYK
and Gray.

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

* Magic Eraser: edit encoded tile bytes in parallel (24 MP: 1260 -> 375 ms)

Tiles are copied out as encoded bytes and only the touched samples are
decoded, so the parallel workers do all the work and the serial write-back
is a memcpy. The ignored bench prints a phase breakdown.

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

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-04 16:17:39 -04:00
..
LICENSE-lucide.txt one-shot 2026-09-30 05:02:08 -04:00
align-center.svg continued wip 2026-09-30 09:37:18 -04:00
align-justify.svg continued wip 2026-09-30 09:37:18 -04:00
align-left.svg continued wip 2026-09-30 09:37:18 -04:00
align-right.svg continued wip 2026-09-30 09:37:18 -04:00
app-window.svg one-shot 2026-09-30 05:02:08 -04:00
arrow-left-right.svg one-shot 2026-09-30 05:02:08 -04:00
ban.svg continued wip 2026-09-30 09:37:18 -04:00
bandage.svg one-shot 2026-09-30 05:02:08 -04:00
blend.svg one-shot 2026-09-30 05:02:08 -04:00
brush-cleaning.svg one-shot 2026-09-30 05:02:08 -04:00
brush.svg one-shot 2026-09-30 05:02:08 -04:00
check.svg one-shot 2026-09-30 05:02:08 -04:00
chevron-down.svg one-shot 2026-09-30 05:02:08 -04:00
chevron-right.svg one-shot 2026-09-30 05:02:08 -04:00
chevron-up.svg Analysis, notes, proof views, workspaces (+ in-progress work of other agents) 2026-10-01 22:49:07 -04:00
chevrons-left.svg one-shot 2026-09-30 05:02:08 -04:00
chevrons-right.svg one-shot 2026-09-30 05:02:08 -04:00
circle-dashed.svg one-shot 2026-09-30 05:02:08 -04:00
circle-dot.svg one-shot 2026-09-30 05:02:08 -04:00
circle.svg continued wip 2026-09-30 09:37:18 -04:00
clock.svg one-shot 2026-09-30 05:02:08 -04:00
cloud.svg continued wip 2026-09-30 09:37:18 -04:00
compass.svg one-shot 2026-09-30 05:02:08 -04:00
contrast.svg one-shot 2026-09-30 05:02:08 -04:00
copy.svg one-shot 2026-09-30 05:02:08 -04:00
crop.svg one-shot 2026-09-30 05:02:08 -04:00
diamond.svg continued wip 2026-09-30 09:37:18 -04:00
droplet.svg one-shot 2026-09-30 05:02:08 -04:00
ellipsis.svg one-shot 2026-09-30 05:02:08 -04:00
eraser-background.svg Magic Eraser and Background Eraser tools; canvas rotation/flip/size move vector geometry (#70) 2026-10-04 16:17:39 -04:00
eraser-magic.svg Magic Eraser and Background Eraser tools; canvas rotation/flip/size move vector geometry (#70) 2026-10-04 16:17:39 -04:00
eraser.svg one-shot 2026-09-30 05:02:08 -04:00
eye-off.svg one-shot 2026-09-30 05:02:08 -04:00
eye.svg one-shot 2026-09-30 05:02:08 -04:00
file-plus.svg one-shot 2026-09-30 05:02:08 -04:00
file.svg Analysis, notes, proof views, workspaces (+ in-progress work of other agents) 2026-10-01 22:49:07 -04:00
flame.svg continued wip 2026-09-30 09:37:18 -04:00
folder-open.svg one-shot 2026-09-30 05:02:08 -04:00
folder-plus.svg one-shot 2026-09-30 05:02:08 -04:00
folder.svg one-shot 2026-09-30 05:02:08 -04:00
gauge.svg one-shot 2026-09-30 05:02:08 -04:00
grid-2x2.svg continued wip 2026-09-30 09:37:18 -04:00
grid-3x3.svg one-shot 2026-09-30 05:02:08 -04:00
hand.svg one-shot 2026-09-30 05:02:08 -04:00
house.svg Analysis, notes, proof views, workspaces (+ in-progress work of other agents) 2026-10-01 22:49:07 -04:00
image.svg one-shot 2026-09-30 05:02:08 -04:00
info.svg one-shot 2026-09-30 05:02:08 -04:00
lasso-select.svg continued wip 2026-09-30 09:37:18 -04:00
lasso.svg one-shot 2026-09-30 05:02:08 -04:00
layers.svg one-shot 2026-09-30 05:02:08 -04:00
link.svg one-shot 2026-09-30 05:02:08 -04:00
lock-open.svg one-shot 2026-09-30 05:02:08 -04:00
lock.svg one-shot 2026-09-30 05:02:08 -04:00
lollipop.svg continued wip 2026-09-30 09:37:18 -04:00
maximize-2.svg one-shot 2026-09-30 05:02:08 -04:00
message-square.svg one-shot 2026-09-30 05:02:08 -04:00
minus.svg one-shot 2026-09-30 05:02:08 -04:00
moon.svg one-shot 2026-09-30 05:02:08 -04:00
mouse-pointer-2.svg one-shot 2026-09-30 05:02:08 -04:00
move.svg one-shot 2026-09-30 05:02:08 -04:00
navigation.svg one-shot 2026-09-30 05:02:08 -04:00
paint-bucket.svg one-shot 2026-09-30 05:02:08 -04:00
palette.svg one-shot 2026-09-30 05:02:08 -04:00
panel-right.svg one-shot 2026-09-30 05:02:08 -04:00
panels-top-left.svg one-shot 2026-09-30 05:02:08 -04:00
pause.svg Timeline: Play/Pause (auto-advance the playhead at the frame rate) 2026-10-03 03:19:17 -04:00
pen-tool.svg one-shot 2026-09-30 05:02:08 -04:00
pentagon.svg continued wip 2026-09-30 09:37:18 -04:00
pipette.svg one-shot 2026-09-30 05:02:08 -04:00
play.svg continued wip 2026-09-30 09:37:18 -04:00
plus.svg one-shot 2026-09-30 05:02:08 -04:00
pointer.svg continued wip 2026-09-30 09:37:18 -04:00
rectangle-horizontal.svg continued wip 2026-09-30 09:37:18 -04:00
rectangle-vertical.svg Analysis, notes, proof views, workspaces (+ in-progress work of other agents) 2026-10-01 22:49:07 -04:00
redo-2.svg one-shot 2026-09-30 05:02:08 -04:00
rotate-cw.svg continued wip 2026-09-30 09:37:18 -04:00
ruler.svg Analysis, notes, proof views, workspaces (+ in-progress work of other agents) 2026-10-01 22:49:07 -04:00
scaling.svg continued wip 2026-09-30 09:37:18 -04:00
scan-line.svg continued wip 2026-09-30 09:37:18 -04:00
scan.svg one-shot 2026-09-30 05:02:08 -04:00
scissors.svg one-shot 2026-09-30 05:02:08 -04:00
search.svg one-shot 2026-09-30 05:02:08 -04:00
settings.svg one-shot 2026-09-30 05:02:08 -04:00
slash.svg continued wip 2026-09-30 09:37:18 -04:00
slice-knife.svg Analysis, notes, proof views, workspaces (+ in-progress work of other agents) 2026-10-01 22:49:07 -04:00
sliders-horizontal.svg one-shot 2026-09-30 05:02:08 -04:00
sparkles.svg one-shot 2026-09-30 05:02:08 -04:00
spline.svg continued wip 2026-09-30 09:37:18 -04:00
square-dashed-mouse-pointer.svg continued wip 2026-09-30 09:37:18 -04:00
square-dashed.svg one-shot 2026-09-30 05:02:08 -04:00
square-dot.svg Analysis, notes, proof views, workspaces (+ in-progress work of other agents) 2026-10-01 22:49:07 -04:00
square-plus.svg Analysis, notes, proof views, workspaces (+ in-progress work of other agents) 2026-10-01 22:49:07 -04:00
square.svg one-shot 2026-09-30 05:02:08 -04:00
squares-subtract.svg one-shot 2026-09-30 05:02:08 -04:00
stamp.svg one-shot 2026-09-30 05:02:08 -04:00
sun.svg one-shot 2026-09-30 05:02:08 -04:00
swatch-book.svg one-shot 2026-09-30 05:02:08 -04:00
text-cursor.svg continued wip 2026-09-30 09:37:18 -04:00
toggle-left.svg Analysis, notes, proof views, workspaces (+ in-progress work of other agents) 2026-10-01 22:49:07 -04:00
toggle-right.svg Analysis, notes, proof views, workspaces (+ in-progress work of other agents) 2026-10-01 22:49:07 -04:00
trash.svg one-shot 2026-09-30 05:02:08 -04:00
triangle-alert.svg continued wip 2026-09-30 09:37:18 -04:00
triangle-right.svg continued wip 2026-09-30 09:37:18 -04:00
triangle.svg continued wip 2026-09-30 09:37:18 -04:00
type.svg one-shot 2026-09-30 05:02:08 -04:00
undo-2.svg one-shot 2026-09-30 05:02:08 -04:00
unlink.svg continued wip 2026-09-30 09:37:18 -04:00
wand-sparkles.svg one-shot 2026-09-30 05:02:08 -04:00
wand.svg continued wip 2026-09-30 09:37:18 -04:00
x.svg one-shot 2026-09-30 05:02:08 -04:00
zoom-in.svg one-shot 2026-09-30 05:02:08 -04:00