Commit Graph
6596 Commits
Author SHA1 Message Date
Jeremy c19d201748 feat(installer): default to a per-user ArtCraft folder 2026-10-27 12:01:33 +00:00
Jeremy 9956352be0 packaging(windows): dual-scope MSI, per-user by default, under the ArtCraft suite folder
Microsoft "Single Package Authoring": Package/Scope="perUserOrMachine"
writes ALLUSERS=2 and MSIINSTALLPERUSER=1, so the package installs
per-user by default (no UAC prompt) into %LOCALAPPDATA%\Programs\ArtCraftPhotoCraft (Windows Installer redirects the ProgramFiles folder in a
per-user install), and per-machine into Program Files\ArtCraft\PhotoCraft
through the setup wizard's "Install for all users" box or msiexec
ALLUSERS=1. Registry follows the context automatically: HKMU writes HKCU
per-user and HKLM per-machine, HKCR classes land in HKCU\Software\Classes
per-user, and components are keyed on registry values (ICE38).

Upgrades update the copy registered in the same context: the remembered
InstallDir is read from HKLM and HKCU separately, and installing in the
other context while a copy already exists is stopped with a message naming
the fix rather than creating a silent duplicate. The existing UpgradeCode,
ProductCode behaviour and per-machine upgrades are unchanged.

The Start Menu shortcut becomes non-advertised in its own component (an
advertised shortcut must target its component keypath, which is now a
registry value), as the ArtCraft Launcher's MSI already does.

