Commit Graph
3575 Commits
Author SHA1 Message Date
dotCooCoo df155042d4 Merge main into feat/image-color-mask 2026-11-12 17:40:13 -08:00
BFlat f7a03f7899 Merge pull request #6991 from dotCooCoo/feat/recolor-theme-picker
Recolor Artwork: the Color Theme Picker picks new colors from the art on the canvas
2026-11-13 08:31:13 +07:00
BFlat 39f7d33e22 Merge pull request #6943 from dotCooCoo/feat/color-rgb-percent
Color: a double-click right of an RGB field switches between percent and 0 to 255
2026-11-13 08:31:01 +07:00
BFlat 8bd948f9b4 Merge pull request #6996 from dotCooCoo/fix/align-artboard-distribute
Align: artboard Distribute buttons need three artboards with Align to Selection
2026-11-13 08:30:39 +07:00
BFlat cae74519f2 Merge pull request #6998 from dotCooCoo/fix/i18n-script-messages
i18n: script errors and failed-run lines are translated in every complete-message catalog
2026-11-13 08:29:39 +07:00
BFlat d0a8fc708f Merge pull request #7001 from dotCooCoo/fix/wasm-clippy-runtime-default
Updates: Runtime derives Default on wasm32, so wasm32 clippy passes
2026-11-13 08:29:29 +07:00
BFlat 24af0c146a Merge pull request #6938 from dotCooCoo/fix/pdf-large-page-export
Export As: a PDF without artboards opens Save PDF and its options
2026-11-13 07:48:44 +07:00
BFlat b4bc86c45c Merge pull request #6942 from dotCooCoo/feat/cjk-insert-aki
Type: Insert Aki Left and Right add space before and after a character
2026-11-13 07:48:24 +07:00
dotCooCoo 7764da6ad8 Updates: Runtime derives Default on wasm32, so wasm32 clippy passes
`cargo clippy --target wasm32-unknown-unknown -p vectorcraft-ui-egui
-- -D warnings` stopped twice. In vectorcraft-text, MAX_FILE_SEARCHES
is used only by the system font search, which is not compiled for
wasm32, so it was dead code there. In vectorcraft-ui-egui, Runtime
holds only manual_window_open and status_message on wasm32, and the
hand-written Default set them to false and None, so clippy's
derivable_impls stopped the run.

- MAX_FILE_SEARCHES is compiled only for targets other than wasm32,
  like the SysFallback struct next to it.
- Runtime derives Default on wasm32, and the hand-written Default,
  which creates the updater, is compiled only for other targets.
2026-11-12 16:27:30 -08:00
dotCooCoo b1a3ec4a97 Merge main into feat/color-rgb-percent 2026-11-12 16:15:23 -08:00
dotCooCoo a14236eca8 i18n: script errors and failed-run lines are translated in every complete-message catalog
The status bar shows a failed script run as one line: the script's
name, the line and column (and the included file), the error and the
kind of failure, with any files the run left written. No catalog had a
row for that line, so the whole line stayed in English. The errors of
File, Folder, vc.run, $.evalFile, a script's $ object, its alert,
confirm and prompt dialogs, vc.document, vc.log, the limits a run can
pass and Drop Script Engine had no row in any complete catalog either,
and several were not listed by the untranslated-strings report.

- Every complete-message catalog has rows for these errors and for the
  failed-run line at each place and for each kind (syntax, thrown,
  limit, stopped, internal). The script's name, paths, numbers, code
  names ($.flags, File, answers, true, null, UTF-8), command ids and
  the text a script throws itself are kept.
