What's Changed
- fix(ui): keep the Color Sampler cursor while a sampler is dragged (#13063) by @RickiNano in #13212
- fix(ui): the Arbitrary angle rounds in f64 and keeps that value (#13067) by @RickiNano in #13217
- Remove tool: 19 px brush after Reset Tool and on first use by @rmsff in #13151
- Release: PhotoCraft v0.23.0 on main by @FredApps in #13345
- Remove: alert on a pixel layer with Lock All by @rmsff in #13171
- Pen: Undo after finishing a path gives it back to the Pen instead of deleting it (#6619) by @marmitoTH in #6413
- ci: use StepSecurity's maintained actions by @dylanmtaylor in #13337
- macOS signing: decode the certificate into an exclusive temp file by @dylanmtaylor in #11028
- Place: refuse a scale that makes the placed image exceed the render pixel limit by @dylanmtaylor in #11229
- automation: save_bytes never reads linked files by @dylanmtaylor in #11233
- Escape control characters in log lines and diagnostic output taken from files and plug-ins by @dylanmtaylor in #11218
- text: charge the rasterizer's output tiles, not only its pixels by @dylanmtaylor in #11047
- fix(engine): apply the metadata choice to WebP Quick Export by @dylanmtaylor in #11058
- fix(compose): bisect gradient stops, evict oversized effect maps, skip empty distance transforms by @dylanmtaylor in #11056
- Camera Raw: read each source row once when building the preview proxy by @dylanmtaylor in #11064
- fix(cms): charge decoded CLUT values against a per-profile budget by @dylanmtaylor in #11055
- Save: a replacement in another group does not widen group access by @dylanmtaylor in #11232
- fix(ui-egui): bound the RAW re-read and treat symlinked names as taken in batch export by @dylanmtaylor in #11204
- fix(algo): hold raw filter parameters to their ranges (Water Paper, Box Blur, Lanczos, Camera Raw noise) by @dylanmtaylor in #11199
- fix(algo): bound EXIF text decoding, warp scans, gallery windows, inpaint sizes, pyramid depth by @dylanmtaylor in #11161
- codecs: list each Cryptomatte layer once and index streams by name by @dylanmtaylor in #10978
- fix(gpu): cap plan accumulator slots and gradient lookup tables by @dylanmtaylor in #11061
- fix(io): charge importers for the whole tiles surfaces keep by @dylanmtaylor in #11144
- fix(format,engine): limit zstd windows, set bundle modes via the handle, refuse symlinked presets by @dylanmtaylor in #11145
- fix(codecs): checked sizes in encoders, EXR name lookup, FITS float limit, VP8 plane copies, EXIF thumbnail bytes by @dylanmtaylor in #11164
- fix(engine): bound sparse remap, scaled clone sources, path reads, export format, name lookups by @dylanmtaylor in #11181
- fix(engine): authorization for nested scratch sessions and preset calls, CSV and PostScript text escaping by @dylanmtaylor in #11188
- Actions: charge skipped steps to the playback budget, bound batch nesting, clip the set override by @dylanmtaylor in #10969
- Engine: check dense working buffers against a budget before expanding sparse content by @dylanmtaylor in #10964
- paint: refuse a sequential-dab stroke whose working copy is too large by @dylanmtaylor in #11070
- CI: nightly release dry run by @FredApps in #13374
- Zoom tool: Zoom In / Zoom Out mode buttons (#12066) by @RickiNano in #13013
- Delete Anchor Point: Alt-click on an anchor selects its whole subpath by @rmsff in #13188
- Convert Point: drag a segment as Direct Selection does by @rmsff in #13141
- Freeform Pen: close a stroke only within 3 px of its start on each axis by @rmsff in #13313
- Line tool: Weight 1 px and 5 × 10 px arrowheads by default and after Reset Tool (#13241) by @RickiNano in #13305
- Count tool options bar: every control from the start in the reference order, tooltips and greying, scrubby size captions (#11765) by @hectorviov in #12206
- paint: two stroke tests check the result the stroke now returns by @dylanmtaylor in #13378
- Polygon tool: a rounded star rounds only its outer points (#13308) by @RickiNano in #13342
- Type options bar: Toggle Character and Paragraph panels button by @slafebre in #13020
- Line tool: a drag is one History step named "Line Tool" (#13244) by @NaufalDzz in #13303
- Delete Anchor Point keeps its path on the first Escape, and leaves a drag alone (#13072) by @Raghav2012Code in #13176
- Add Anchor Point: an anchor added to a straight segment is smooth, with handles (#12706) by @TrevorBrown-dev in #13215
- fix(ui): a Perspective Crop drag with no area keeps the clicked corners (#13065) by @Raghav2012Code in #13234
- ci: cap headless GPU backend tests with the nextest gpu group by @davidmann4 in #13257
- Perspective Crop: W, H and Resolution clamp to the measured ranges with alerts by @hectorviov in #12237
- Fix Flatpak updates and bump to 0.23.1 by @dylanmtaylor in #13322
Full Changelog: v0.23.0...v0.23.1