Commit Graph
2312 Commits
Author SHA1 Message Date
Dylan M. Taylor d87f9effe1 refactor(engine): simplify asset and code generation helpers 2026-10-28 16:00:36 +00:00
Dylan M. Taylor 5e16683963 refactor(engine): simplify canvas and board handlers 2026-10-28 16:00:36 +00:00
Dylan M. Taylor 23f57c8660 refactor(engine): simplify command handling for strict clippy 2026-10-28 16:00:36 +00:00
Dylan M. Taylor bafda992a7 docs: clarify crate lint placement 2026-10-28 16:00:36 +00:00
Dylan M. Taylor 4268bd859f refactor(fig): split mapping and lint test helpers 2026-10-28 16:00:36 +00:00
Dylan M. Taylor 6ebcf6b511 refactor(text): split shaping and layout finishing 2026-10-28 16:00:36 +00:00
Dylan M. Taylor c618e402fa refactor(format): replace wildcard imports 2026-10-28 16:00:36 +00:00
Dylan M. Taylor 99afdd99ab docs: document workspace lint inheritance 2026-10-28 16:00:36 +00:00
Dylan M. Taylor 8591d44909 refactor(doc): declare node property dependencies 2026-10-28 16:00:36 +00:00
Dylan M. Taylor 10bb163626 fix(xtask): apply workspace lint policy 2026-10-28 16:00:35 +00:00
Dylan M. Taylor e1a223bb1f refactor(layout): split flow layout phases 2026-10-28 16:00:35 +00:00
Dylan M. Taylor c420613efa chore(clippy): enforce strict workspace lint policy 2026-10-28 16:00:35 +00:00
aiongg 90054a89c4 Merge pull request #1399 from Jeremy8776/feat/install-scope-policy
Windows installation policy: FigCraft
2026-10-27 17:09:27 -04:00
aiongg 2ed7aee28d ci: use storytold/craft-common-actions at the merged installer-policy commit 2026-10-27 20:51:59 +00:00
Jeremy 738b218837 fix(installer): check the exact architecture-specific machine folder
The pre-signing check matched any folder named Program Files, so it rejected
a valid MSI when Windows resolves Program Files elsewhere, accepted the 64-bit
root for an x86 package and accepted a different app name. Build the expected
folder from the package architecture's resolved root and the policy name.
2026-10-27 19:08:54 +00:00
aiongg 8b591f703d Merge pull request #1437 from Silvertree2010/perf/export-speed
Speed up raster export: faster blur and spread passes
2026-10-27 13:40:56 -04:00
NetterSilverandClaude Opus 5.5 adb1b43033 Speed up raster export: faster blur and spread passes
Shadows and layer blurs dominated PNG/JPG/WebP export time (gdb stack
sampling of the example files: about 45% in fx::box_blur_h, 13% in
fx::morph). Both now produce the same bytes, faster:

- fx::blur runs its three box passes per row while the row is in cache,
  works on whole pixels instead of bounds-checked bytes, skips fully
  transparent rows, transposes in cache-friendly column blocks, and
  splits rows and transposes across rayon on desktop for pixmaps of
  64K pixels and more, only when not already on a rayon worker (a band
  of render_view stays on its thread: no nested parallelism).