- A failure with no line and column, such as an error in code eval
  compiled, is shown with one colon after the script's name
  ("t.js: TypeError: no (thrown)" instead of "t.js:: TypeError: no
  (thrown)").
- A placeholder that occurs twice in a message template matches only
  the same text both times. Before, "{name}: the next answer in
  `answers` is for {_1}, not {name}" matched a whole failed-run line
  and dropped its line, column and kind.
- The message scan reads the script host's fail(, value( and .over(
  helpers and the script interpreter's errors (the js crate), skips
  *_tests.rs files and cfg(all(test, ...)) modules, and reads a
  constant's text from the file or crate that declares it, so the
  Scripts menu's headers are no longer listed as messages.

Tests: i18n::tests::script_errors_are_translated,
script_host_errors_are_translated,
a_repeated_placeholder_matches_the_same_text,
message_scan_reads_constants_of_the_file_and_its_crate,
message_scan_reads_script_interpreter_errors,
message_scan_skips_test_modules_with_any_test_cfg,
tests::script_run::an_error_without_a_place_names_the_script_and_kind.
2026-11-12 16:13:33 -08:00
BFlat 4b344e91ce Merge pull request #6960 from dotCooCoo/feat/3d-graphics-planar
3D and Materials: map graphics onto the planar faces of 3D objects
2026-11-13 07:10:09 +07:00
BFlat 2d22db13ff Merge pull request #6978 from dotCooCoo/fix/docinfo-brush-type-translations
Document Info: Brushes shows brush types in the interface language
2026-11-13 07:10:00 +07:00
BFlat b70b52836c Merge pull request #6984 from mockydevs/fix/swatches-show-recent-colors-6617
Swatches: the panel menu's Show Recent Colors shows or hides the Recent Colors row
2026-11-13 07:09:15 +07:00
dotCooCoo d3375c1656 Color: Toggle RGB Percent switches the RGB units from the keyboard
The double-click right of an RGB field was the only way to switch R, G and B
between percent and 0 to 255 from the UI. ui.colorRgbPercent (Toggle RGB
Percent) is listed in the command palette and in Keyboard Shortcuts without a
default key, and switches the same setting. A parameter answers an error and
changes nothing. The label has a row in every complete catalog.
2026-11-12 16:04:30 -08:00
dotCooCoo 12c4c06fc1 Save PDF: a PDF automation asked for stays closed after its save panel answers
View PDF after Saving checked only whether automation was acting at
that moment. When automation asked for Save as PDF without a path, the
save panel's answer arrives later, so the written PDF opened in the
system viewer. The check now uses automation_asked, which also covers
the answer of a save panel automation opened, in view_file and in
Export As.
2026-11-12 15:59:19 -08:00
dotCooCoo 632830947a Merge main into feat/recolor-theme-picker
Xf::new is test-only on main now: the Color Theme Picker's canvas layer builds its view transform with Xf::at and the canvas's interface zoom.
2026-11-12 15:54:28 -08:00
dotCooCoo c97cea8a65 Align: artboard Distribute buttons need three artboards with Align to Selection
With the Artboard tool chosen and Align to Selection, two selected artboards are the first and the last of the distribution, so the Align panel's and the Control bar's Distribute buttons are off until three are selected. With Align to Artboard the spacing places the second artboard from the active one, and two are enough.

The Distribute Spacing field takes negative values with the Artboard tool chosen, as artboard.distributeSpacing overlaps the artboards with a negative spacing. With other tools its lowest value stays 0.

Art inside two overlapping artboards now goes with the one first in artboard order when the artboard Align and Distribute commands move them, and stays when that artboard stays, as in the other artboard edits.
2026-11-12 15:49:46 -08:00
dotCooCoo d5a02ee872 Merge main into feat/3d-graphics-planar 2026-11-12 15:19:09 -08:00
dotCooCoo 31b669a0a1 Recolor Artwork: the Color Theme Picker picks new colors from the art on the canvas
The Color Theme Picker button beside the Assign and Edit tabs turns on
picking from the canvas. A click takes the color palette of the object a
Selection tool click takes there, a drag takes the palette of the art
inside its marquee, and Shift adds more picks. The rows that are not
excluded take the palette as their new colors and the art previews them;
OK keeps the recolor as one undo step.

- recolor.pickTheme {picks, colors?} returns the palette of the art
  picked: visible fills and strokes, gradient stops, text, mesh points,
  pattern tiles, symbol art, colorize colors and image pixels. Clip
  groups, clipping opacity masks and isolation mode limit it to what
  shows, and it changes nothing.
- Each object read weighs the same; similar colors merge (k-means in Lab)
  into at most `colors`, most used first. Image reads are bounded (65,536
  pixels a pick, 1,048,576 pixels and 64 images in all), and past 4,096
  distinct colors, close colors merge before clustering.
- The dialog's themePicker and themePicks fields drive it from
  ui.dialog.set. A new Colors count keeps the picks.
2026-11-12 15:16:23 -08:00
BFlat b4505a76de Merge pull request #6887 from dotCooCoo/feat/new-document-profiles
New Document: each preset category starts documents from its own profile
2026-11-13 06:11:41 +07:00
BFlat d61ad77529 Merge pull request #6909 from dotCooCoo/feat/align-artboards
Align: the Align panel aligns and distributes the selected artboards
2026-11-13 06:11:32 +07:00
BFlat a55606e66b Merge pull request #6949 from dotCooCoo/fix/assign-profile-working-spaces
Color management: Assign Profile leaves the working spaces of Color Settings
2026-11-13 06:11:15 +07:00
dotCooCoo 5494e1aaa7 Merge main into feat/color-rgb-percent 2026-11-12 15:11:03 -08:00
BFlat cea91c1374 Merge pull request #6968 from dotCooCoo/fix/followup-6910
MCP: a readable library's id keeps a hidden path that it holds after its start
2026-11-13 06:10:58 +07:00
Don Omondi cbfd84a61f Merge remote-tracking branch 'upstream/main' into fix/swatches-show-recent-colors-6617
# Conflicts:
#	docs/target-app-parity.md
2026-11-12 18:04:51 -05:00
Don Omondi 1900c9429d Swatches: the panel menu's Show Recent Colors shows or hides the Recent Colors row (#6617) 2026-11-12 18:04:20 -05:00
dotCooCoo 505d11dae5 3D and Materials: straight graphic sides count once, and graphic handles stay with the drawn art
- Under a perspective, the shared 400,000-element limit of a 3D effect's graphics now counts
  what each path draws once mapped: a straight side stays one element, and only curves count
  as their 8 pieces. Two copies of a 30,000-sided polygon now both draw. The symbol check
  counts the same way, and without a perspective it counts each curve once.
- The Materials tab's handles on the artboard are hidden while a geometry effect (such as
  Transform) comes after the 3D effect of a selected object, since that effect draws the
  graphics away from the handles.