Built and checked with WiX 5.0.2: full ICE validation and ICE50 pass, and
the built package's Property table, launch conditions, directory chain and
registry roots were read back from the MSI.
2026-10-27 12:01:33 +00:00
aiongg 7ac7b8b106 refactor(selection): take the feather reach from the blur (#9802)
The feather's ⌈3σ⌉ truncation radius was written out in the blur and again in two engine callers: the windowed marquee and lasso feather (#9794) and the canvas-edge padding of Select › Modify › Feather. selection::feather_reach returns it from the blur's own σ rules, and both callers use it, so a change to the blur's reach can't leave them behind. Output is unchanged; a test pins that the feather leaves everything past its reach at zero.
2026-10-27 01:07:05 -04:00
aiongg 805ed134e4 Merge pull request #9697 from wanikhawar/perf/selection-morphology
Expand, Contract and Border: crop to the selection, up to 40× faster on small selections
2026-10-27 00:56:40 -04:00
aiongg a27436adcb Merge main into perf/selection-morphology
Resolves the move of crates/engine/src/selection_cmds.rs to cmd/selection_cmds.rs: the two hunks apply at the new path, and modify_window.rs with its tests moves under cmd/selection_cmds/.
2026-10-27 04:27:45 +00:00
Khawar Zamman Wani 55b8df82fc perf(selection): window marquee and lasso feather masks (#9794)
* perf: window marquee and lasso feather masks to drawn bounds

* perf: benchmark small feathered tool selections on a 24 MP canvas
2026-10-27 00:12:47 -04:00
aiongg d42f9da94a Merge pull request #9758 from aiongg/layout
refactor: shared module layout (craft-contrib#20)
2026-10-26 21:31:40 -04:00
skylar taylor-barrick 5c25299b61 Merge pull request #9749 from storytold/fix/nextest-0.9.150
ci: require nextest 0.9.150
2026-10-26 18:42:23 -06:00
aiongg 065c2c2beb test: keep split modules visible to the source scans
The i18n coverage scan and prefs_usage stopped reading a file at its first `#[cfg(test)] mod`. A split parent declares `#[cfg(test)] mod tests;` before the rest of its code, so the scans skipped that code, and on main an inline test module in the middle of panels.rs hid the code after it. Both now drop only the body of an inline test module.

The prefs audits in scorecard and prefs_usage count a read when the section and the field appear in the same file. Both now also treat a split module (`foo.rs` with `foo/`) as one file, and prefs_usage leaves out `engine/src/prefs/` as scorecard already does, since that directory now holds the rest of the prefs model.

On main and on this branch: the i18n coverage report is identical (2,142 source keys; the old scan found 2,049 on main), `cargo xtask scorecard --check` is up to date, and prefs_usage passes.
2026-10-26 22:54:56 +00:00
aiongg 85539a4f37 refactor(raw): split testgen.rs into testgen/ 2026-10-26 22:54:56 +00:00
aiongg 1f0d1a4ef3 refactor(psd): move tiff.rs's transcode module to tiff/transcode.rs 2026-10-26 22:54:56 +00:00
aiongg bb641e918a refactor(codecs): split tiff.rs into tiff/ 2026-10-26 22:54:56 +00:00
aiongg 96e670150f refactor(text): split layout.rs into layout/ 2026-10-26 22:54:56 +00:00
aiongg 57bfd18bd7 refactor(text): split psd.rs into psd/ 2026-10-26 22:54:56 +00:00
aiongg 9cfb3cc5b0 refactor(io): split smart_map.rs into smart_map/ 2026-10-26 22:54:56 +00:00
aiongg 2aa88b0956 refactor(io): split psd_export.rs into psd_export/ 2026-10-26 22:54:56 +00:00
aiongg 4d07ccded0 refactor(algo): split panorama.rs into panorama/ 2026-10-26 22:54:56 +00:00
aiongg ff2a29a364 refactor(algo): split inpaint.rs into inpaint/ 2026-10-26 22:54:56 +00:00
aiongg 7ba8fdc79f refactor(gpu): split plan.rs into plan/ 2026-10-26 22:54:56 +00:00
aiongg 81c83b124f refactor(gpu): split lib.rs into batch, cells, consts, convert, encode, fx_passes, kit, paging, readback, setup, textures 2026-10-26 22:54:56 +00:00
aiongg 273de6ace0 refactor(compose): split adjust.rs into adjust/ 2026-10-26 22:54:55 +00:00
aiongg 32588fb0ac refactor(compose): split effects.rs into effects/ 2026-10-26 22:54:55 +00:00
aiongg 9bb2423533 refactor(compose): split lib.rs into composite, content, ctx, extents, fx_cache, reduced, render 2026-10-26 22:54:55 +00:00
aiongg f44e18d6fe refactor(ui-egui): move text modules under text/ 2026-10-26 22:54:55 +00:00
aiongg b786bb01c1 refactor(ui-egui): move prefs modules under prefs/ 2026-10-26 22:54:55 +00:00
aiongg e47ee81e38 refactor(ui-egui): move input modules under input/ 2026-10-26 22:54:55 +00:00
aiongg 36199e41c3 refactor(ui-egui): move tools modules under tools/ 2026-10-26 22:54:55 +00:00
aiongg afd0b1c108 refactor(ui-egui): move widgets modules under widgets/ 2026-10-26 22:54:55 +00:00
aiongg 086bdba303 refactor(ui-egui): move menus modules under menus/ 2026-10-26 22:54:55 +00:00
aiongg b6afd0953d refactor(ui-egui): move dialogs modules under dialogs/ 2026-10-26 22:54:55 +00:00
aiongg 0b2c35c024 refactor(ui-egui): move panels modules under panels/ 2026-10-26 22:54:55 +00:00
aiongg c9ae745010 refactor(ui-egui): move canvas modules under canvas/ 2026-10-26 22:54:55 +00:00
aiongg b32f4a0a55 test(engine): name the print_cmds child tests by their cmd:: path
The spooling tests rerun themselves in a child process with an exact test-name filter. print_cmds moved under cmd/, so the filters name cmd::print_cmds::tests::…; with the old names the child ran no tests.
2026-10-26 22:54:55 +00:00
aiongg 501b7f3459 refactor(engine): move the *_cmds modules under cmd/ 2026-10-26 22:54:55 +00:00
aiongg 27d3634239 refactor(engine): move commands.rs to cmd.rs 2026-10-26 22:54:55 +00:00
aiongg 07b6d0602d refactor(ui-egui): split camera_raw_ui.rs into camera_raw_ui/ 2026-10-26 22:54:55 +00:00
aiongg d9f198e8b9 refactor(ui-egui): split caf_ui.rs into caf_ui/ 2026-10-26 22:54:55 +00:00
aiongg 17a3dd3204 refactor(ui-egui): split adjust_editors.rs into adjust_editors/ 2026-10-26 22:54:55 +00:00
aiongg 0a45d8d79b refactor(ui-egui): split gpu_canvas.rs into gpu_canvas/ 2026-10-26 22:54:55 +00:00
aiongg e10abdb0bb refactor(ui-egui): split vector_ui.rs into vector_ui/ 2026-10-26 22:54:55 +00:00
aiongg fa061e9255 refactor(ui-egui): split widgets.rs into widgets/ 2026-10-26 22:54:55 +00:00
aiongg 093c008d68 refactor(ui-egui): split prefs_ui.rs into prefs_ui/ 2026-10-26 22:54:55 +00:00
aiongg 3b2887fee1 refactor(ui-egui): split transform_tool.rs into transform_tool/ 2026-10-26 22:54:54 +00:00
aiongg 94acf1700b refactor(ui-egui): split canvas.rs into canvas/ 2026-10-26 22:54:54 +00:00
aiongg cc46a4f3a2 refactor(ui-egui): split preset_panels.rs into preset_panels/ 2026-10-26 22:54:54 +00:00
aiongg df8e481a94 refactor(ui-egui): split file_ui.rs into file_ui/ 2026-10-26 22:54:54 +00:00
aiongg 5b8e05d57a refactor(ui-egui): split view_cmds.rs into view_cmds/ 2026-10-26 22:54:54 +00:00
aiongg 41bbcd58e3 refactor(ui-egui): split state.rs into state/ 2026-10-26 22:54:54 +00:00
aiongg 9900b7fba6 refactor(ui-egui): split menus.rs into menus/ 2026-10-26 22:54:54 +00:00
aiongg f07a484fb7 test(automation): read UI_SET_FIELDS from control/params.rs
The ui-egui control.rs split moved the UI_SET_FIELDS declaration to control/params.rs; the MCP test reads it from source by path.
2026-10-26 22:54:54 +00:00