29 Commits
Author SHA1 Message Date
Marco Arnulfo e4f005d3dc Palette PNGs open in Indexed Color mode with their colour table (part of #4804) (#4817) 2026-10-13 12:33:39 -04:00
Marco Arnulfo 2ca12e17b5 Direct Selection: arrow keys nudge the selected anchors (fixes #4486) (#4500) 2026-10-13 12:11:24 -04:00
Marco Arnulfo 997406a584 Layer Style applies an open Free Transform first, so its preview shows (fixes #4821) (#4835) 2026-10-13 12:02:58 -04:00
Marco Arnulfo 78b70df227 Canvas: the CPU canvas shows crisp pixels when zoomed in (fixes #4810) (#4825) 2026-10-13 12:02:51 -04:00
Marco Arnulfo 665cb581ad Smart Filters: Delete removes the selected filter, not its smart object (part of #4751) (#4764) 2026-10-13 12:02:44 -04:00
Marco Arnulfo 78dea7c6e4 fix(ui): an open Free Transform box takes Zoom tool drags and clicks (part of #4799) (#4808) 2026-10-13 12:02:01 -04:00
Marco Arnulfo 9a4efabe22 A file dropped on the canvas applies the open Free Transform and is placed at once (fixes #4833) (#4849) 2026-10-13 12:01:54 -04:00
Marco Arnulfo 5c73f4fffa TIFF: save uncompressed by default, like Photoshop (fixes #4484) (#4491) 2026-10-13 11:56:27 -04:00
04f0b0e86b Brush: the Mode dropdown shows in every theme, not only Pro (#4537)
* Brush: the Mode dropdown shows in every theme, not only Pro (fixes #4512)

* Options bar scroll test: wheel over Studio's bar clear of the Brush Mode dropdown

The Brush's new Mode dropdown takes the wheel to step through blend modes, so
the test's pointer at the bar's centre landed on it at 800 px in Studio.

Co-Authored-By: Claude Opus 5.5 <[email protected]>

---------

Co-authored-by: Brandon Thomas <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>
2026-10-13 02:52:14 -04:00
Marco ArnulfoandBrandon Thomas 25e29e2583 Filters: ⌘Z steps the open dialog's settings instead of the document (part of #4697) (#4715)
Filter Gallery, Adaptive Wide Angle, Vanishing Point and every parameter dialog (Lens Correction, Image › Adjustments, …) now keep a history of their own settings: ⌘Z / ⇧⌘Z step through it, one drag is one step, and the document's History beneath is left alone. Camera Raw is left to #4136.

Co-authored-by: Brandon Thomas <[email protected]>
2026-10-13 02:47:18 -04:00
Marco ArnulfoandBrandon Thomas 7610116123 Layers panel: clicking a row's lock icon unlocks the layer (fixes #4723) (#4734)
Co-authored-by: Brandon Thomas <[email protected]>
2026-10-13 02:46:43 -04:00
95a9a6b29c Layers: Add vector mask makes the mask from the selected path and targets it (#4740)
* Layers: Add vector mask makes the mask from the selected path and targets it (fixes #4728)

* Pen menu test: the vector mask made from a path becomes the active path

Co-Authored-By: Claude Opus 5.5 <[email protected]>

---------

Co-authored-by: Brandon Thomas <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>
2026-10-13 02:45:53 -04:00
Marco ArnulfoandBrandon Thomas 4eb8ca25bd Layers: right-clicking a layer-mask thumbnail opens the mask menu (fixes #4575) (#4605)
Co-authored-by: Brandon Thomas <[email protected]>
2026-10-13 01:15:13 -04:00
Marco ArnulfoandBrandon Thomas 93397b08c6 Fill keys: Alt/Cmd+Backspace recolour the text of a type layer (fixes #4580) (#4606)
Co-authored-by: Brandon Thomas <[email protected]>
2026-10-13 01:15:00 -04:00
Marco ArnulfoandBrandon Thomas 9716b2b319 Gradient options bar: the swatch covers its checkerboard at half-pixel offsets (fixes #4577) (#4616)
Co-authored-by: Brandon Thomas <[email protected]>
2026-10-13 01:14:37 -04:00
Marco ArnulfoandBrandon Thomas 8da02bf540 Hue/Saturation: colour ranges apply in full to dull colours (part of #4089) (#4645)
Co-authored-by: Brandon Thomas <[email protected]>
2026-10-13 01:13:26 -04:00
Marco ArnulfoandBrandon Thomas bb15340af6 Filter dialogs: the preview keeps square pixels (fixes #4640) (#4655)
The in-dialog preview clamped the texture UV to the image but still drew
it over the whole preview region. Whenever the region overhung the image
on one axis (a 100% view of a small document in the wide preview), that
axis was stretched to fill it. The preview now draws only the part of the
source rectangle that lies on the image, at its own place and scale in the
region, with the checkerboard under the image only.

Co-authored-by: Brandon Thomas <[email protected]>
2026-10-13 01:12:50 -04:00
Marco ArnulfoandBrandon Thomas 481b939fdf PSD save: keep the Lr16/Lr32 padding outside the block length (part of #4654) (#4663)
Co-authored-by: Brandon Thomas <[email protected]>
2026-10-13 01:12:39 -04:00
Marco ArnulfoandBrandon Thomas 45ce763ebb New Document: blank presets follow the picked orientation and physical unit (part of #4668) (#4686)
Co-authored-by: Brandon Thomas <[email protected]>
2026-10-13 01:11:09 -04:00
Marco ArnulfoandBrandon Thomas adaebc084d Channels: clicking RGB hides the alpha channel overlay (fixes #4538) (#4564)
Co-authored-by: Brandon Thomas <[email protected]>
2026-10-13 00:37:42 -04:00
Marco ArnulfoandBrandon Thomas 139f4cf01d Fit Image: the dialog is as narrow as its few fields (fixes #4673) (#4692)
Co-authored-by: Brandon Thomas <[email protected]>
2026-10-13 00:12:30 -04:00
Marco ArnulfoandBrandon Thomas 71968f0806 Free Transform: the live preview feathers a linked layer mask (part of #4560) (#4581)
Co-authored-by: Brandon Thomas <[email protected]>
2026-10-12 23:38:14 -04:00
Marco Arnulfo 88f84aab59 Raw: treat DNG samples piled up below the stated white level as clipped (fixes #4348) (#4389)
Some DNG writers state a white level the sensor never reaches (an iPhone
15 Pro Max Bayer DNG states 4095 and clips at 3567). Development clips
each channel at 1 after white balance, so red and blue reached 1 while
green stayed at 0.85 and blown highlights turned magenta. On decode, a
per-colour pile-up clearly below the white level is now raised to it, as
in storytold/lightcraft#586.
2026-10-12 22:23:59 -04:00
Marco Arnulfo 2cb3b70d97 Crop tool: the drawing crosshair, not the move cursor, inside the untouched default frame (fixes #4461) (#4481) 2026-10-12 21:47:50 -04:00
10ba166a82 feat(codecs): open DDS textures, uncompressed and BC1-BC3 (#1327) (#4255)
A read-only DirectDraw Surface codec on the model of PCX: the top mip
level of a 2D texture, uncompressed (channel masks, RGB or luminance,
8 to 32 bits) or BC1/BC2/BC3 (DXT1/3/5), with the legacy or the DX10
header. Cubemaps, arrays, volumes and other formats are refused with
an Unsupported error naming what was found; every header field is
treated as hostile (checked sizes, limits before allocating, no
indexing on file offsets).

Co-authored-by: Brandon Thomas <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>
2026-10-12 21:47:16 -04:00
Marco Arnulfo 8145bea70f Control: a transport that gives up knows whether the command was dispatched (#3662) (#4256)
* Control: a timeout says whether the command ran (#3662)

A request still queued when its deadline passes is dropped before
dispatch, but it answered with the same text as the transport giving up
on a command that may still apply. The two now read differently: "timeout:
not run ... safe to re-send" and "timeout: no reply in 60s ... may still
apply", both keeping the `timeout` prefix machines match on.

* Control: a transport that gives up knows whether the command was dispatched (#3662)

The transport and the UI thread share the reply deadline, and the
transport's wait runs out first, so the UI thread's "not run" reply
almost never reached a client. A request now carries a dispatch flag
settled once between them: the UI thread claims it before running, the
transport abandons it when it stops waiting. The transport then replies
"not run" for a request that will never run, and "may still apply"
only for one that was dispatched; a request given up on is never run.
2026-10-12 20:53:33 -04:00
Marco Arnulfo a1fbfd9a6c Filters on a type layer: ask to rasterize or convert to a Smart Object instead of greying out (#4333)
* Filters on a type layer: ask to rasterize or convert to a Smart Object instead of greying out (fixes #4303)

* Filters on a type layer: Liquify, Filter Gallery, Camera Raw, Adaptive Wide Angle, Vanishing Point and Last Filter ask too (fixes #4303)
2026-10-12 19:30:58 -04:00
Marco Arnulfo cd36d1ea0d Delete with several layers selected deletes them, not the active layer's targeted mask (#4025) (#4078) 2026-10-12 18:52:43 -04:00
Marco Arnulfo 40427f25dc Properties: a new adjustment or fill layer brings Properties to the front (#4028) (#4079) 2026-10-12 18:47:59 -04:00