Commit Graph
3310 Commits
Author SHA1 Message Date
Claude 7f33b11ba1 M4: the text-style level lists are craft-ui combo boxes
Main now refuses egui::ComboBox through clippy (#4988: its menu can't
grow back while open, egui#5225), and the merge brought that rule in.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GbuSKAS2k5248LGFEapMUR
2026-10-27 22:27:27 +00:00
Claude d915af5ed5 Merge remote-tracking branch 'upstream/main' into feat/bookmarks-from-text-styles 2026-10-27 22:27:02 +00:00
aiongg 5af1027652 Merge pull request #4892 from Jeremy8776/feat/install-scope-policy
Windows installation policy: PdfCraft
2026-10-27 17:11:07 -04:00
Claude cace97e7b2 M4: one text style can't be given to two bookmark levels
A line goes to the first level whose style it is in, so the same style
for two levels, or one within the size tolerance of the other, left the
later level empty without a word. The edit now refuses it, for the dialog
and automation alike, naming the two levels (CodeRabbit on #4560).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GbuSKAS2k5248LGFEapMUR
2026-10-27 21:02:46 +00:00
aiongg dfb74c7990 ci: use storytold/craft-common-actions windows-arm64 workflow 2026-10-27 20:52:54 +00:00
aiongg e8955737e0 Merge storytold/pdfcraft main 2026-10-27 20:52:31 +00:00
Claude 65d8385616 Merge remote-tracking branch 'upstream/main' into feat/bookmarks-from-text-styles
# Conflicts:
#	crates/automation/src/lib.rs
#	crates/engine/src/lib.rs
#	crates/ui-egui/src/lib.rs
#	crates/ui-egui/src/panels.rs

Main's module layout (#4889) moved what this branch changed: the tools to
automation's dispatch.rs (the levels parser to json.rs), the edit to
engine's edit.rs, edit/labels.rs and edit/run.rs, Document::text_styles
to document.rs, the dialog state to state.rs and app.rs, and the menu
item to panels/right.rs and panels/bookmarks.rs. The dialog module joins
the others in dialogs/. Main's craft-menu bar (#4752) lists its commands
by hand, so bookmark.from_text_styles is added after
bookmark.from_structure.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GbuSKAS2k5248LGFEapMUR
2026-10-27 20:46:00 +00:00
aiongg 9e90b2a54d refactor(ui): use craft-ui's ComboBox for every dropdown (#4988)
* Use craft_ui::ComboBox so dropdown menus grow back (egui#5225)

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

* chore(deps): craft-libs 6af63481 (dropdown fixes)

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

* chore(deps): craft-libs 92d392cf (#387 merged)
2026-10-27 16:22:20 -04:00
aiongg 1889690bfa Merge pull request #5039 from Jeremy8776/fix/ocr-model-onnx-urls
Packaging: fetch OCR models from the ONNX URLs (legacy RTEN URLs return 403)
2026-10-27 15:57:22 -04:00
Jeremy bf353cb0d9 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:13:37 +00:00
Kyle Kassen da8cea2b0b M10: reuse verified OCR model and packaging prerequisites 2026-10-27 18:54:41 +00:00
aiongg e9fc890a86 Merge pull request #5026 from Silvertree2010/perf/export-speed
perf(engine): export page images on worker threads (about 80% less wall time)
2026-10-27 13:42:21 -04:00
NetterSilverandClaude Opus 5.5 37bf4ee986 perf(engine): export page images on worker threads
Export > Image spent its time in the PNG, JPEG and TIFF encoders, one
page after another: on a 55-page manual at 150 dpi, drawing every page
took about 0.34 s and encoding it 1.1 s (PNG) to 2.0 s (JPEG).

Exporter::images exports a list of pages, drawing and encoding several
at once on worker threads, each with its own PageRenderer (as
automation's extract_parallel does), and hands the files to a sink in
page order on the calling thread. Workers draw at most one page ahead
of the sink and fewer run when 1 GiB can't hold that many of the
largest page. The first page or sink error stops the export with every
earlier page handed over, as before. A page panic becomes that page's
error, and a panicking sink stops the workers. One page, one core or
wasm keeps the per-page loop. Export > Image and the doc_export_images
tool use it.

Files are byte-identical. One core is left for the interface (at most
8 workers). With examples/export_bench, on a Ryzen with 16 threads
(shared), mean of two medians of 21 runs:
  PNG 150 dpi   1874 -> 340 ms  (-82%)
  JPEG 150 dpi  2106 -> 340 ms  (-84%)
  TIFF 150 dpi  2032 -> 375 ms  (-82%)
  PNG 300 dpi   3804 -> 590 ms  (-84%)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 17:41:38 +01:00
Jeremy 4580e5c294 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:34 +00:00
Livio Oswald 67ecccfc23 fix(ui): reuse translated copy-permission message 2026-10-27 14:40:18 +01:00
Livio Oswald ee6f2a017f fix(ui): enforce copy permission before reading bookmark styles 2026-10-27 14:25:48 +01:00
Jeremy c56a4b3399 docs(installer): note that the 32-bit all-users folder is Program Files (x86); tidy wording 2026-10-27 12:25:20 +00:00
Jeremy 315e7fad66 docs(installer): describe the per-user default install location and scope 2026-10-27 12:09:03 +00:00
Jeremy c1670d0aa5 fix(installer): keep the desktop shortcut on a machine-wide update; harden install-policy checks 2026-10-27 12:01:39 +00:00
Jeremy c39a0f3658 fix(installer): address scope and ARM64 review feedback 2026-10-27 12:01:39 +00:00
Jeremy 32df17722c feat(installer): default to a per-user ArtCraft folder 2026-10-27 12:01:39 +00:00
aiongg 1dd2737b47 Merge pull request #4889 from aiongg/layout
refactor: shared module layout (craft-contrib#20)
2026-10-26 21:31:30 -04:00
aiongg f022ef0671 style: cargo fmt on moved files 2026-10-27 00:34:32 +00:00
aiongg 323172e860 test(automation): end the file access scan at the test module, not at a cfg(test) use 2026-10-27 00:34:32 +00:00
aiongg d449f2ce63 docs: name the ui-egui files by their new directories 2026-10-27 00:34:32 +00:00
aiongg 064632e0e8 test(ui-egui): name the page modules by their new directories 2026-10-27 00:34:32 +00:00
aiongg 3dbea4e7a0 docs(parity): point evidence at the ui-egui files' new directories 2026-10-27 00:34:32 +00:00
aiongg cb94c8f047 refactor(ui-egui): move open_worker_tests.rs to platform/open_worker/tests.rs 2026-10-27 00:34:32 +00:00
aiongg 636656a9ea refactor(ui-egui): move tab_context.rs into menus/ 2026-10-27 00:34:32 +00:00
aiongg cd0fc37c8d refactor(ui-egui): move folders_ui.rs into home/ 2026-10-27 00:34:32 +00:00
aiongg 7b3d688754 test(ui-egui): rerun the fontconfig tests by their platform:: path 2026-10-27 00:34:32 +00:00
aiongg 80c4572cfa refactor(ui-egui): move system_fonts.rs into platform/ 2026-10-27 00:34:32 +00:00
aiongg ed09547ecf refactor(ui-egui): move window_state.rs into persist/ 2026-10-27 00:34:32 +00:00
aiongg d25378c336 refactor(ui-egui): move units.rs into persist/ 2026-10-27 00:34:32 +00:00
aiongg dc25a6e341 refactor(ui-egui): move recovery.rs into persist/ 2026-10-27 00:34:32 +00:00
aiongg 615232d0e5 refactor(ui-egui): move last_view.rs into persist/ 2026-10-27 00:34:32 +00:00
aiongg 5527f931c9 refactor(ui-egui): move last_session.rs into persist/ 2026-10-27 00:34:32 +00:00
aiongg 687f6f6187 refactor(ui-egui): move window_controls.rs into platform/ 2026-10-27 00:34:32 +00:00
aiongg 90a1880aee refactor(ui-egui): move updates.rs into platform/ 2026-10-27 00:34:32 +00:00
aiongg dc97e74e57 refactor(ui-egui): move ui_scale.rs into platform/ 2026-10-27 00:34:32 +00:00
aiongg 2b4f7694dc refactor(ui-egui): move portable.rs into platform/ 2026-10-27 00:34:32 +00:00
aiongg b37c3a934c refactor(ui-egui): move pickers.rs into platform/ 2026-10-27 00:34:32 +00:00
aiongg 16b49776de refactor(ui-egui): move open_worker.rs into platform/ 2026-10-27 00:34:32 +00:00
aiongg d3cfadd9e2 refactor(ui-egui): move motion.rs into platform/ 2026-10-27 00:34:32 +00:00
aiongg 6638646314 refactor(ui-egui): move macos_association.rs into platform/ 2026-10-27 00:34:23 +00:00
skylar taylor-barrick 9a9813bf7d Merge pull request #4880 from storytold/fix/nextest-0.9.150
ci: require nextest 0.9.150
2026-10-26 17:39:25 -06:00
aiongg d15c5a2e21 refactor(ui-egui): move file_watch.rs into platform/ 2026-10-26 22:46:12 +00:00
aiongg 3e7cc6e5cb refactor(ui-egui): move drag_pointer.rs into platform/ 2026-10-26 22:46:12 +00:00
aiongg 73cd1b16db refactor(ui-egui): move icons.rs into widgets/ 2026-10-26 22:46:12 +00:00
aiongg 228a91c19a refactor(ui-egui): move icon_data.rs into widgets/ 2026-10-26 22:46:12 +00:00