- A press on the canvas while its context menu is open only closes the menu, and no longer
  grabs a graphic's handle.
- A symbol instance inside a graphic's art shows its changes to a dynamic symbol, and a symbol
  with 9-slice guides is placed through them, as the canvas draws the instance. Paths that
  cross a guide are cut at it.
2026-11-12 15:02:34 -08:00
73b06e478e UI: icon flyouts resize from their top edge and free top corner (storytold/craft-libs#1094) (#6913)
Pin craft-ui to c4b8405d, which adds a top edge and the canvas-side top
corner to icon-strip flyouts and saves the moved top per group. Accept
its new MoveFlyoutTop docking action, and restore the saved top when a
group returns to its place. A docking regression checks the cursors, an
upward top-edge and free-corner drag with the bottom and icon-column edge
fixed, and the top after reopening and in a saved layout.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Codex <codex@openai.com>
2026-11-12 23:54:17 +01:00
dotCooCoo cfff971d06 Merge main into fix/pdf-large-page-export 2026-11-12 14:40:47 -08:00
dotCooCoo c7900a9705 Document Info: Brushes shows brush types in the interface language
The Brushes rows name each type as the New Brush dialog does (Art Brush,
Scatter Brush) and say "missing from the Brushes panel" for a brush the
panel does not hold. The panel now shows these values through the
catalogs, so a localized interface no longer shows them in English.
document.info and the saved report keep them in English. Every catalog
gets a row for "missing from the Brushes panel"; the type names already
had rows.
2026-11-12 14:40:14 -08:00
dotCooCoo 3c10f9bf71 Merge main into feat/cjk-insert-aki 2026-11-12 14:28:45 -08:00
BFlat f813ea02d5 Merge pull request #6950 from dotCooCoo/perf/setformat-per-paragraph
Type: a Tabs indent drag over many paragraphs no longer takes time in the square of their number
2026-11-13 05:24:02 +07:00
BFlat 9861e7f927 Merge pull request #6920 from dotCooCoo/feat/export-notes-loss-first
Save and Export: notes of what the file loses come before notes on options
2026-11-13 05:23:53 +07:00
BFlat 822d4101b5 Merge pull request #6890 from dotCooCoo/feat/3d-expand-as-wireframes
3D and Materials: Expand as Wireframes turns a 3D object into its edges as paths
2026-11-13 05:23:34 +07:00
BFlat a86021c7ae Merge pull request #6833 from dotCooCoo/fix/dialog-set-hidden-fields
Automation: ui.dialog.set cannot change the command a dialog runs
2026-11-13 05:23:26 +07:00
BFlat c2f97d2efa Merge pull request #6961 from dotCooCoo/fix/gradient-repeat-runs
Gradients: a repeated gradient with many stops keeps every run
2026-11-13 05:22:59 +07:00
dotCooCoo 71df6f0fd2 Save PDF: ui.savePdfDialog refuses a useArtboards that is not true or false
A value such as "false" or 0 used to open the dialog for the artboards. It is
now refused before the dialog opens, as document.exportPdf refuses it.
2026-11-12 14:06:35 -08:00
dotCooCoo 3e32e99a15 Merge main into feat/align-artboards 2026-11-12 13:47:00 -08:00
dotCooCoo 554d86765a Merge main into feat/3d-graphics-planar 2026-11-12 13:46:05 -08:00
dotCooCoo 7907bae6c3 Merge main into feat/new-document-profiles 2026-11-12 13:42:10 -08:00
dotCooCoo 2c3f61851f MCP: a readable library's id stays only after a delimiter
A readable library's id was kept whole after any character outside a
short list, so in `/a+/project/libs/Kit.gpl` the id
`/project/libs/Kit.gpl` was kept and the hidden `/libs/Kit.gpl` inside
it showed in the reply. The same happened after `@`, `=`, `%` and `!`.

The id now stays only at the start of the text, after a space, a
quote, `,`, `;` or an opening bracket, or in a local `file:` URL.
Written with its `loaded/`, it also stays after `=`.
2026-11-12 13:31:33 -08:00
dotCooCoo 312d4a3914 Merge main into feat/image-color-mask 2026-11-12 13:30:24 -08:00
BFlat 71d717b1da Merge pull request #6940 from dotCooCoo/feat/learn-tool-locator
Learn: a tool's name in a tutorial step shows where the tool is
2026-11-13 04:26:05 +07:00
BFlat 3434e46240 Merge pull request #6825 from dotCooCoo/feat/custom-arrowheads
Stroke: custom arrowheads from an arrowheads file join the arrowhead menus
2026-11-13 04:25:55 +07:00
dotCooCoo 35a03aeda3 3D and Materials: a click on a graphic's handle records no undo step
A press and release on a graphic's handle without moving it sends no change, so it adds no Effect Options step to the history.
2026-11-12 12:56:22 -08:00
dotCooCoo 264a6541e6 Merge main into fix/dialog-set-hidden-fields 2026-11-12 12:55:47 -08:00
dotCooCoo 5edc0fa4f8 Merge main into perf/setformat-per-paragraph 2026-11-12 12:52:42 -08:00
dotCooCoo f02a572c6a Merge main into fix/assign-profile-working-spaces 2026-11-12 12:46:52 -08:00
dotCooCoo b9946efb1e Merge main into feat/cjk-insert-aki 2026-11-12 12:46:09 -08:00