vectorcraft/crates/engine/src
dotCooCoo 5709e636a5 Fonts: missing fonts are listed when a document opens, with Find Fonts and a folder search
When a document opens with fonts that aren't available, fonts used
only in its symbols included, VectorCraft lists them in a Missing
Fonts dialog after the missing linked file questions, one document at
a time, with Find Fonts and Close. Find Fonts opens Type › Find Font
on the first missing font of the layers' type, to replace it. After
Find Fonts or Close the dialog doesn't open again for that open; when
another dialog replaces it, it opens again once that dialog closes.

Search Fonts Folder (the Fonts folder File › Package writes next to
the document) and Find in Folder… search a folder and its subfolders
for the fonts' files, and Add Fonts copies the files the user chooses
into a Fonts folder next to the preferences. The desktop app and
vectorcraft-cli read that folder with the system's font folders. Type
› Find Font has a Find in Folder… button too when fonts the document
uses are missing. The web app shows no dialog; a status message says
how many fonts aren't available.

- text.missingFonts lists each missing family and style once,
  whatever version the document's type names, and leaves out CSS
  generic families such as sans-serif. text.findFontFiles searches a
  folder on up to 8 threads and returns at once; text.findFontFiles {}
  reports the search, and {stop: true} stops it. A search reads only
  what the font scan reads of font files (their table directories and
  name, fvar and OS/2 tables) and, on macOS, of suitcase fonts, and
  lists a file for a font only when the file makes the font resolve
  exactly. It does not enter app packages, the Program Files and
  ProgramData folders, the system's folders at the root of a volume,
  the Shared and Public folders in Users, a home folder's Library,
  AppData, Applications, snap and dot folders, a Library folder's app
  data folders or the folders the environment names for apps, and it
  skips other hidden folders and does not follow links below the
  picked folder. It ends after 60 s by default, after 10,000,000
  entries listed, with more than 1,000,000 folders waiting, after
  10,000 font files read or 1,000 kept, or once every font has a file;
  Stop and Close end it too.
- text.addFontFiles copies only files the last search found. Of
  those, it copies only regular .ttf, .otf, .ttc, .otc, .woff and
  .woff2 files and suitcase fonts with their resource fork, at most
  256 MB a file and 1 GB in all. It never replaces a file: a file with
  the same contents is kept, and when another file has that name, the
  copy gets a number (Name 2.otf). The fonts are then scanned again,
  and type set in them redraws.
- ui.missingFontsDialog and ui.findFontsInFolder open the dialog for
  agents; docs/control-protocol.md lists its fields.
- File › Package gives a font file whose name has no font extension
  the extension that matches its data (.ttf, .otf or .ttc).
- vectorcraft-text adds set_app_font_dir, which system_font_dirs
  reads, WantedFonts, which reads a font file's names as the font scan
  does, is_font_file and is_suitcase. #762 split its face reader, which
  now takes read budgets: file_face_names_within tries the suitcase
  reader first, and reader_face_names_within applies the budgets to
  each font. vectorcraft-format adds write_new_with.

