Commit Graph
3466 Commits
Author SHA1 Message Date
David MannandClaude Opus 5.5 50df815d99 Merge main into fix/crop-default-mode-box-undo
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-17 17:19:55 +02:00
David MannandClaude Opus 5.5 030818dcc2 Merge main into fix/image-size-resolution-physical
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-17 17:16:40 +02:00
David MannandClaude Opus 5.5 d4d5e9cf93 Merge main into fix/6988-ui-set-f32-range
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-17 17:11:07 +02:00
David MannandClaude Opus 5.5 bdeff4fd6c Merge main into fix/5559-bitmap-dialog
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 17:08:28 +02:00
David MannandClaude Opus 5.5 931e762899 Merge main into fix/5559-bitmap-dialog
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 17:08:26 +02:00
David MannandClaude Opus 5.5 af85bd7b0a Merge main into fix/stamp-down-keeps-clipping
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-17 17:08:18 +02:00
David Mann 4616bfb256 Merge origin/main into fix/atn-crop-units 2026-10-17 17:00:34 +02:00
David Mann f5ea68d776 Merge origin/main into fix/merged-background-locks 2026-10-17 17:00:26 +02:00
David Mann 3f45847cb3 Merge origin/main into fix/gradient-style-scale-range 2026-10-17 17:00:15 +02:00
David Mann dc71c6440c Merge origin/main into fix/gif-delay-below-1fps 2026-10-17 17:00:12 +02:00
David Mann 73e48771a7 Merge origin/main into fix/conditional-mode-change-gray 2026-10-17 17:00:10 +02:00
David Mann 378f2eb680 Merge origin/main into fix/lens-smart-filter-focal 2026-10-17 17:00:07 +02:00
David Mann 97059e99fd Merge origin/main into fix/transform-selection-reference 2026-10-17 17:00:05 +02:00
David Mann 671878c014 Merge origin/main into fix/crop-angle-readout 2026-10-17 17:00:02 +02:00
David Mann 68629b4cf8 Merge origin/main into fix/crop-size-point-pref 2026-10-17 16:59:59 +02:00
David Mann 3549195cf4 Merge origin/main into fix/match-zoom-clamp 2026-10-17 16:59:57 +02:00
David Mann 3d1f76a367 Merge origin/main into fix/headless-index-keeps-active-doc 2026-10-17 16:59:54 +02:00
David Mann b18b64c039 Merge origin/main into fix/headless-save-quality 2026-10-17 16:59:51 +02:00
David Mann 05c431317f Merge origin/main into fix/actions-delete-drops-fkey 2026-10-17 16:59:43 +02:00
David Mann 33d6b06693 Merge origin/main into fix/crop-target-size-samplers 2026-10-17 16:59:41 +02:00
David Mann f8c7955699 Merge origin/main into fix/artboards-to-files-marks 2026-10-17 16:59:38 +02:00
David Mann 45ad14fbac Merge origin/main into fix/timeline-setprops-work-area 2026-10-17 16:59:35 +02:00
David Mann 1193ebed08 Merge origin/main into fix/shortcut-set-keeps-action-fkeys 2026-10-17 16:59:33 +02:00
David Mann dd9e44706a Merge origin/main into fix/multichannel-channel-target 2026-10-17 16:59:30 +02:00
David MannandClaude Opus 5.5 a32b588ae6 Crop / Canvas Size: extending keeps the Background's hidden pixels (#7086)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 16:58:36 +02:00
dotCooCoo 274d7c0a36 Merge main into fix/mixer-brush-clean-and-load 2026-10-17 07:47:04 -07:00
David MannandClaude Opus 5.5 cb5b1f8e9e Crop: in default mode, box Undo/Redo keeps the box in place (#7088)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 16:45:16 +02:00
ebosido444-ai fcd337e1fc perf(text): rasterize a type layer's pixels on all cores, bit for bit the same
A type render spends most of its time after the glyphs are drawn: composing each
colour's coverage over the premultiplied accumulator, dividing it back to straight
colour, and converting the tile bytes. All three are per pixel - no pixel reads a
slot another wrote - so they ran one after another on one core for no reason.

Measured on a 3.75 MP paragraph (4000 characters, 14 pt at 300 dpi, 1851 glyphs),
release, Windows 11, i5-10300H: rasterize 98.3-103.9 ms before, 60.3-61.8 ms after
(1.6-1.7x). Whole-render stage profile before: ink rect 4.1, draw 18.6-22.9, prefix
sum 7.0-8.1, composite 22.6-33.4, unpremultiply 11.2-14.0, write_region 23.8, prune
3.1 ms.

The glyph drawing, the winding prefix sum and the ink-rect pass stay on one thread:
the first two carry a running accumulator across pixels, and the band split that
would keep them bit-identical costs a second glyph traversal per band.

Native only (rayon, as the other crates): the web build keeps the serial loops.
2026-10-17 17:42:50 +03:00
David MannandClaude Opus 5.5 4fc492d2ca Actions: an imported Crop step in a unit other than pixels is not applied as pixels (#7084)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 16:40:40 +02:00
David MannandClaude Opus 5.5 8574f8d809 Merge to HDR Pro and merged duplicates: the Background layer is a real Background (#7078)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 16:39:44 +02:00
Hamza Naveed efa1edd079 algo: gate the recorded-hash test's helpers with the test (#7053)
`blocks` and `fnv` exist only for `harris_and_describe_hashes_recorded_from_the
_serial_code`, which is `#[cfg(all(target_os = "linux", target_arch =
"x86_64"))]` because the hashes it compares against go through the platform's
hypot / ln / cos / atan2 / sin_cos. Everywhere else the test is compiled out and
the two helpers are left unused, so `-D warnings` fails on `dead_code`:

    error: function `blocks` is never used   crates/algo/src/features.rs:704
    error: function `fnv` is never used      crates/algo/src/features.rs:708

They now carry the same cfg as the only thing that calls them.

CI's matrix is ubuntu-latest and windows-latest and runs clippy on both, so this
fails the Windows leg as much as a local run on macOS: `target_os = "linux"` is
false for both.
2026-10-17 08:39:15 -06:00
Josephand00xJ0 351149f0df Fix the build: restore export_presets in load_presets_json (#5344 x #5616) (#6906)
#5344 added the export_presets field to Persisted; #5616 rewrote load_presets_json to read each set with take() and its Persisted initializer lacked the new field, so main stopped compiling (E0063 at presets/mod.rs:180). Read export_presets the same way as the other sets; the existing load step and round-trip test cover it.

Co-authored-by: 00xJ0 <56056764+00xJ0@users.noreply.github.com>
2026-10-17 08:32:54 -06:00
David MannandClaude Opus 5.5 0b1953c494 Crop: W x H x Resolution follows the Point/Pica Size preference (#7038)
The crop tool's W x H x Resolution mode converted points and picas at a
fixed 72 pt/in, while Image Size, Canvas Size (#5757), the rulers, Info
and the shape dialog use Preferences > Units & Rulers > Point/Pica Size.
With Traditional (72.27), W "72 pt" x H "1 in" at 300 ppi cropped to
300 x 300 instead of 299 x 300.

target() and ratio() now take the points per inch, and the callers
(commit_params, preset_ratio, fit_frame) pass the preference.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 15:45:51 +02:00
David MannandClaude Opus 5.5 b2f9c45c6a Match Zoom: matched views stay within each document's zoom range (#7036)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 15:45:34 +02:00
David MannandClaude Opus 5.5 758ad4db44 Crop: the turn readout never shows -0.0° or -180.0° (#7040)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 15:45:13 +02:00
David MannandClaude Opus 5.5 cb185320ed Conditional Mode Change: "gray" as a single source mode matches Grayscale (#7042)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 15:44:56 +02:00
David MannandClaude Opus 5.5 7ebaa94a82 Render Video: GIF frame delay follows timelines under 1 fps (#7045)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 15:44:43 +02:00
David MannandClaude Opus 5.5 01a58e8f6f Layer Style: gradient overlay and stroke scale stay within 10-150 % (#7047)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 15:44:42 +02:00
David MannandClaude Opus 5.5 1bb3542b99 Lens Correction: smart filters keep the exact focal length (#7029)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 15:42:14 +02:00
David MannandClaude Opus 5.5 276d830e7c Transform Selection: an unknown reference point is an error (#7027)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 15:40:09 +02:00
David MannandClaude Opus 5.5 e1c119200b Automation: place and layer/data-set export by index keep the active document (#7025)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 15:37:18 +02:00
David MannandClaude Opus 5.5 c6ea59461f Automation: doc.save rejects a bad quality instead of ignoring or clamping it (#7023)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 15:36:02 +02:00
David MannandClaude Opus 5.5 000fec6f59 Keyboard Shortcuts: switching sets keeps action function keys (#7004)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 15:12:43 +02:00
David MannandClaude Opus 5.5 30505e3b53 Crop: Color Samplers scale with a W x H crop (#7012)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 15:12:30 +02:00
David MannandClaude Opus 5.5 fd2c10bba8 Artboards to Files: paths, notes, slices and marks move with the board (#7010)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 15:12:17 +02:00
David MannandClaude Opus 5.5 361a1bf22e Channels: Multichannel conversion keeps the targeted channel (#7002)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 15:12:14 +02:00
David MannandClaude Opus 5.5 99c6fb4ce7 Timeline: a longer duration moves a work area that reached the old end (#7006)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 15:10:46 +02:00
David MannandClaude Opus 5.5 1c312c4ba6 Actions: deleting an action removes its function key (#7014)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 15:10:33 +02:00
David MannandClaude Opus 5.5 82707fd15d Stamp Down keeps the lower layer's clipping, label and link (#6999)
Stamp Down rebuilt the layer below from scratch and copied only its id,
name, blend mode, visibility and locks, so a clipped layer came back
unclipped (its pixels showing outside the clip base) and lost its colour
label and link. Photoshop writes the stamp into the existing layer; keep
the three properties as Merge Down already does.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 15:04:16 +02:00
David MannandClaude Opus 5.5 8b61a8b186 Control: ui.set rejects zoom, rotation, center and dockWidth beyond f32 range (#6988)
A finite f64 like 1e39 became inf on `as f32`: zoom jumped to 100%,
rotation reset to 0, dockWidth fell to its minimum and center was stored
as [inf, 0], all with ok:true. A new f32_field (same filter as
rotate_view's finite_number) rejects these in the validate phase, so a
rejected call changes nothing. num_field stays as is: pointer events
must keep accepting huge coordinates.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 14:08:03 +02:00