mirror of
https://github.com/storytold/photocraft.git
synced 2026-10-27 03:17:05 -06:00
* psd: .abr brush (v1/v2/v6+) and .grd gradient (v5) parsers and writers Clean-room from public format descriptions: legacy computed/sampled brushes, 8BIM-sectioned samp/patt/desc files, 8/16-bit raw and PackBits tips. Bounded (MAX_EDGE, MAX_TOTAL_BYTES), damaged brushes are skipped with warnings, hostile input returns Err. Adds an abr fuzz target. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * paint: 36 grouped built-in brush presets and new procedural tips General / Dry Media / Wet Media / Special Effects groups (pressure size/opacity variants, airbrush, pencils, charcoal, pastel, crayon, rake, watercolour, ink, oil, foliage, grass, stipple, sparkle, halftone…). Leaf, grass, charcoal, sponge, star and rake tips are generated in code. BrushPreset gains a group. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * io: map .abr brushes onto BrushSettings Tip shape, shape dynamics, scattering, texture (embedded patt patterns), dual brush, colour dynamics, transfer, pose, noise, wet edges, build-up and captured tool options; unmapped settings are reported as warnings. Includes bench_abr (100-brush import, 5000-dab stroke). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * engine: brush.presets.importAbr and gradient.presets.importGrd Path or base64 data, group per file (re-import replaces), unique names next to the built-ins; graceful-failure tests. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * ui: real stylus pressure/tilt, grouped Brushes panel, Import Brushes Pen force from egui Touch events (Windows WM_POINTER via winit), Pointer Events pressure/tilt/twist on the web, tilt via ui.pointer; mouse stays 1.0. .abr/.grd open from File > Open, drag-and-drop, Brushes panel and Preset Manager. Preset previews keyed on a cheap signature instead of the full brush JSON. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>