Commit Graph
5251 Commits
Author SHA1 Message Date
Fabio William ConceiçãoandCursor 445bceb681 Part of #394: look up hyphenation exceptions under the lock; drop ~ syntax.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-09 20:26:56 +01:00
Fabio William ConceiçãoandCursor 4f9b292213 Part of #394: headless tests for Hyphenation › Exceptions UI and layout.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-09 20:26:56 +01:00
Fabio William Conceição c9ba5db4fb Part of #394: Preferences › Hyphenation › Exceptions reach the hyphenator.
Comma-separated words never break, or break only at marked hyphens; prefs.set and restore push the list so type reflows.
2026-10-09 20:26:56 +01:00
Juan Manuel Verges SolanasandClaude Opus 5.5 562e09707a Fix #813: type can name an installed version of its font
A font library can hold two versions of one family and style (a new
Montserrat-Bold.ttf beside an old montserrat.ttf). The font database kept
only the first one loaded, so type set in the other couldn't be matched
when a PDF or .ai was opened: it came in as outlines. Now every version
loads (the first stays the one family and style resolve to), PDF import
tries the other versions when the glyphs differ, and type set in a version
the family and style alone wouldn't pick names it in CharStyle::font_version
(left out when None, so documents without it are unchanged). Layout,
shaping, the substituted-glyph highlight, Find Font, Package and Document
Info follow it; changing the font clears it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 19:26:51 +00:00
BFlat b43e633329 Merge pull request #754 from hamada147/feature/support-arabic-language
feat(text): load craft-fonts' Arabic families, fetch them on web
2026-10-10 02:08:29 +07:00
bflatastic 8c1be41e08 Merge remote-tracking branch 'origin/main' into HEAD
# Conflicts:
#	ROADMAP.md
2026-10-10 01:56:46 +07:00
BFlat cbacb47fdb Merge pull request #770 from dotCooCoo/feat/swatch-libraries
Swatches: Save Swatch Library writes swatch exchange (.ase) files
2026-10-10 01:53:32 +07:00
BFlat 116573ba86 Merge pull request #782 from dotCooCoo/feat/package-font-resolution
Package: fonts found by any of their names are copied, and skipped fonts are named
2026-10-10 01:43:01 +07:00
BFlat 783540a34a Merge pull request #781 from dotCooCoo/feat/macos-registered-fonts
Part of #579: macOS fonts registered from other folders are listed too
2026-10-10 01:42:54 +07:00
shmuelbiller1 b4784c02ee test(package): retain and report the boundary file at the nesting limit 2026-10-09 14:36:37 -04:00
shmuelbiller1 6f260fac3e fix(package): propagate optional metadata for cyclic links without nesting Options 2026-10-09 14:36:06 -04:00
shmuelbiller1 7d75280ab4 fix(package): preserve FONTS report header and document warning output 2026-10-09 14:35:42 -04:00
shmuelbiller1 c8642eeddb test(package): retain unreadable children and break circular dependencies without aborting 2026-10-09 14:34:21 -04:00
shmuelbiller1 0b326c48bc fix(package): keep copying linked documents on parse failures, cycles and depth limits 2026-10-09 14:33:39 -04:00
BFlat 35a6015d88 Merge pull request #803 from haranishi/i18n-japanese-messages
i18n: Japanese translations for error and status-bar messages
2026-10-10 01:15:02 +07:00
BFlat 71ea5c4215 Merge pull request #802 from dmatviichuk/i18n/ukrainian-dictionary-review
i18n: correct Ukrainian wording and spelling
2026-10-10 01:14:55 +07:00
BFlat 3e1d9b7bbb Merge pull request #795 from DWAA1660/fix/selection-validation-and-clear
Validate selection IDs and clear exact compound members
2026-10-10 01:05:58 +07:00
Ikki NishiharaandClaude Sonnet 5.5 cee9feea2e i18n: Japanese translations for error and status-bar messages
Japanese now translates the status-bar and error messages (`@msg`
templates) like Spanish, French, Italian, Russian and Ukrainian do:
556 rows at the end of ja.tsv, the 498 message literals the test scan
finds plus the 58 that the other catalogs also carry (web start-up,
relinking, export notes, PostScript read errors).

