Commit Graph
250 Commits
Author SHA1 Message Date
Brandon Thomas 1bca5db25b Merge pull request #1792 from marcoarnulfo/feat/thumbnailer
Linux: file managers show a .designcraft file's first page through a freedesktop thumbnailer (#1782)
2026-11-02 23:24:25 -05:00
Brandon Thomas 4e06447668 Merge pull request #1873 from Hamza0101/fix/pin-indd-dependency
Pin the indd dependency by rev, as every other git dependency is (#1599)
2026-11-02 23:24:21 -05:00
Brandon ThomasandClaude Opus 5.5 e79d682e02 Release 0.17.0
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 19:26:33 -05:00
FredApps fc47f3156e Merge current main into fix/gnome-window-decorations 2026-11-02 19:10:33 +01:00
Brandon Thomas 9f93d4344d Merge pull request #2094 from Silvertree2010/fix/2085-placed-svg-a-font-family-that-na
Match placed SVG font-family against legacy family and full names
2026-11-01 14:48:57 -05:00
Brandon ThomasandClaude Opus 5.5 1fe8885bda Release 0.16.0
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-01 13:58:16 -05:00
NetterSilverandClaude Opus 5.5 41a64bc10f Match placed SVG font-family against legacy family and full names
Fixes #2085

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 15:35:41 +00:00
Dylan M. Taylor 7cdc47b50c Merge pull request #2072 from aiongg/update-result-dialog
Updates: shared check-result dialog from craft-update
2026-10-31 01:05:56 -04:00
Brandon Thomas adee832ad1 Merge pull request #1975 from VoiceLessQ/fix/1586-image-decode-cap
Images: refuse a raster that would decode past 1 GiB of RGBA (fixes #1586)
2026-10-31 01:00:26 -04:00
aiongg 3a4333bac2 updates: show check results with craft-update's CheckResultDialog 2026-10-31 04:42:28 +00:00
Brandon ThomasandClaude Opus 5.5 7e70203206 Release 0.15.2
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 23:25:34 -04:00
Brandon ThomasandClaude Opus 5.5 8029fdd074 Release 0.15.1
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 23:15:43 -04:00
Brandon ThomasandClaude Opus 5.5 a4becc8da0 Release 0.15.0
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 22:59:26 -04:00
Dylan M. Taylor ea08e4c2ba UPD.1: honor app pretend versions in update checks (#2025) 2026-10-30 02:37:30 -04:00
Dylan M. Taylor 15d13dde20 Update prompt shows the app icon and accent color instead of a letter (#2023)
UPDATE_APP (native builds; craft-update is a native-only dependency) carries our 128 px icon and accent (#7bb51c, its colour in ArtCraft Launcher). The updater, the self-update
helper and craft-update's startup prompt all get them through crate::UPDATE_APP; the
prompt draws the icon, the accent and "by ArtCraft" (craft-update's default developer).

craft-update is pinned to storytold/craft-libs main at 1065653e7 (#434).
Clippy fixes for Rust 1.99 in untouched code (same logic):
- crates/engine/src/cmd/export/text_tests.rs
- crates/pdf/src/gradient_inks.rs
2026-10-30 01:28:06 -04:00
Marco Arnulfo ec059c042b Linux: file managers show a .designcraft file's first page through a freedesktop thumbnailer (#1782) 2026-10-30 03:00:29 +01:00
VoiceLessQ d5f07d30eb PDF: check the RGBA budget before recompressing an image (#1586)
With compressImages on, PDF export re-encodes rasters as JPEG in
recompress, which decoded with the image crate directly. A gray PNG
that decode_rgba refuses still decoded there, was copied and encoded
as JPEG, and only then dropped: krilla refuses a JPEG wider or taller
than 16,384 px, and every raster past the budget is. Exporting the
23,000 px PNG that way took 4.2 s and 1 GB more memory, for a PDF
without the image.

recompress now asks too_large_to_decode first, the check decode_rgba
uses, so the export skips the image with the same warning at once.
2026-10-28 23:28:11 -02:00
aiongg 855d606325 Show file and message dialogs without blocking the frame (fixes macOS crash) (#1961)
* Show file and message dialogs without blocking the frame

A blocking rfd dialog inside the egui frame runs AppKit's modal loop; a
file dragged from Finder and held over the window then re-enters winit's
handler and aborts the app. Dialogs now go through craft-dialogs: a
command without a path asks with a continuation and returns, the host
shows the dialog at the end of the frame, and the continuation runs with
the answer on a later frame, in the document it was asked for. Commands
given a path stay synchronous. The replace-file question is a message
box from the same queue. Quit and Close wait for a Save As dialog's
answer. clippy.toml disallows rfd::FileDialog and rfd::MessageDialog.

* Raise the open file panel when File > Open is chosen again

* Repin craft-dialogs to the craft-libs PR head

* Queue dialogs asked by different code or documents; hold answers behind newer dialogs

Two asks for the same file dialog were treated as one, so Place for one
document and then Choose Image, or Place again for another document, ran
the first ask's action. An ask is now skipped (and the open panel
raised) only when the same code asked for the same dialog for the same
document. An answer that would replace an egui dialog opened since the
asking (an unsaved-changes question, Preferences) waits until it closes;
Quit counts it as pending.

* Repin craft-dialogs to the craft-libs PR head

* Allow the file dialogs' existence checks in the file guard

* Repin craft-dialogs to storytold/craft-libs main
2026-10-28 17:13:45 -04:00
Brandon ThomasandClaude Opus 5.5 7da69c16ce Release 0.14.0
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 11:52:07 -04:00
aiongg d77fdf2d4c fix(ui): dropdown menus grow back after a search with no matches (#1917)
* fix(ui): font menus grow back after a search with no matches

Every combo box is craft_ui::ComboBox (craft-libs pinned at 62bb0e1d), whose
menu follows its contents' height while open (egui#5225); clippy.toml bans
egui::ComboBox.

The Font menu splits into a header (search field, filters) and a list
(font_menu_header, font_menu_list). Font fields show it in a
craft_ui::combo::Menu and the style dialogs' Font Family combo boxes in
ComboBox::show_ui_with_header, so only the rows scroll and the search field
stays in place. The blank and Parent's Font rows sit in the header, above
the search.

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

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

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

* chore(xtask): pdf-deps expects craft-libs 92d392cf
2026-10-27 10:27:32 -04:00
Hamza 7ad7f22f4d Pin the indd dependency by rev, as every other git dependency is (#1599)
`indd` was the one git dependency taken from a branch:

    indd = { git = "https://github.com/storytold/indd-utils", branch = "main" }

`Cargo.lock` pinned a commit, but any `cargo update` -- and `.github/dependabot.yml`
runs them -- pulls whatever is on that branch into a parser of untrusted INDD
files, with no review of what changed. The craft-libs dependencies beside it are
all `rev = "b926b5c0..."`.

Pinned to `7f3060e5bce78d21ea70e0d5eacb96edce15dfbe`, which is the commit the
lock already held: the only change in `Cargo.lock` is the source string,
`?branch=main` to `?rev=7f3060e5...`, so no code moves with this.

Verified: `cargo check --locked -p designcraft-engine` passes, and
`indd_files_go_through_the_converter_and_its_errors_are_open_errors` still
passes, so the converter is the same one.

Audit DC-18.
2026-10-26 17:12:09 +05:00
aiongg f6fe64981a Merge branch 'keymap-adoption' into keymap-shortcuts-dialog
# Conflicts:
#	Cargo.toml
2026-10-26 03:29:29 +00:00
aiongg ea5a706ef8 Merge remote-tracking branch 'upstream/main' into keymap-adoption
# Conflicts:
#	Cargo.lock
2026-10-26 03:15:52 +00:00
aiongg 3fc0bf83fd Merge branch 'keymap-adoption' into keymap-shortcuts-dialog
# Conflicts:
#	Cargo.toml
#	xtask/src/pdf_deps.rs
2026-10-26 02:06:51 +00:00
aiongg 23173b9065 Merge remote-tracking branch 'upstream/main' into keymap-adoption
# Conflicts:
#	Cargo.lock
#	Cargo.toml
#	xtask/src/pdf_deps.rs
2026-10-26 02:06:25 +00:00
aiongg 2e6df922c8 Merge remote-tracking branch 'upstream/main' into print-color-separations
# Conflicts:
#	Cargo.lock
#	crates/engine/src/cmd/export.rs
2026-10-26 02:05:49 +00:00
aiongg ada39e78d7 Keyboard Shortcuts: Assign takes a held shortcut in one step (craft-libs#352) 2026-10-26 01:39:22 +00:00
aiongg d28271b489 Merge branch 'keymap-adoption' into keymap-shortcuts-dialog
# Conflicts:
#	Cargo.lock
#	Cargo.toml
2026-10-26 01:16:37 +00:00
aiongg 1a52593d0d Merge remote-tracking branch 'upstream/main' into keymap-adoption
# Conflicts:
#	Cargo.toml
2026-10-26 01:15:41 +00:00
aiongg d90881a8a9 Merge branch 'print-color' into print-color-separations
# Conflicts:
#	Cargo.toml
2026-10-26 01:11:35 +00:00
aiongg c856db68f1 Merge branch 'print-color' into print-color-x1a
# Conflicts:
#	Cargo.toml
2026-10-26 01:11:11 +00:00
aiongg 240dbcf731 Merge remote-tracking branch 'upstream/main' into print-color
# Conflicts:
#	Cargo.toml
#	crates/idml/src/export.rs
2026-10-26 01:10:39 +00:00
aiongg e91f830116 chore(deps): safe dependency refresh (#1844)
cargo update with semver-compatible updates only. Git dependencies keep their revisions (indd stays at 7f3060e5).
2026-10-25 20:54:46 -04:00
Daniel 699ba7d6ed Merge latest upstream main and resolve GNOME Wayland control conflicts 2026-10-26 00:02:02 +01:00
Dylan M. Taylor 18246dddd2 build: pin craft-update to craft-libs main (495e597) (#1837)
Picks up the startup prompt without the glyphs a font may lack (storytold/craft-libs#343, #344): the close mark is painted and the version pill is ASCII, so apps that panic on a missing glyph no longer take the prompt down.

Part of tracking issue storytold/craft-libs#319
2026-10-25 17:55:34 -04:00
aiongg 074db00079 Merge print-color into print-color-x1a
Brings in #1374 with upstream main merged (egui 0.37, craft-libs at
storytold/craft-libs e3b9e239).

Conflicts:
- Cargo.toml: print-color's pins (storytold/craft-libs e3b9e239 for
  craft-pdf, craft-prepress, krilla and the hayro crates; winit and egui
  patches), with craft-prepress keeping the `flatten` feature.
- xtask/src/pdf_deps.rs: print-color's REPO/REV.
- Cargo.lock: print-color's, relocked with cargo metadata; adds only
  craft-prepress and linesweeper.
- crates/pdf/src/export.rs: main's optional-content registration and
  add_form_fields helper; the helper leaves form fields and media out of
  PDF/X-1a with a warning.
- crates/engine/src/cmd/export.rs: the X-1a parameter docs plus main's
  `created`; the X-1a flatten and shadow-mask path on top of main's
  PDF/A-2b-only rasterize_layered.

Also: x1a_tests builds FlattenTotals through Default, since the struct is
non_exhaustive at e3b9e239.
2026-10-25 19:55:21 +00:00
aiongg 9c977f41a6 Merge print-color (#1374 with main: egui 0.37, craft-libs e3b9e239) into print-color-separations
print_pdf, shared by Export PDF, File › Print and Separations Preview, takes main's two
changes to the inline export pipeline: rasterize_layered runs only for PDF/A-2b (other
standards keep hidden placed-PDF layers as optional content), and the report gets
GRAPHIC_LAYER_RENDERING_WARNING when the source document has graphic layer visibility
overrides and the writer did not report it. The Separations Preview command matches
craft_prepress::Conversion with a fallback arm, since the enum is non-exhaustive at
craft-libs e3b9e239.
2026-10-25 19:54:40 +00:00
aiongg 65c387732d Merge upstream/main into print-color
PDF/X and CMYK groups keep this branch's approach: krilla's serialize
settings (pdfx::print_settings) write the CMYK page and transparency
groups, the GTS_PDFX output intent and the PDF/X Info and XMP entries.
make_pdfx4 adds only the XMP dates, so main's title argument and its
output-intent, Info and pdfxid XMP edits are dropped, and both
cmyk_group_spaces calls after writer.finish() (Export PDF, Print
Booklet) stay removed. Main's new parts are kept: file_info_metadata
(also for Print Booklet, on top of the print settings), optional content
registration and layer errors, add_form_fields, and pdfx's fonts module.
Main's metadata panic test calls the two-argument make_pdfx4.

craft-libs and the krilla patch are pinned to storytold/craft-libs
e3b9e239; Cargo.lock is main's, relocked without updates.
2026-10-25 19:47:27 +00:00
aiongg 77c718aa68 Merge keymap-adoption (#1298, on main) into keymap-shortcuts-dialog
craft-keymap with the dialog comes from storytold/craft-libs main e3b9e239. egui 0.37's
shaper owns bidi, so the dialog's labels go to it in logical order: rtl::visual_text and the
dialog's visual hook are gone. ForeignSet keeps the dropped-entry count through its builder.
2026-10-25 19:39:58 +00:00
aiongg 073ac98694 Merge upstream main into keymap-adoption; pin craft-libs to main e3b9e239
Main's shortcut dispatch (shortcut_key, used for keys forwarded from floating panel windows)
becomes the keymap's: shortcuts and forwarded_shortcuts both take their presses through the
key dispatcher and run them once the input is released. craft-keymap comes from
storytold/craft-libs, ForeignSet is built through its constructor, and the panel shortcut test
asks the docking layout which panel shows.
2026-10-25 19:36:33 +00:00
Dylan M. Taylor 2b74ecaded build: pin craft-update to craft-libs main (db19c37) 2026-10-25 15:08:35 -04:00
Dylan M. Taylor c784a9db66 refactor(updates): hold the install back while documents are unsaved 2026-10-25 15:02:26 -04:00
aiongg 1da1f7028b Merge designcraft#1810 (egui 0.37) into docking-trial; pin craft-libs to main a0916808 2026-10-25 17:16:25 +00:00
aiongg 56f15a600d Merge upstream main into docking-trial; pin craft-libs to main 5bbe9f62 2026-10-25 16:25:57 +00:00
aiongg fec0897a5d Application bar: use craft-window's shared title bar (#1811)
* UI: the application bar uses craft-window's title bar

DesignCraft's title-bar code moved to craft-libs as craft_window::title_bar.
The application bar calls it instead of its own copy, and the macOS shell
takes sync_movable from it. Differences: a drag on an in-window panel lying
over the bar no longer moves the window, full screen ignores the bar's drag
and double-click, and floating panels in their own windows keep their own
movable flag.

* UI: craft-window from craft-libs main

* UI: the application bar ignores the title bar's response
2026-10-25 12:06:36 -04:00
aiongg d9f96f6cbb Docking: pin craft-libs to pin-round3 d24e4bcce; craft-ui focuses the main window for a modal 2026-10-25 14:01:43 +00:00
Brandon ThomasandClaude Opus 5.5 dcce40fb87 Release 0.13.0
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 09:03:51 -04:00
aiongg 9397ee57d4 Docking: pin craft-libs to cdc671313 (craft-libs#313, owner test round) 2026-10-25 07:16:46 +00:00
aiongg 0fc055ee37 Docking: pin craft-libs to 4dc543cb4 (craft-libs#312, owner test round) 2026-10-25 06:00:48 +00:00
aiongg e4341d29a2 Docking: pin craft-libs to 8a503cfe7 (main) 2026-10-25 04:11:51 +00:00