Docs: docs/mcp.md, docs/control-protocol.md, ROADMAP.
2026-10-10 08:42:32 +07:00
..
cmd Fonts: missing fonts are listed when a document opens, with Find Fonts and a folder search 2026-10-10 08:42:32 +07:00
guard.rs Robustness: VectorCraft never crashes — no panics in shipped code 2026-10-05 06:28:59 +07:00
inspect.rs M7: area type auto size and shrink text to fit 2026-10-08 14:48:25 -07:00
lib.rs Fonts: missing fonts are listed when a document opens, with Find Fonts and a folder search 2026-10-10 08:42:32 +07:00
tests.rs M2.9: add editable Shaper groups and shape orientation steps 2026-10-08 22:52:23 +01:00
tests_adjust.rs Fix #122: colour adjustment live effects (Effect > Color Adjustments) 2026-10-06 00:42:26 +07:00
tests_appearance.rs M3.46: three-state knockout groups (on, neutral, off) render, export and edit 2026-10-04 23:04:20 +07:00
tests_areafit.rs M7: area type auto size and shrink text to fit 2026-10-08 14:48:25 -07:00
tests_assets.rs M4.65: Asset Export panel and the Assets tab of Export for Screens 2026-10-05 15:24:54 +07:00
tests_attributes.rs Fix #522: SVG round trips keep hidden objects and data-* attributes 2026-10-09 03:36:08 +07:00
tests_bboxrotate.rs Fix #712: the bounding box hides while a drag moves, scales or rotates 2026-10-09 17:39:12 +07:00
tests_blendfidelity.rs M8.20: blends interpolate strokes, gradients, groups, type and symbols faithfully 2026-10-06 12:01:28 +07:00
tests_blendopts.rs M8.18: Blend Options dialog and the Blend tool's anchor targeting 2026-10-06 11:01:18 +07:00
tests_blendspine.rs M8.19: blend spine and keys editable on the canvas 2026-10-06 11:12:58 +07:00
tests_brushsym.rs Rename DrawCraft → VectorCraft: crates (vectorcraft-*), apps, binaries, types, env vars, docs, examples (.vectorcraft); old .drawcraft files and preferences still load. Fix: text bounds exact after opening a file; selection no longer marks a document modified (dirty = content differs from the saved document). Screenshots and renders regenerated. 2026-10-01 14:30:09 -04:00
tests_build.rs Image Trace: Flat Logo mode (sub-pixel edges, restored corners, true lines and circles) 2026-10-09 17:57:04 +11:00
tests_charstroke.rs M3.40: stroke on type — the Stroke panel edits the characters' stroke 2026-10-05 01:09:55 +07:00
tests_clip.rs M3.75: layer clipping masks from the Layers panel button 2026-10-05 00:27:31 +07:00
tests_clipboard.rs Fix #693: a click activates its artboard; in-place pastes go onto it 2026-10-09 13:32:44 +07:00
tests_clipflavours.rs Fix #398: Linux/Wayland bitmap paste, copied files paste as art 2026-10-08 07:44:23 +07:00
tests_clippaint.rs M3.89: a clipping path's fill paints behind the clipped art, its stroke over it 2026-10-05 03:11:04 +07:00
tests_cmdsplit.rs M3.8: register the split paint modules next to paint so the command palette keeps listing them (Stroke Options for "stroke") 2026-10-04 11:32:11 +07:00
tests_cmykflatten.rs M3.90: blend modes and opacity composite inks in CMYK documents 2026-10-05 04:30:06 +07:00
tests_colorguide.rs M3.53: Color Guide has 21 harmony rules, Steps and Variation options, a fixed base colour and Save Colors as Swatches 2026-10-05 00:13:36 +07:00
tests_colorguidelib.rs M3.95: Color Guide Limit to Library and Edit or Apply Colors without art 2026-10-05 05:08:15 +07:00
tests_colormgmt.rs M4.31: Save PDF dialog and document.exportPdf with PDF settings 2026-10-05 07:22:27 +07:00
tests_colorthemes.rs M3.96: Color Themes panel with a local theme library 2026-10-05 05:08:28 +07:00
tests_containers.rs M14.4: tests main gained follow the no-panic lint rules 2026-10-05 06:40:34 +07:00
tests_css.rs M4.96: Window › CSS Properties shows, copies and exports the CSS of the selection 2026-10-05 16:03:11 +07:00
tests_cut.rs Fix #122: Mirror & Cut, Line Cut and Rectangle Cut tools 2026-10-06 00:42:26 +07:00
tests_dashalign.rs M3.38: dashes fitted to corners and path ends, a flag of their own that keeps the offset 2026-10-04 23:37:58 +07:00
tests_distort.rs Perspective grid: coming back from a temporary tool keeps a hidden grid hidden (review of #333) 2026-10-08 03:27:36 +07:00
tests_docsetup.rs M4.20: Document Setup with bleed, transparency grid, paper and type options 2026-10-05 08:28:16 +07:00
tests_draw2.rs Fix #776: the Pen continues any open path and joins two paths 2026-10-09 23:59:50 +07:00
tests_editcolors.rs M4.63: Links panel with status, Relink, Go To, Update, Edit Original, Embed/Unembed, Link Info and Placement Options 2026-10-05 12:40:05 +07:00
tests_effectedit.rs M3.42: Appearance editing depth — drag effect rows to reorder them or move them into/out of fills and strokes (Alt copies), click an effect name to edit it in its prefilled dialog, choosing an applied effect asks to edit it or add another, Show All Hidden Attributes, multi-select and Alt-drag duplicate of fills/strokes, drag the thumbnail onto art to copy the appearance, stroke rows note brush/Dashed/profile, Shift-click a chip for the mixer, Properties fx opens the effect menu 2026-10-04 23:01:34 +07:00
tests_emptytype.rs Part of #394: Preferences for snapping, handles, rubber bands, pattern tiles, tints and type 2026-10-08 09:43:12 +07:00
tests_envelope.rs clippy: a byte string for the envelope test's newline (byte_char_slices, red on main with Rust 1.99) 2026-10-06 07:09:35 -04:00
tests_envelope_distort.rs M8.16: Envelopes bend images, symbols, gradients, patterns and appearance; warps keep their frame 2026-10-06 12:01:47 +07:00
tests_envelope_edit.rs M8.17: Edit envelopes on the canvas: Edit Contents, mesh points and handles, Control bar 2026-10-06 12:16:59 +07:00
tests_expand.rs M14.4: as_chunks for the pixel loops main gained since the no-panics branch 2026-10-05 06:40:34 +07:00
tests_eyedropper.rs Type: Hebrew and Arabic text laid out right to left (bidi), aligned by its direction 2026-10-08 05:24:44 +07:00
tests_file.rs Tests: Japanese file and folder names save, open, export and title documents 2026-10-07 13:20:07 +07:00
tests_fileinfo.rs M4.55: File Info with author, description, keyword chips, rating and copyright, written to SVG, PDF and PNG 2026-10-05 09:55:47 +07:00
tests_flatpresets.rs M3.93: Edit > Transparency Flattener Presets… manages built-in and saved flattener presets 2026-10-05 02:36:28 +07:00
tests_flatpreview.rs M3.94: Window > Flattener Preview shows what flattening would rasterize, outline and change 2026-10-05 02:36:43 +07:00
tests_flatten.rs M14.4: as_chunks for the pixel loops main gained since the no-panics branch 2026-10-05 06:40:34 +07:00
tests_focal.rs M14.4: tests main gained follow the no-panic lint rules 2026-10-05 06:40:34 +07:00
tests_fontfiles.rs Fonts: missing fonts are listed when a document opens, with Find Fonts and a folder search 2026-10-10 08:42:32 +07:00
tests_fontlist.rs Fonts: the font menus leave out macOS's hidden "." families 2026-10-06 15:33:21 -04:00
tests_freeform.rs M3.97: freeform points drag out to delete, spread ring drags, Lines mode draws lines 2026-10-05 04:43:43 +07:00
tests_gradient.rs M3.98: radial annotator extent ellipse, aspect handle and off-centre focal point 2026-10-05 04:43:43 +07:00
tests_gradpanel.rs M3.52: Eyedropper Options with Picks Up / Applies trees, Alt and Shift+Alt modes, image sampling 2026-10-05 02:08:10 +07:00
tests_halftone.rs Fix #122: Object > Vector Halftone 2026-10-06 00:42:26 +07:00
tests_inline.rs M7: inline symbols in text 2026-10-08 15:45:34 -07:00
tests_journal.rs Fix #400: Scrub numeric fields by dragging their label 2026-10-08 11:33:57 +07:00
tests_knockout.rs M4.31: Save PDF dialog and document.exportPdf with PDF settings 2026-10-05 07:22:27 +07:00
tests_labspots.rs M4.31: Save PDF dialog and document.exportPdf with PDF settings 2026-10-05 07:22:27 +07:00
tests_layerclip.rs Layers: sublayers are layers, not objects, and every row has a command 2026-10-07 22:29:15 +07:00
tests_layers.rs Layers: keep clippy happy (menu item type, no unreachable in tests) 2026-10-07 23:06:31 +07:00
tests_library.rs Fix #745: a working Libraries panel of graphics, colours and text styles 2026-10-09 20:12:59 +07:00
tests_linked_stops.rs M4.31: Save PDF dialog and document.exportPdf with PDF settings 2026-10-05 07:22:27 +07:00
tests_links.rs Placed documents: File › Place links a VectorCraft document by default; output reads its file 2026-10-08 12:20:51 -07:00
tests_linkspanel.rs M4.63: Links panel with status, Relink, Go To, Update, Edit Original, Embed/Unembed, Link Info and Placement Options 2026-10-05 12:40:05 +07:00
tests_liquify.rs M8.4: Liquify keeps going while held, leaves non-paths alone, strokes apply incrementally 2026-10-06 12:00:52 +07:00
tests_live.rs Type Object Selection by Path Only: every baseline, Type tool and Eyedropper (review of #475) 2026-10-08 18:59:47 +07:00
tests_livecorners.rs Part of #812: an ellipse's Pie Start and End Angle and Invert Pie 2026-10-10 03:00:15 +07:00
tests_maskview.rs M3.86: Alt-click the mask thumbnail to view only the mask 2026-10-05 03:11:04 +07:00
tests_menucmds.rs Crop Image: trim an image to its pixels that aren't fully transparent 2026-10-09 17:24:04 +13:00
tests_nativefile.rs M4.35: native files compress, save atomically, drop unused images, keep newer keys and save down to v1 2026-10-05 12:27:02 +07:00
tests_newart.rs M3.65: new-art appearance template (stroke options and graphic styles with nothing selected, New Art Has Basic Appearance) 2026-10-05 04:38:09 +07:00
tests_newdoc.rs Fix #681: Rearrange All Artboards layouts, order and one-click access 2026-10-09 12:22:48 +07:00
tests_objexpand.rs M14.4: as_chunks for the pixel loops main gained since the no-panics branch 2026-10-05 06:40:34 +07:00
tests_opacitymask.rs M3.48: Page Isolated Blending and Page Knockout Group 2026-10-04 23:10:06 +07:00
tests_outlinestroke.rs M3.38: dashes fitted to corners and path ends, a flag of their own that keeps the offset 2026-10-04 23:37:58 +07:00
tests_overprint.rs M3.50: Overprint Black dialog with fill/stroke, rich and spot black options 2026-10-05 00:01:02 +07:00
tests_package.rs Package: fonts found by any of their names are copied, and skipped fonts are named 2026-10-09 08:35:16 -07:00
tests_paintproxy.rs M3.51: Fill/Stroke chips open swatch and mixer popovers; panel shortcuts; Recolor quick action 2026-10-05 02:05:33 +07:00
tests_panelcmds.rs M7: Every-line Composer for ragged text 2026-10-08 14:03:33 -07:00
tests_paragraphs.rs M7: per-paragraph paragraph attributes 2026-10-08 15:07:13 -07:00
tests_pathops.rs Rename DrawCraft → VectorCraft: crates (vectorcraft-*), apps, binaries, types, env vars, docs, examples (.vectorcraft); old .drawcraft files and preferences still load. Fix: text bounds exact after opening a file; selection no longer marks a document modified (dirty = content differs from the saved document). Screenshots and renders regenerated. 2026-10-01 14:30:09 -04:00
tests_pathtype.rs Fix #429: Type on a path brackets, flip and Type on a Path Options that keep the type in place 2026-10-08 12:50:25 +07:00
tests_pattern.rs Rename DrawCraft → VectorCraft: crates (vectorcraft-*), apps, binaries, types, env vars, docs, examples (.vectorcraft); old .drawcraft files and preferences still load. Fix: text bounds exact after opening a file; selection no longer marks a document modified (dirty = content differs from the saved document). Screenshots and renders regenerated. 2026-10-01 14:30:09 -04:00
tests_pdffidelity.rs M4.59: pattern strokes and freeform gradients keep their look in PDF 2026-10-05 11:52:35 +07:00
tests_pdfmarks.rs M4.72: PDF export draws printer's marks in Registration around each page 2026-10-05 13:05:20 +07:00
tests_pdfpresets.rs M4.86: PDF page thumbnails and fast web view (linearised files) 2026-10-05 18:05:36 +07:00
tests_pdfraster.rs M4.63: Links panel with status, Relink, Go To, Update, Edit Original, Embed/Unembed, Link Info and Placement Options 2026-10-05 12:40:05 +07:00
tests_persp_planes.rs M8.13: Perspective planes move along their normals with widgets, alone, with or copying their objects 2026-10-06 11:44:11 +07:00
tests_persp_select.rs M8.10: Perspective grid view options: Lock Grid, Lock Station Point, Snap to Grid, Show Rulers 2026-10-06 11:49:19 +07:00
tests_persp_text.rs M8.14: Type and symbols in perspective are really projected and stay editable; attachments survive copies 2026-10-06 12:10:00 +07:00
tests_perspgrid.rs Fix #321: the perspective grid hides while a perspective tool is chosen 2026-10-08 03:27:36 +07:00
tests_place.rs M4.54: Placing a text file asks for Text Import Options and sets it as area type 2026-10-05 10:07:23 +07:00
tests_placed_document.rs Placed documents: Links commands check, update, relink and break their links 2026-10-08 12:20:51 -07:00
tests_plugins.rs Fix #121: sandboxed WebAssembly plug-ins: object filters and live effects 2026-10-06 00:19:41 +07:00
tests_prefs.rs Part of #394: Preferences › Hyphenation › Exceptions reach the hyphenator. 2026-10-09 20:26:56 +01:00
tests_previewbounds.rs M3.67: Use Preview Bounds measures strokes in transforms, the bounding box and Align 2026-10-05 03:59:37 +07:00
tests_print.rs M4.75: File → Print writes the job as a print-ready PDF: paper, scale, tiles, marks and bleed, separations 2026-10-05 15:13:10 +07:00
tests_printadvanced.rs M4.81: Print advanced options: overprints, flattener, printer profile, bitmap 2026-10-05 17:27:00 +07:00
tests_printpresets.rs M4.79: print presets in the Print dialog and Edit > Print Presets 2026-10-05 16:30:46 +07:00
tests_printpreview.rs M4.78: File > Print opens the Print dialog and prints through the system 2026-10-05 16:30:35 +07:00
tests_printps.rs M4.92: Print to a PostScript file 2026-10-05 17:01:36 +07:00
tests_printtiling.rs M4.80: Print Tiling tool and View > Show Print Tiling 2026-10-05 17:26:59 +07:00
tests_proxyitems.rs M3.51: Fill/Stroke chips open swatch and mixer popovers; panel shortcuts; Recolor quick action 2026-10-05 02:05:33 +07:00
tests_puppetwarp.rs M8.6: Puppet Warp pins appear at once, warp from the rest shape and follow Undo 2026-10-06 11:16:10 +07:00
tests_rasterfilters.rs Part of ROADMAP gap 2: Radial Blur, Smart Blur and Unsharp Mask on a pixel-filter pipeline 2026-10-09 13:30:31 +07:00
tests_rastersettings.rs M4.56: Document Raster Effects Settings with colour model, background, anti-alias, clipping mask and room around 2026-10-05 09:55:48 +07:00
tests_recolor.rs M3.79: Edit or Apply Color Group opens Recolor Artwork on a colour group 2026-10-05 04:20:27 +07:00
tests_recovery.rs EPS import: bound what hostile editing data can cost, and say when it can't be read 2026-10-09 03:49:49 -04:00
tests_registration.rs M4.31: Save PDF dialog and document.exportPdf with PDF settings 2026-10-05 07:22:27 +07:00
tests_save.rs Fix #638: Layers panel lays out only the rows in view and keeps open rows in the file 2026-10-09 08:19:49 +07:00
tests_saveoptions.rs M4.38: native and .ai save options: each artboard to its own file, linked files, ICC profiles, PDF content 2026-10-05 15:24:19 +07:00
tests_scalestrokes.rs Fix #291: live corners stay circular when a rectangle is scaled unevenly 2026-10-07 20:25:41 +07:00
tests_shaper.rs M2.9: add editable Shaper groups and shape orientation steps 2026-10-08 22:52:23 +01:00
tests_slices.rs M4.89: Slice and Slice Selection tools draw, pick, move, resize and delete slices 2026-10-05 12:52:15 +07:00
tests_smartguides.rs Fix #506: drawing tools snap to Smart Guides as the Selection tool does 2026-10-08 23:20:27 +07:00
tests_strokegeom.rs M3.20: visual bounds cover arrowheads so overhanging heads are not culled; one arrowhead-weight helper 2026-10-04 17:40:41 +07:00
tests_strokegradient.rs M4.31: Save PDF dialog and document.exportPdf with PDF settings 2026-10-05 07:22:27 +07:00
tests_strokereach.rs M3.63: visual bounds and clicks take in the whole stroke 2026-10-05 02:55:23 +07:00
tests_strokeux.rs Stroke: per-unit weight presets so mm/cm/in dropdowns show clean numbers 2026-10-08 12:26:47 +07:00
tests_stylelib.rs Swatches: swatch.library.copyToUser copies a loaded library into User Defined 2026-10-09 13:32:59 -07:00
tests_stylepanel.rs M14.4: tests main gained follow the no-panic lint rules 2026-10-05 06:40:34 +07:00
tests_styles.rs M3.68: groups, layers and type have their own fills, strokes and effects, with Contents and Characters rows 2026-10-05 00:59:34 +07:00
tests_swatchcmds.rs M3.59: tints of global and spot colours, tint swatches and Global colour balance 2026-10-05 02:29:17 +07:00
tests_swatches.rs M4.31: Save PDF dialog and document.exportPdf with PDF settings 2026-10-05 07:22:27 +07:00
tests_swatchlib.rs Swatches: swatch.library.copyToUser copies a loaded library into User Defined 2026-10-09 13:32:59 -07:00
tests_targeting.rs M3.69: target circles target layers, groups and objects; drag them to move appearances 2026-10-05 02:15:41 +07:00
tests_textcombos.rs M7: tests for the text engine features combined 2026-10-08 20:30:14 -07:00
tests_textedit.rs Part of #394: Preferences for snapping, handles, rubber bands, pattern tiles, tints and type 2026-10-08 09:43:12 +07:00
tests_textimport.rs AF.3: native Affinity import with artboards, vectors, text and images 2026-10-08 17:58:11 +00:00
tests_tileedge.rs M3.72: Tile Edge Color dialog and Show Swatch Bounds in pattern editing 2026-10-05 01:50:25 +07:00
tests_tints.rs M4.31: Save PDF dialog and document.exportPdf with PDF settings 2026-10-05 07:22:27 +07:00
tests_toolsettings.rs M8.2: tool options last across tool switches and launches 2026-10-06 09:23:44 +07:00
tests_transparencygrid.rs M3.88: Show Transparency Grid is per-document engine view state 2026-10-05 03:11:04 +07:00
tests_typearea.rs M7: area type vertical alignment 2026-10-08 14:28:02 -07:00
tests_units.rs M14.5: Preferences > Units drive every length the UI shows and reads 2026-10-05 07:43:41 +07:00
tests_webexport.rs M4.90: Save for Web (Legacy) previews and saves optimised GIF, JPEG, PNG-8 and PNG-24 images, slices and HTML 2026-10-05 15:24:51 +07:00
tests_widthpoints.rs M3.64: Width tool depth: Width Point Edit, multi-select, Alt-copy and discontinuous points 2026-10-05 04:38:09 +07:00
tests_widthprofiles.rs M3.61: width profile library: Add to Profiles, Delete Profile, Reset Profiles 2026-10-05 02:55:21 +07:00
tests_widthtool.rs M8.7: Width tool edits compound-path strokes, shows every subpath's points, own cursors 2026-10-06 12:01:10 +07:00
tests_xform.rs Fix #602: Scale Artwork with Artboard scales the art with a resized artboard 2026-10-09 11:50:35 +01:00
tooling.rs Fix #712: the bounding box hides while a drag moves, scales or rotates 2026-10-09 17:39:12 +07:00
units.rs M14.5: Preferences > Units drive every length the UI shows and reads 2026-10-05 07:43:41 +07:00