`ja` joins COMPLETE_MESSAGES, so complete_languages_translate_every_message
keeps it complete. The registry comment, docs/development.md and the
ROADMAP line now list Japanese with the other five. The messages
themselves stay English for agents and MCP.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-10 02:53:14 +09:00
BFlat d522c1d7be Merge pull request #800 from storytold/fix/793-artboard-options-and-layouts
Part of #793: Artboard Options lists Name, Width, Height; one-key shortcuts follow the key on any layout
2026-10-10 00:52:17 +07:00
Dmytro MatviichukandCodex 01f329aa99 i18n: correct Ukrainian wording and spelling (#747)
Co-authored-by: Codex <noreply@openai.com>
2026-10-09 19:51:43 +02:00
bflatasticandClaude Opus 5.5 f300321e28 Part of #793: Artboard Options lists Name, Width, Height; one-key shortcuts follow the key on any layout
- Artboard Options listed its fields by key (Height, Name, Width); it now
  lists Name, then Width and Height.
- One-key tool and command shortcuts (V, P, X, D…) matched the character
  typed, so with a layout without Latin letters (Persian, Arabic, Russian,
  Greek…) they did nothing. When the text typed holds no ASCII character,
  the key's position stands in: the V key selects the Selection tool
  whatever it types. Latin layouts (AZERTY…) keep the letter typed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 00:51:18 +07:00
BFlat 0b14b45610 Merge pull request #796 from storytold/fix/flaky-native-menu-test
Native menu test: judge idle frames while the global generations hold still
2026-10-10 00:36:35 +07:00
bflatasticandClaude Opus 5.5 0928cafab2 Native menu test: judge idle frames while the global generations hold still
key_equivalents_run_through_the_normal_shortcut_path_once failed about one
full ui-egui run in four ("the menus weren't read again", 5 vs 4). Each
app mirrors its shortcut overrides into a process-wide store every frame,
bumping shortcut_editor::GENERATION, and the plug-in registry's revision is
process-wide too. Tests running alongside with other shortcuts flip them,
which rightly makes the menus read again. The test now checks two idle
frames during which those generations held still (trying up to 50 times),
so it still fails if idle frames re-read the menus on their own.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 00:36:14 +07:00
DWAA1660 636d9b24c8 Fix #786: clear exact compound members and explicit targets 2026-10-09 11:33:23 -06:00
DWAA1660 04439bb01d Fix #784: validate selection IDs and report the resulting selection 2026-10-09 11:19:08 -06:00
BFlat 21355945ea Merge pull request #794 from storytold/fix/776-pen-joins-paths
Fix #776: the Pen continues any open path and joins two paths
2026-10-10 00:01:01 +07:00
bflatasticandClaude Opus 5.5 bd8fa795ed Fix #776: the Pen continues any open path and joins two paths
As in Illustrator, the Pen shows its continue cursor over an end of any
open path, selected or not, and a click there selects the path and draws
on from that end (reversing it from its first end). While drawing, it
shows a join cursor over an end of another open path, and a click joins
the two into one path, in one undo step, which finishes the path.

path.join takes {ids: [a, b], ends: ["first"|"last", "first"|"last"]}
to join the ends asked for (the Pen's join); without them it joins the
selected paths' nearest ends as before. Joining a path with itself, or
anything that isn't a path, is an error.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 23:59:50 +07:00
BFlat 825d4fdb8b Merge pull request #791 from storytold/fix/734-crop-image-box
Fix #734: Crop Image shows a crop box on the image
2026-10-09 23:40:58 +07:00
bflatasticandClaude Opus 5.5 4b44265965 Fix #734: Crop Image shows a crop box on the image
Object › Crop Image and the image's Crop Image buttons (Control bar,
Properties) now show a crop box on the selected image, as Illustrator
does, instead of cropping straight to the artboard (which did nothing for
an image inside its artboard). The box starts on the image's part over its
artboard; its handles and its inside drag it, always within the image, and
the image outside it is dimmed. The Control bar shows its X/Y/W/H with
Apply and Cancel; Enter applies and Escape cancels, both back to the
Selection tool. Apply runs object.cropImage {rect}, one undo step.

- tools: the Crop Image tool (cropimage.rs), with crop_box shared by the
  tool and the Control bar.
- ui: ui.cropImage (enabled with an image selected), the Control bar's
  crop fields and buttons, "Apply" translated (es, fr, it, ru, uk, ja,
  zh-hans, zh-hant).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 23:40:12 +07:00
bflatasticandClaude Opus 5.5 9de418a4a4 ROADMAP: the Arabic families come with a craft-fonts checkout that has them
craft-fonts main holds only Noto Sans Arabic so far (the other eleven are in
storytold/craft-fonts#11), and releases pin an older craft-fonts commit, so
say which builds list them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 23:16:41 +07:00
BFlat 8e0e2eb904 Merge pull request #790 from storytold/fix/clippy-199-affinity-tests
Clippy 1.99: as_chunks in the Affinity raster tests
2026-10-09 23:15:59 +07:00
bflatasticandClaude Opus 5.5 8124cf7b43 Clippy 1.99: as_chunks in the Affinity raster tests
#763 landed beside #771 with five chunks_exact(4) calls in
crates/affinity/tests/raster.rs, which clippy 1.99's chunks_exact_to_as_chunks
rejects, so cargo xtask ci failed at clippy on main.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 23:15:36 +07:00
shmuelbiller1 f9384dfed7 test(package): nested native files retain PDF compatibility preview and compression 2026-10-09 11:55:49 -04:00
shmuelbiller1 71484fd013 fix(package): preserve nested previews, PDF content, compression and embedded assets 2026-10-09 11:54:37 -04:00
shmuelbiller1 7c3687af29 test(package): distinct nested assets sharing a stale source path remain separate 2026-10-09 11:52:37 -04:00
shmuelbiller1 ba1b7a834f fix(package): deduplicate by resolved source and rebase links per containing document 2026-10-09 11:51:54 -04:00
shmuelbiller1 bbb465a0d3 style(doc): format portable link traversal chain 2026-10-09 11:39:15 -04:00
shmuelbiller1 f549f6ad4d style: keep new package traversal within rustfmt width 2026-10-09 11:37:28 -04:00
shmuelbiller1 a9e3d85b1d style: keep new package traversal within rustfmt width 2026-10-09 11:37:24 -04:00
shmuelbiller1 a4a040653d test(package): resolve nested links from their actual source after moving files 2026-10-09 11:35:51 -04:00
dotCooCoo 75f2145b92 Package: fonts found by any of their names are copied, and skipped fonts are named
File › Package and Document Info › Font Details looked fonts up with
FontDb::face and compared the face's family with the name the document
stores. A font a document named by another of its names (a PostScript
or localized name, as SVG and PDF files do) was reported as not
available and left out of the package, although the canvas drew it and
exports embedded it.

- Package and Font Details resolve fonts with FontDb::resolve, as
  text.fonts and the renderer do. A style the family lacks is still
  copied as its closest style; the report now names the style it
  copies, and Font Details lists the font as substituted, with that
  style's file and permission.
- FontFace::embeddable reads fsType as exports do (Embedding), so fonts
  that allow bitmap embedding only (bit 9), or that set the restricted
  bit together with reserved bit 0 (0x0003), are no longer copied.
  Document Info's permission labels follow the same rule: when a font
  sets more than one usage bit, the label names the most permissive
  one.
- The Package dialog and its status line name the fonts it didn't copy.
2026-10-09 08:35:16 -07:00
shmuelbiller1 deff7bb757 fix(package): resolve transitive links against the moved file's actual location 2026-10-09 11:34:02 -04:00
shmuelbiller1 022069d5a5 fix(links): retain resolved source paths when packaging moved nested documents 2026-10-09 11:33:42 -04:00
shmuelbiller1 1f668dfaad fix(package): retain nested documents' embedded ICC profile bytes 2026-10-09 11:32:32 -04:00
BFlat d168d4f843 Merge pull request #771 from DisasterAreaDesigns/affinity-as-chunks
Clippy 1.99: use as_chunks for constant-size chunks
2026-10-09 22:32:02 +07:00
shmuelbiller1 816a0fe762 test(package): reopen nested linked documents from portable folder and ZIP deliveries 2026-10-09 11:31:30 -04:00
shmuelbiller1 4fe06391d4 fix(package): retain existing top-level missing-link reporting API 2026-10-09 11:30:54 -04:00
shmuelbiller1 ae68704dfc fix(package): preserve rebased portable paths for relative output folders 2026-10-09 11:29:53 -04:00
shmuelbiller1 eacef005b0 fix(package): recursively collect and rebase placed documents and their assets 2026-10-09 11:29:01 -04:00
shmuelbiller1 c461369421 feat(doc): allow portable relinking of images and placed documents 2026-10-09 11:27:13 -04:00