- fx::morph (shadow spread on layers that aren't one outline) uses the
  van Herk / Gil-Werman running max/min: constant work per pixel instead
  of 2r + 1.

Integer arithmetic and pass order are unchanged; new tests compare both
against the previous implementations byte for byte, including sizes on
the parallel path.

An ignored timing test exports every top-level frame of examples/ as
PNG, JPG and WebP at 2x through export_file:
cargo test --release -p figcraft-engine --lib export_timings -- --ignored --nocapture

Ryzen, 16 threads, Linux; median of 7 (min):
  PNG   2195 ms (2182) ->  992 ms (989)   -55%
  JPG   2880 ms (2560) -> 1550 ms (1535)  -46%
  WebP  1964 ms (1901) -> 1022 ms (1018)  -48%
  total 7035 ms (6677) -> 3567 ms (3555)  -49%
All 80 exported files (PNG, JPG, WebP, PDF, SVG) are byte-identical.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 17:43:23 +01:00
Jeremy 2893518c84 fix(installer): resolve the wizard scope and folder correctly
Real msiexec runs (per-user and all-users, silent and wizard) found two defects
that the metadata fixtures cannot see:

- "Only for me" published ALLUSERS=2, so FindRelatedProducts treated the run as
  per-machine and skipped the existing per-user copy. An interactive upgrade
  left two registered products and uninstall left files behind. The page now
  leaves ALLUSERS unset for a per-user choice.
- Windows Installer resolves Program Files once, for the context it started in,
  so choosing "Everyone" in the wizard installed into the user profile with a
  machine-wide registration. The wizard now sets the new-install folder itself
  after the choice (Program Files, Program Files (x86) for 32-bit, or the
  per-user Programs folder). Silent installs are unchanged.

check-install-policy.ps1 now fails if either regresses.
2026-10-27 15:32:22 +00:00
aiongg bdb7e84606 fix(ui): dropdown menus grow back after a search with no matches (#1429)
* feat(ui-egui): font family menu keeps its search field and grows back after a filter clears

Repin craft-libs to the shared dropdown (craft-ui), move the font family menu to
craft_ui::combo::Menu with the search in a fixed header, and use craft_ui::ComboBox
for the credits sort. clippy bans egui::ComboBox.

* chore(deps): craft-libs 60d60d48 (dropdown fixes)

* chore(deps): craft-libs 4d7b82f7 (dropdown fixes)

* chore(deps): craft-libs 92d392cf (#387 merged)

* fix(ui-egui): craft-ui on every target (wasm uses the shared ComboBox too)
2026-10-27 10:28:10 -04:00
Jeremy 8d1460c3c0 fix(installer): harden install-policy checks and packaging-lint workflow 2026-10-27 12:01:18 +00:00
Jeremy 1288e40a53 fix(installer): address scope and ARM64 review feedback 2026-10-27 12:01:18 +00:00
Jeremy d17d3f4860 feat(installer): default to a per-user ArtCraft folder 2026-10-27 12:01:18 +00:00
aiongg 43af145a12 Merge pull request #1394 from aiongg/layout
refactor: shared module layout (craft-contrib#20)
2026-10-26 21:30:55 -04:00
skylar taylor-barrick 695054520c Merge pull request #1395 from storytold/fix/nextest-0.9.150
ci: require nextest 0.9.150
2026-10-26 17:35:59 -06:00
aiongg 60c671da66 docs: update source paths for the layout moves 2026-10-26 20:36:51 +00:00
aiongg 52d89286cf refactor(collab-net): move hub test files to hub/ 2026-10-26 20:36:51 +00:00
aiongg c9d6b356fc refactor(format): move fig/map test files to fig/map/ 2026-10-26 20:36:51 +00:00
aiongg e1e5b4bbe3 refactor(ui-egui): move widgets/style_picker test files to widgets/style_picker/ 2026-10-26 20:36:51 +00:00
aiongg 990742c32e refactor(ui-egui): move present test files to present/ 2026-10-26 20:36:51 +00:00
aiongg aca3643b18 refactor(ui-egui): move control test files to control/ 2026-10-26 20:36:51 +00:00
aiongg 8f2f93cd0b refactor(ui-egui): move canvas test files to canvas/ 2026-10-26 20:36:51 +00:00
aiongg d436103fca refactor(ui-egui): move i18n test files to i18n/ 2026-10-26 20:36:51 +00:00
aiongg a1308e1c1a refactor(ui-egui): move dialogs/credits test files to dialogs/credits/ 2026-10-26 20:36:51 +00:00
aiongg 9ca6e1a82f refactor(ui-egui): move bidi test files to bidi/ 2026-10-26 20:36:51 +00:00
aiongg 0330a7cc85 refactor(engine): move assets/components test files to assets/components/ 2026-10-26 20:36:51 +00:00
aiongg 2576e646a1 refactor(engine): move sharing/background test files to sharing/background/ 2026-10-26 20:36:51 +00:00
aiongg 7d70e0bfe5 refactor(engine): move assets/library test files to assets/library/ 2026-10-26 20:36:51 +00:00
aiongg 9c97cb6e17 refactor(engine): move assets/library_server test files to assets/library_server/ 2026-10-26 20:36:51 +00:00
aiongg 32bd9dc35a refactor(engine): move fonts test files to fonts/ 2026-10-26 20:36:51 +00:00
aiongg 3398ec3c8c refactor(engine): move automation/file_access test files to automation/file_access/ 2026-10-26 20:36:50 +00:00
aiongg f664a82093 refactor(engine): move assets/library_swap test files to assets/library_swap/ 2026-10-26 20:36:50 +00:00
aiongg 3102bffc90 refactor(server): split store.rs into store/ 2026-10-26 20:36:50 +00:00
aiongg a7a35a8322 refactor(collab-net): split hub.rs into hub/ 2026-10-26 20:36:50 +00:00
aiongg 064e6be65f refactor(format): split fig/export.rs into export/ 2026-10-26 20:36:50 +00:00
aiongg 450675919f refactor(format): split fig/map.rs into map/ 2026-10-26 20:17:49 +00:00
aiongg 3b56a856be refactor(ui-egui): split app.rs into app/ 2026-10-26 20:17:49 +00:00
aiongg 5c29d184f4 refactor(ui-egui): split icons.rs into icons/ 2026-10-26 20:17:49 +00:00
aiongg 1d892d2e7b refactor(ui-egui): split panels/typography.rs into typography/ 2026-10-26 20:17:48 +00:00
aiongg f61032b3c9 refactor(ui-egui): split canvas.rs into canvas/ 2026-10-26 20:17:48 +00:00
aiongg 99edc6c815 refactor(ui-egui): split panels/right.rs into right/ 2026-10-26 20:17:48 +00:00