What's Changed
- Magnetic Lasso: Caps Lock swaps in the Width circle cursor (#11690) by @hectorviov in #12151
- fix(engine): the Magic Eraser measures Tolerance by colour spread (#11995) by @slafebre in #12406
- fix(ui): Shift plus a digit sets the Pencil's Opacity (#11967) by @rmsff in #12371
- Offer Apply to All in the unsaved-changes prompt by @devstivi in #9021
- Execute Average on Smart Objects and imported PSD smart filters by @ArjenS-LA in #9077
- Fix Average colour weighting and preserve per-pixel transparency by @ArjenS-LA in #9076
- Warp mode: edit Photoshop's Cylinder warp with handles and fields (#4112) by @TimothyBritt in #9798
- Eyedropper: right-click menu with the Sample Sizes, Copy Color as HTML and Copy Color's Hex Code (#11747) by @hectorviov in #12182
- Perspective Crop: Shift and Alt constrain the new drag and corner drags by @hectorviov in #12236
- fix(engine): a free Perspective Crop takes the quad's perspective size (#11798) by @slafebre in #12421
- Artboards: Color Sampler points follow the document when a board re-bases the canvas (#9302) by @davidmann4 in #9303
- Brush picker: gear menu entries match the reference application (#11819) by @davidmann4 in #11919
- Dropdowns: popups as tall as their items, up to the window (#5495) by @davidmann4 in #5501
- Perf: one frame stage record across egui's passes; the web keeps slow frames too (#9328) by @brennanMKE in #10103
- Liquify: Forward Warp and Push Left follow the pointer; stationary tools use real time by @terminalgate in #10690
- Engine: bounded redraw areas for adjustment, reorder and clipping changes (#9329) by @brennanMKE in #10052
- Add toolbar side toggle by @Triwarr in #11193
- Actions panel: a row dragged onto the trash is deleted, onto Create new action duplicated by @TrevorBrown-dev in #12402
- fix: brush hints keep a feathered mask's ring and the effects' reach (#9329) by @brennanMKE in #10104
- feat(ui): Cmd+. (Ctrl+.) cancels a type editing session (#12076) by @rmsff in #12335
- fix(text): draw COLR colour glyphs in the font's own colours (#7711) by @adi-1108 in #8247
- Canvas: the redraw area covers a whole command, not just its last revision (#9329) by @brennanMKE in #10053
- Note tool: Clear All asks before deleting all notes; the step is named Delete all Notes (#11791) by @hectorviov in #12217
- feat(ui): Select Pixels on a pixel layer thumbnail's right-click menu by @qvest-ssels in #12450
- Pencil: pressure toggles on the options bar (#11962) by @Raghav2012Code in #12477
- Actions: map Image › Analysis › Set Measurement Scale › Custom (#10723) by @ljkx in #12438
- Map recorded Windows Displace actions by @yoriswind in #11836
- fix(ui): the Gradient bar has no blend Mode and Opacity in Gradient mode (#12007) by @x-labb in #12645
- fix(paint): Catch-up on Stroke End starts unchecked (#11887) by @RickiNano in #11895
- Background Eraser: a CMYK document compares against the picked inks (#12352) by @RickiNano in #12381
- Color Replacement: whole-number Tolerance 1-100 with the alert, and the bar's tooltips by @hectorviov in #12268
- Color Lookup: list the LUT folder in Image > Adjustments (#9754) by @Luis-0508 in #9827
- fix(ui): the Hand options bar gets the reference tooltips and no hint text (#12026) by @rmsff in #12370
- New Guide Layout: format in ruler unit, support arbitrary units, and normalize on lost focus (#6082) by @safvanedge in #6083
- feat(compose): Stroke Emboss bevels the stroked outline (#8639) by @DuBearte in #9337
- Drag selected pixels between document tabs and tiled canvases by @tomgardenart in #10059
- fix(ui): Reset Tool gives the Burn tool a 65 px soft tip at 25 % spacing (#12671) by @RickiNano in #12691
- fix(ui): do not connect Art History Brush Shift-clicks with a straight line by @ElNeMeR70 in #12690
- Free Transform: a proportional corner drag follows the pointer along the diagonal (#11096) by @vangel76 in #11160
- Remove tool: name the History step "Remove Tool" (#12541) by @RickiNano in #12677
- fix(ui): add Burn and Dodge options-bar tooltips by @Bobderto in #12721
- Color Sampler: points sit on the clicked pixel's centre (#11725) by @hectorviov in #12174
- Tests: expect Color Sampler points on pixel centres after #12174 by @tjbbjt in #12790
- Raster: the memory reservation tests take turns by @FredApps in #12854
- Fujifilm compressed RAF: decode lossless and lossy files instead of the embedded preview by @smyrgeorge in #7377
- Perspective Crop: the quad follows the pointer while corners are clicked by @hectorviov in #12232
- Mixer Brush: Load Solid Colors Only in the load menu (#11952) by @hectorviov in #12295
- Convert Point: name History steps Change Anchor Point and Corner Drag by @rmsff in #12813
- Add Anchor Point: options bar says the tool has no options by @rmsff in #12808
- Art History Brush: a click held back by the tolerance adds its state by @rmsff in #12809
- Delete Anchor Point: deleting a saved path's last anchor leaves it empty by @rmsff in #12811
- Dodge: refuse Indexed Color and Bitmap documents by @rmsff in #12812
- Remove Tool: name the new layer "Remove tool edits" by @rmsff in #12819
- Red Eye: name the step Red Eye Removal Tool and record a click that changes nothing by @rmsff in #12843
- Rasterize prompt: the fill wording as in the reference by @rmsff in #12851
- Support ordered automation read roots with safe save provenance by @FredApps in #3023
- Blur Strength: alert when a typed value is out of range by @rmsff in #12859
- Reset Tool gives the Clone Stamp a 21 px soft tip at 25 % spacing by @rmsff in #12862
- Eraser: add Erase to History (Brush, Pencil and Block modes) by @terminalgate in #10692
- Remove tool: show the centre + in its brush cursor by default by @rmsff in #12873
- Warp: show the Default grid's handles and split-grid anchors without hovering by @rmsff in #12894
- Fix Move Auto-Select toggling and locked-layer clicks (#11102) by @yoriswind in #11711
- Crop: Straighten gets its label and a spirit-level glyph (#10888) by @Raghav2012Code in #11490
- Start Type Mask text with the placeholder, as the Type tool does by @rmsff in #12903
- test(ui): time the Liquify Alt-twirl strokes explicitly (#12697) by @RickiNano in #12712
- Ruler: Escape during a drag ends it and keeps the ruler (#11986) by @hectorviov in #12911
- Delete Anchor Point: options bar says the tool has no options by @rmsff in #12924
- Speed up adjustment previews for unstyled clipped raster layers by @wanikhawar in #12356
- Allow positioning linked Pattern Fill layers on the canvas by @wanikhawar in #12834
- Make text-on-path placement editable by @wanikhawar in #11629
- Art History Brush: refuse a source of another colour mode by @rmsff in #12951
- Transform presets flip the targeted vector mask (#12283) by @wanikhawar in #12330
- Type: render a paragraph-box handle drag off the UI thread (#7032) by @wanikhawar in #12316
- Rasterize prompt: a painting tool's type prompt adds "Rasterize Layer" by @rmsff in #12966
- Sharpen Strength: alert when a typed value is out of range by @RickiNano in #12963
- Warp: a one-way split on the Default grid keeps only the thirds across it by @rmsff in #12883
- Image Size: a Columns width unit from the Column Size preference (#6214) by @davidmann4 in #6215
- Smudge Strength: alert when a typed value is out of range by @RickiNano in #12982
- fix(ui): Delete on an anchor selected with Add Anchor Point removes it, not the layer (#12703) by @RickiNano in #12796
- fix(ui): Reset Tool gives the Dodge tool a 65 px soft tip at 25 % spacing (#12684) by @RickiNano in #12793
- A click in a text field's padding focuses its editor (#12302) by @RickiNano in #12400
- Save over a flat JPEG: JPEG Options, then in place; transparent ones offered as PNG (#2223) by @Higgs32584 in #7878
- Object Selection: refuse Indexed Color and Bitmap documents by @rmsff in #12954
- fix(paint): match unaligned Pattern Stamp origins by @Bobderto in #12987
- Pen: Enter deselects the Work Path it finished by @rmsff in #12984
- Pen options bar: Make: Selection…, Mask, Shape — Mask adds a vector mask from the path (#12904) by @ljkx in #12993
- Sharpen: refuse Indexed Color and Bitmap documents by @rmsff in #12998
- Pen menu: name the transform row after what it acts on by @rmsff in #13000
- Warp: a fold shows what's under its transparent parts by @DingusMcRinkyDinky in #11170
- fix(engine): follow Photoshop bracket-key brush size steps by @Bobderto in #12969
- fix(ui): a Gradient fill layer greys the Gradient tool's mode choice and is edited live (#12008) by @rmsff in #12372
- Add/Delete Anchor Point: edit only the targeted path (#12762, #12705) by @TrevorBrown-dev in #12815
- fix: record Freeform Pen strokes with their tool name by @Bobderto in #12882
- xtask: only follow https redirects when fetching PngSuite by @dylanmtaylor in #11231
- Icon themes: parse index.theme once and refuse gzip icons by @dylanmtaylor in #11227
- fix(paint): cap the total steps one stroke emits by @dylanmtaylor in #11195
- fix(text): validate font table directories in one pass and cap collection faces by @dylanmtaylor in #11194
- codecs: check TIFF structural tags, predicted rows and JPEG chunk frames by @dylanmtaylor in #10983
- Pen Enter tests: look the Make buttons up by their new labels (main red since #12993) by @ljkx in #13023
- Airbrush: about ten dabs a second while held, and a click lays two dabs by @DuBearte in #12169
- Pencil Auto Erase: the start pixel must be exactly the foreground colour by @DuBearte in #12209
- Eyedropper: at 100 % zoom and below an N by N Average covers (N+1) x (N+1) screen pixels (#11751) by @hectorviov in #12201
- Count tool: arrow cursors with 1+, 1 over a marker and 1- with Alt (#11773) by @hectorviov in #12214
- Ruler: a plain click keeps the current ruler instead of deleting it by @DuBearte in #12270
- fix(ui): the Arbitrary rotation dialog keeps the ruler's two decimals (#12035) by @hnoerenberg in #12165
- Magic Wand: a New-mode click inside the selection deselects, a drag moves the outline (#11782) by @hectorviov in #12161
- fix(engine): drop selection after masking a live Gradient Fill layer by @ElNeMeR70 in #12244
- fix(engine): new vertical text is the history state "New Vertical Type Layer" (#12058) by @rmsff in #12334
- Make Selection: Rendering and Operation groups; the dialog's step is Selection Change by @rmsff in #13006
- fix(engine): a Type Mask keeps the part of its selection past the canvas edge (#12074) by @rmsff in #12355
- Windows: a pen moves and resizes the window through the custom title bar (#7967) by @FredApps in #12992
- Sharpen: alert on a hidden, locked or group layer by @rmsff in #13003
- Fix main: match the tuple variant Drag::RulerNew(_) in the ruler Escape check by @davidmann4 in #13074
- Red Eye: refuse CMYK, Grayscale and Indexed Color documents by @rmsff in #13043
- Warp: a Split button places one split, then its mode ends by @rmsff in #13044
- Sponge: the options bar has a Flow field and strokes use it (#12976) by @ljkx in #13022
- Fix main: split the Pencil outline out of draw_default_tool_cursor (clippy cognitive complexity) by @davidmann4 in #13079
- packaging: use [[ for bash tests (SonarCloud S7688) by @dylanmtaylor in https://github.com//pull/13050
- fix(engine): Object Selection finds objects on a transparent layer (#12852) by @Raghav2012Code in #12869
- History Brush: refuse a source of another colour mode or bit depth by @rmsff in #12983
- Open selection context menus on right-click with Content-Aware Move tool by @ElNeMeR70 in #12240
- Eraser and Fill: background swatch through the Grayscale document's grey profile (#11940) by @hectorviov in #12908
- Delete Anchor Point: Escape clears selected anchors, then the targeted path by @rmsff in #12995
- Type options bar: font size preset list by @slafebre in #12718
- fix(ui): the Classic gradient's refusals are the reference application's alerts (#12017) by @x-labb in #12646
- Background Eraser: refuse one colour channel of an RGB document by @rmsff in #13080
- Respect Lock Position in Add and Delete Anchor Point by @Bobderto in #13048
- feat(ui): the Pen's gear has a Rubber Band check item, off by default (#12900) by @ljkx in #13035
- Pen: Alt-drag on a straight segment adds an anchor and pulls out its handles (#12899) by @ljkx in #13037
- Brush: Alt+digit sets Smoothing (Alt+3 = 30%, Alt+0 = 100%) by @DuBearte in #12034
- Pattern Stamp: Behind in the Mode list, painting only where the layer is transparent (#12879) by @ljkx in #13028
- Smudge: Mode dropdown in the options bar (#12959) by @ljkx in #13031
- i18n: take translations from craft-i18n (cutover) by @benandez in #12374
- fix(format): treat an unsupported directory flush on Windows as done (#9440) by @Higgs32584 in #9861
- codecs: charge deep OpenEXR per-pixel bookkeeping against max_alloc by @Higgs32584 in #9786
- Judge the unsaved-changes prompt's Save as file.save for automation by @Higgs32584 in #9767
- Bridge: never send the control token to a listener that is not the app by @Higgs32584 in #9778
- [Extend XCF import into native PhotoCraft documents 1/6] Persist import conversion data and bounded native filter foundations by @Terra854 in #11009
- Keep automation's gate on actions automation wrote, whoever plays them by @Higgs32584 in #9783
- Judge a Home screen recent-row click as File › Open Recent for automation by @Higgs32584 in #9774
- fix(engine): keep missing-font type pixels through Image Size (#8860) by @alonfaraj in #8874
- fix(gpu): return once at the end of blend_channel so FXC can build the compositor by @ebosido444-ai in #8734
- Compose: Normal inside/center stroke replaces the layer beneath it (#6513) by @vangel76 in #6735
- Color Settings › Spot: dot gain for spot channel and Multichannel ink previews by @ingling in #6787
- Fix remaining grayscale Levels/Curves target mismatches by @hidoba in #6864
- perf(camera-raw): develop Shadows and Highlights on the GPU in the preview (#6916) by @fjamesprice in #6951
- perf(camera-raw): develop Dehaze, Clarity and Texture on the GPU in the preview (#6916) by @fjamesprice in #7020
- Camera Raw: coming back to PhotoCraft brings its window to the front by @texjer in #7119
- Linux packages: ship the CLI in source Flatpaks and offline automation guides by @haranishi in #7239
- perf(raster): add 16-bit RGBA/GRAYA row decode fast paths by @ian-cowley in #8246
- Use craft-heif from craft-libs for HEIC/HEIF by @dylanmtaylor in #13076
- fix(fill): a new Solid Color fill's picker opens with the foreground's CMYK inks by @FinnNk in #8728
- Tests: the batched GPU timing test checks one span per command buffer by @dotCooCoo in #8732
- Fonts: draw Georgian with craft-fonts' Noto Sans Georgian, installed Georgian faces, and on the web by @devius in #8812
- Guides: Shift snaps a moved guide to ruler ticks too, on whole pixels in a pixel ruler by @kuvshin888 in #8836
- fix(engine): CMYK Split Channels reads the composite's exact inks (#9236) by @DuBearte in #9246
- test: new layers made with an artboard selected go inside it (#9147) by @hectorviov in #9311
- fix(ui): a command shortcut closes an open menu or dropdown list and runs (#9065) by @hectorviov in #9314
- feat: Gradient Map keeps Photoshop's stops, midpoints and smoothness (#8351) by @DuBearte in #9319
- fix(format): a .pcraft load's decode budget follows the machine's memory (#8595) by @DuBearte in #9323
- fix(ui): enlarge slider hit areas (#9320) by @vanvo in #9326
- fix(ui): Line tool snaps like Photoshop's Align Edges, so a 1 px line fills one row by @hectorviov in #9506
- codecs: count TIFF strip/tile scratch against max_alloc by @Higgs32584 in #9781
- Preserve Art History Brush colors at transparent edges by @dotCooCoo in #9868
- CMYK: channel views and thumbnails show the document's inks (#8359) by @HEOJUNFO in #9940
- Options bar: Opacity right after Mode in every theme (#9784) by @ljkx in #9980
- Clouds: compress the histogram's tails instead of clipping them to the colours (#9959) by @ljkx in #9997
- Color wheel: feather the hue ring and triangle edges (#9996) by @TaylorBurke in #10009
- Brush: big imported brushes paint about twice as fast, with the same pixels by @artman67 in #10010
- Canvas: a slow brush no longer freezes the cursor and panels while you paint by @artman67 in #10013
- fix(ui): the Liquify preview shows the effect only inside the selection (#9541) by @FinnNk in #10044
- ci(deps): bump taiki-e/install-action from 2.87.29 to 2.90.2 in the actions group across 1 directory by @dependabot[bot] in #10238
- Codecs: a PNG's iCCP profile inflates to at most 16.7 MB (#8599) by @Lcoding15 in #10300
- automation: finish writes and exports below a Windows UNC root by @tiagomaker in #10323
- Wrap Pattern Preview moves so the tiles stay seamless by @jpmsantana in #10330
- PDF: spot channels as overprinting Separation plates (FILE-215-17) by @ingling in #10384
- Dialogs: one shared label column that never overruns in a longer translation (#9635) by @qvest-ssels in #10395
- perf(raster): fill fallible default tiles by row by @yoriswind in #10398
- Pen / Add Anchor Point: select the added smooth anchor and drag it (#8653) by @qvest-ssels in #10405
- Eyedroppers: one cursor over the image, and caps lock's precise crosshair (#9836) by @Lcoding15 in #10406
- Keep small shape splits cached within the pixel budget by @yoriswind in #10409
- Filter Gallery: the effect-layer list fills the column's height (#10335) by @qvest-ssels in #10410
- fix(ui): canvas presses on dialogs and groups (#10069, #10074) by @FinnNk in #10414
- perf(algo): drop the per-sample clamp from the box-blur row pass by @ebosido444-ai in #10425
- perf(algo): gather a strip before walking box-blur columns by @ebosido444-ai in #10426
- Save for Web: grey pane, checkerboard under the image only (#2362) by @hectorviov in #10442
- fix(ui): Keyboard Shortcuts records keys the app or the Mac menu bar uses (#8965) by @qvest-ssels in #10451
- Keep canvas uniforms distinct on software DX12 by @yoriswind in #10507
- fix(codecs): keep EXIF resolution cleanup linear on export by @chrisringrose in #10520
- Select and Mask, Content-Aware Fill: draw the ants with the canvas's ants (#10506) by @qvest-ssels in #10528
- A 1-bit TIFF opens in Bitmap mode, as in Photoshop (#10480) by @hectorviov in #10539
- Bitmap documents grey out filters and adjustments, all but Invert, as in Photoshop (#10484) by @hectorviov in #10545
- Fix Apply in the Variables Data Sets dialog by @yoriswind in #10597
- Avoid float staging during codec image depth conversion by @yoriswind in #10688
- Drops: route by a pure function, say when a folder is dropped, log how far a drag got (#10492) by @dark13b in #10720
- Save As lists PSB as its own type, and file type lists are sorted by name by @DingusMcRinkyDinky in #10822
- Fix Fill and Stroke for targeted masks by @yoriswind in #10896
- Match Color: choose a source layer by @yoriswind in #10901
- Path Selection: the pressed component selection survives, as a structure by @ugeenie in #10935
- SVG: refuse drawings whose rasterising needs too much memory (#6105) by @vangel76 in #10953
- fix(algo): Liquify replays a stroke with an absurd brush size or position without overflowing by @jayzed80 in #11013
- Preserve preset import dialogs after invalid API answers by @yoriswind in #11054
- Reject cross-artboard moves whose required translation overflows by @yoriswind in #11062
- Enable winit's font-free Adwaita decorations on FreeBSD by @pkubaj in #11106
- fix(affinity): charge shared text traversal and retained text against a document budget by @dylanmtaylor in #11149
- fix(video): a salvaged truncated GIF or WebP import discloses its missing frames (#11113) by @hnoerenberg in #11175
- Save for Web: stop input-driven horizontal growth by @anseltaft in #11191
- Preferences: Apply keeps a live theme change made while open (#11120) by @indy2kro in #11241
- Hand held by Space: right-click opens the view menu, as in Photoshop (#11271) by @indy2kro in #11292
- Floating document windows zoom from the Navigator and status bar (#11276) by @indy2kro in #11294
- Unsaved-changes prompt: ⌘D is Don't Save on macOS (#11282) by @TrevorBrown-dev in #11297
- Canvas: the sharp filter no longer depends on a page's reduction (#11122) by @indy2kro in #11317
- fix(atn): an explicit layers list exports one Set per layer (#7246) by @wwewtech in #8579
- Fix main: duplicate TIFF tag constants and clippy after the 11-11 merges by @tanish2k09 in #13128
- Image Processor: support current and open document sources by @se343r in #12858
- Color Sampler: Sample Size shared with the Eyedropper; every sampler reads the NxN average (#11732) by @hectorviov in #12175
- Painting tools: Shift+Alt+click adds a colour sampler by @hectorviov in #12245
- Gradient tool: sample each pixel where the reference application does, fixing Angle and Radial values by @DuBearte in #12287
- Red Eye: a press outside the selection does nothing by @rmsff in #13091
- fix(ui): constrain brush shift-drags to horizontal or vertical by @hnoerenberg in #11926
- fix(ui): the type layer menu takes the reference menu's entries (#12043) by @hnoerenberg in #12171
- Perspective Crop: the first drag deselects an active selection as its own Deselect step by @hectorviov in #12226
- fix(ui): show sampler target and scissors cursors over color samplers (#11744) by @coqui-software in #12145
- Mixer Brush: Auto-Load, Auto-Clean and Sample All Layers commands for shortcuts (#11959) by @hectorviov in #12308
- Paint Bucket: a click that fills nothing adds no history state by @rmsff in #13077
- Grey the split warp entries when no Warp is open by @rmsff in #12885
- fix(ui): make the Histogram panel follow the selection by @JohnXu28 in #4887
- Remove tool: a press on a type layer does nothing, with no rasterize prompt by @rmsff in #13099
- Art History Brush: refuse 16- and 32-bit documents with the reference texts by @rmsff in #13106
- Sponge: Reset Tool gives a 65 px soft tip at 25 % spacing (#13029) by @NaufalDzz in #13109
- Vertical Type Mask: show the Top / Center / Bottom align buttons by @rmsff in #13114
- Type Mask: a click on a text layer's glyphs edits that layer by @rmsff in #13113
- Healing Brush: refuse Indexed Color documents with the reference's alert by @rmsff in #13147
- Preferences: refuse paths with empty segments and bound the alternate shortcut list by @dylanmtaylor in #11228
- Mixer Brush: a wet click on an empty layer is a full-strength dab (#11944) by @hectorviov in #12285
- Recovery: replace a symlinked sidecar and do not sweep through symlinked bundle folders by @dylanmtaylor in #11230
- Actions: map Layer › New › Artboard and Artboard from Layers (#10723) by @ljkx in #12469
- Fix macOS Text Color Picker cursor lag with a native pipette by @SvenCarstensen in #12523
- Color Replacement: Shift+Alt letters set the active layer's blend mode by @hectorviov in #12261
- Color Replacement: a hard tip edge with Anti-alias off by @hectorviov in #12259
- Fit Content-Aware Move's middle only for a brightness change by @hsmith-dev in #12396
- Mixer Brush: sample-target cursor with Alt and no-entry over a locked layer (#11957) by @hectorviov in #12301
- Canvas: one wheel notch pans 16 screen pixels by @DuBearte in #12202
- fix(ui): the Count readout shows the visible total and the current group (#11764) by @DuBearte in #11866
- Brush HUD: hardness at the reference rate and a Diameter / Hardness / Opacity readout by @DuBearte in #12056
- The Sponge tool says why it cannot paint (#13030) by @Raghav2012Code in #13172
- Count tool: a right-click on the canvas opens the layer context menu (#11772) by @hectorviov in #12208
- Convert Point: edit only the targeted path by @rmsff in #13108
- Perspective Crop: regression tests for the shield and for Alt corner drags past the opposite corner by @hectorviov in #13004
- Delete Anchor Point: Delete with an anchor selected edits the path, never the layer (#12761) by @TrevorBrown-dev in #13073
- Fix main: eyedropper cursor tests accept the native pipette bitmap (#12523) by @davidmann4 in #13199
- fix(ui): use vector path icon for shape layers in Properties by @superplay2021 in #10787
- Keep document window canvases inert under a modal dialog by @wanikhawar in #12948
- ci: run Harden-Runner on every job by @dylanmtaylor in #13255
- Number fields take a decimal comma (#10729) by @Lcoding15 in #10738
- Paint Bucket: refuse Bitmap documents with the reference's alert by @rmsff in #13116
- Bound file read growth and publish files without replacement by @yoriswind in #11577
- Updates: take craft-update from craft-libs main at 6e03f65bf by @dylanmtaylor in #13281
- Convert Point: hit an anchor within 5 points by @rmsff in #13122
- Docs: before/after screenshots go in the PR description, not the repo by @davidmann4 in #13206
- Warp: one-decimal Bend/H/V, shared commit and cancel tooltips, greyed reference point by @rmsff in #13107
- Pen: Mode dropdown lists Shape, Path and a greyed Pixels by @rmsff in #13264
- Clone Stamp: a press without a source point shows the reference's alert by @rmsff in #13153
- Delete Anchor Point: deleting a live shape's anchor asks first, with Don't show again (#12768) by @TrevorBrown-dev in #13150
- Red Eye: canvas right-click opens the layer or selection menu by @rmsff in #13278
New Contributors
- @slafebre made their first contribution in #12406
- @devstivi made their first contribution in #9021
- @ArjenS-LA made their first contribution in #9077
- @TimothyBritt made their first contribution in #9798
- @terminalgate made their first contribution in #10690
- @tomgardenart made their first contribution in #10059
- @smyrgeorge made their first contribution in #7377
- @Terra854 made their first contribution in #11009
- @ian-cowley made their first contribution in #8246
- @tiagomaker made their first contribution in #10323
- @jpmsantana made their first contribution in #10330
- @chrisringrose made their first contribution in #10520
- @ugeenie made their first contribution in #10935
- @pkubaj made their first contribution in #11106
- @anseltaft made their first contribution in #11191
- @se343r made their first contribution in #12858
- @JohnXu28 made their first contribution in #4887
Full Changelog: v0.22.0...v0.23.0