Commit Graph
3307 Commits
Author SHA1 Message Date
Marco Arnulfo c91405dbea Window menu: a panel's item hides it while it shows and shows it again where it was (part of #2361) 2026-10-16 14:57:23 +07:00
Marco Arnulfo 80b7aee756 Isolation mode: a path of the isolated compound path moves on its own (fixes #2354) 2026-10-16 14:57:22 +07:00
Ayberk A. d838af024b MCP: command listings take query, menu and brief (#2173)
The command catalogue is about 340,000 characters, more than many MCP
clients show, and `query` (the name agents reach for first) was refused as
an unknown argument. command_list and list_commands now take `query` as
another name for `filter`, `menu` to keep the commands under a menu path
("Object > Path"), and `brief` to leave out each command's params text,
which is most of the catalogue; the params of one command are a filtered
listing away.
2026-10-16 14:57:21 +07:00
NetterSilverandClaude Haiku 5.5 e510190867 Keep Layers panel selection inside the isolated group
Fixes #2286

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 14:57:21 +07:00
NetterSilverandClaude Haiku 5.5 ee6cd6de55 Keep paragraph styles aligned in Find and Replace with line breaks
Found while testing crates/engine/src/cmd/typemenu.rs:668 (find_replace / edit_runs)

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-16 14:57:20 +07:00
Ayberk A. f14f8d8eb7 Font menu: the scroll bar no longer covers the favourite stars (#2277)
The family list scrolled with egui's floating scroll bar, which is drawn
over the rows' right ends, where each family's star is: with the pointer
there the bar widened over the star and a click went to the bar. The list
now takes the scroll bar the menus got for the same reason (#2086), slim
and in a column of its own; `widgets::list_scroll_style` holds it for both.
2026-10-16 14:57:19 +07:00
Marco Arnulfo 3b00334c41 Graph Type: the graph kind is a dropdown of the nine types (fixes #2175) 2026-10-16 14:57:18 +07:00
Dylan M. Taylor e9edc49977 ci: switch to shared nix workflow from craft-common-actions 2026-10-16 14:57:18 +07:00
Dylan M. Taylor f9092edfe3 ci: standardize FreeBSD workflow on shared FreeBSD 15.1 action 2026-10-16 14:57:17 +07:00
Patrik LermonandClaude Opus 5.5 54e43d0a97 i18n(sv): review of the rows drafted for the strings main added
- "Font Style:" in Dimension Tool Options is Teckensnittsstil: Teckenstil
  is already Character Style.
- The drawing-scale help reads "1:10 visar 1 enhet på sidan som 10".
- The layered-file fallback message and "Check an artboard to save" read
  more naturally.
- "File › Place…" names the menu as the menus do (Fil, not Arkiv).
- The rows are reviewed, so the "machine-drafted; review welcome" note
  above them goes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 14:57:16 +07:00
Marco Arnulfo c5e38a309c Contributors: add my name for the About window 2026-10-16 14:57:15 +07:00
BFlat 842656f240 Merge pull request #2378 from storytold/ui/classic-theme
UI: Classic colour scheme
2026-10-16 14:39:52 +07:00
bflatastic a64a5a9911 UI: Classic colour scheme (User Interface › Color Scheme)
A second colour scheme next to Modern: the neutral greys and blue accent of
earlier versions, on the same cards, corners and layout. Picked in
Preferences › User Interface › Color Scheme (pref uiColorScheme:
modern|classic); Accent Color is dimmed while Classic is chosen, which has
its own blue.
2026-10-16 14:29:33 +07:00
skylar taylor-barrick ae6dc17ffe Merge pull request #1184 from dylanmtaylor/refactor/dry-github-actions
ci: refactor workflows to use storytold/craft-common-actions and add nix check
2026-10-15 21:46:35 -06:00
skylartaylor 2fa10c957c ci: retain VectorCraft package and release checks 2026-10-16 05:43:40 +02:00
BFlat deff5b8f42 Merge pull request #2339 from storytold/readme/screenshots
README: new screenshots, with 3D Revolve and Dimension tool showcases
2026-10-16 09:57:55 +07:00
bflatastic c334aa7e66 README: new screenshots of the current interface, with 3D Revolve and Dimension tool showcases
Seven app screenshots retaken at 2240x1400 (UI at 1.6x), two of them new: a 3D still life with the Revolve dialog (examples/still-life.vectorcraft) and a bracket drawing with linked dimensions (examples/bracket-drawing.vectorcraft). The still life also joins Made in VectorCraft. The older examples are saved again in the current native format; they render the same.
2026-10-16 09:53:12 +07:00
BFlat 3f33e854d4 Merge pull request #2331 from storytold/ui/restyle
UI: restyled interface
2026-10-16 09:11:04 +07:00
bflatastic 257217a2e3 UI: restyled interface with a choice of accent colours 2026-10-16 09:00:14 +07:00
Dylan M. Taylor f08f3619e3 ci: refactor workflows to use storytold/craft-common-actions and add nix check 2026-10-15 21:38:50 -04:00
BFlat 8770d2a96c Merge pull request #1902 from Messhias/feat/g12-layers-collect-export
G12: Collect for Export on Layers (≡ and row menu)
2026-10-16 06:37:53 +07:00
BFlat c64c0120f5 Merge pull request #1918 from sanyamsingh001/codex/r65-guide-origin
G1: align guide snapping and readouts with ruler origin
2026-10-16 06:37:36 +07:00
BFlat 40fe3154ee Merge pull request #1912 from p0lyg0n/i18n/ja-swatches
i18n: the Swatches panel shows the default swatches' names in Japanese
2026-10-16 06:37:17 +07:00
BFlat a812bb7dcc Merge pull request #1900 from imachus/pr/ja-whitespace-fallback
Type: whitespace the primary font doesn't map takes the fallback face too (#1844)
2026-10-16 06:36:58 +07:00
BFlat 756ec5c5e3 Merge pull request #2281 from limackk/fix/round-corners-curve-line
Effects: Round Corners also rounds corners where a curve meets a line
2026-10-16 06:36:40 +07:00
BFlat 0bd4ce2260 Merge pull request #2280 from guillehr2/fix/transform-copies-symbol-instances-and-reach
effects: a Transform effect copies a group's symbol instances too, and stops image copies at MAX_REACH
2026-10-16 06:36:13 +07:00
BFlat 06fdeeef6c Merge pull request #2283 from marcoarnulfo/fix/svg-mask-type-alpha
SVG import: an alpha mask counts by its art's alpha, not its luminance
2026-10-16 06:35:54 +07:00
BFlat 9da787f951 Merge pull request #1888 from dotCooCoo/fix/brush-art-own-stroke-outlines
Render: the strokes of brush art are no longer drawn with old outlines
2026-10-16 06:35:36 +07:00
BFlat 2853d78e66 Merge pull request #1889 from dotCooCoo/fix/commands-with-nested-ids
Commands: ids leave out an object listed with a group that holds it, as the selection does
2026-10-16 06:35:21 +07:00
BFlat 3352e02a2b Merge pull request #2301 from dotCooCoo/feat/glass-load-texture
Effects: Glass loads its texture from an image file
2026-10-16 06:35:05 +07:00
BFlat 915a172b9a Merge pull request #2288 from dotCooCoo/feat/unit-fields-percent-arithmetic
Fields: unit fields take % in arithmetic, as in 3cm*50% and 50pt+25%
2026-10-16 06:34:49 +07:00
BFlat 59c872baaa Merge pull request #2290 from dotCooCoo/fix/transform-effect-copies-stay-type
Export: type copied by a Transform effect that only moves it stays type
2026-10-16 06:34:26 +07:00
BFlat 89a7992c98 Merge pull request #2289 from dotCooCoo/test/pdf-fuzz-unparseable-resources
Tests: the PDF import fuzz covers values the reader can't parse and functions inside other objects
2026-10-16 06:34:09 +07:00
BFlat 15819868a2 Merge pull request #2291 from dotCooCoo/fix/eps-cmyk-images-keep-samples
EPS import: CMYK images keep their ink amounts
2026-10-16 06:33:53 +07:00
BFlat e41f7818d6 Merge pull request #2293 from dotCooCoo/fix/ai-one-bit-color-images
.ai import: 1-bit RGB and CMYK images in the editing data open in their colors
2026-10-16 06:33:36 +07:00
BFlat 7316cf7e39 Merge pull request #2298 from dotCooCoo/fix/windows-start-after-graphics-driver-crash
Windows: after a graphics driver crash, the next start leaves that adapter out
2026-10-16 06:33:20 +07:00
BFlat 114960482e Merge pull request #2299 from dotCooCoo/feat/pdf-ai-file-info
PDF/.ai import: PDF and .ai files open with the File Info they carry
2026-10-16 06:33:04 +07:00
BFlat 23cfe935db Merge pull request #2303 from dotCooCoo/fix/removed-fonts-leave-the-list
Fonts: a removed font that type used leaves the list at the next font scan
2026-10-16 06:32:41 +07:00
Fabio William Conceição b04e3ac366 G12: Collect for Export from Layers panel and layer ids
Layers ≡ and row menus collect art via assets.add; a layer id expands to the art under it (including sublayers) so MCP and the panel match Object › Collect for Export.
2026-10-16 06:16:36 +07:00
sanyamsingh001andCodex 60c8b8f4e2 G1: align guide snapping and readouts with ruler origin
Co-authored-by: Codex <noreply@openai.com>
2026-10-16 06:16:36 +07:00
Hiroshi InukaiandClaude Opus 5.5 75ee324e6c i18n: the Swatches panel shows the default swatches' names in Japanese
The list showed [None], [Registration] and the default swatches' names in
English. Names the app gives (the default swatches and colour groups) now
show in the UI's language where it has a `swatch` row for them; documents
keep the names as they are, and a name the user gave shows as written.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 06:16:35 +07:00
imachusandClaude Opus 5.5 4265c2f301 Type: whitespace the primary font doesn't map takes the fallback face too (#1844)
An ideographic space in a face without U+3000 was shaped with that face
and could set at zero width, removing an indent. Only what the layout
handles itself (tab, line and paragraph breaks) stays with the primary.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 06:16:35 +07:00
Kamil KwiatkowskiandClaude Opus 5.5 a14942de9c Effects: Round Corners also rounds corners where a curve meets a line
A corner whose anchor carries a handle (where a curve meets a line, or two
curves meet) was left sharp. It now gets Live Corners' round cut
(geom::corners, #1144), reaching `radius` along each side and trimming a
curved side. Corners between handle-less anchors are rounded exactly as
before, and a closed path still starts where its first corner's rounding
starts.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 06:16:35 +07:00
Guillem Hermida d05ccffebc effects: a Transform effect copies a group's symbol instances too, and stops image copies at MAX_REACH
Symbol instances are placed through a transform as images are, so the
Transform effect now moves and copies both (transform_placed), sharing one
copy budget (MAX_COPY_OBJECTS). Copies of either stop before one reaches
past MAX_REACH, as a path's do (distort::within_reach).

Adds end-to-end export tests for a group's image copies in svg and pdf.
2026-10-16 06:16:35 +07:00
Marco Arnulfo 789a151ff9 SVG import: an alpha mask counts by its art's alpha, not its luminance (fixes #2210) 2026-10-16 06:16:35 +07:00
dotCooCoo a8e612d3e2 Render: the strokes of brush art are no longer drawn with old outlines
While the renderer drew a brushed path on its fast path, it drew the
pieces of brush art with that path still set as the object being
drawn. cached_stroke and fill_path_gradient then kept the outlines and
gradient slices of the pieces' strokes under the brushed path and the
address of each piece's stroke. The entries held the brushed path and
not the pieces, so a piece made later could take the address of an
earlier piece's stroke and be drawn with that piece's outline. The
instances of a symbol and the copies of a live repeat replace each
other's brush art, so it is made again for each of them in every
frame, and every brushed path gets new brush art when the document's
brushes change. In a test, a renderer drawing three instances of a
symbol whose art holds a path brushed with a scatter brush of a
stroked square drew frames that differed from a new renderer's in 316
to 1,140 pixels.

The two caches now keep only the strokes of the object being drawn. With
vectorcraft-cli bench at 2880x1800 on 8 threads, 2,000 instances of a
symbol of eight brushed paths took 203.4 ms a frame on main and 155.9 ms
with this change. 2,000 groups of the same paths, for which main keeps
the brush art and the outlines of its strokes between frames, took 133.7
ms on main and 156.9 ms with this change. The peak working set of a
bench run at 2880x1800 went from 609 MiB to 127 MiB on the instances and
from 331 MiB to 210 MiB on the groups.
2026-10-16 06:16:35 +07:00
dotCooCoo 67a278b053 Commands: ids leave out an object listed with a group that holds it, as the selection does
Commands that read the selection through edit::selected_roots leave
out an object whose group is also selected (edit::roots_of). Fourteen
places that read `ids` kept an object listed together with its group.
Given ids that list an object and a group that holds it, Make Repeat
failed with "no such object", New Symbol failed or stored the object
twice in the symbol, and object.transform moved it twice (20 pt for a
10 pt move).

These places now pass explicit ids through edit::outermost, which
drops an id whose ancestor is also listed, with the filter that
roots_of runs on the selection (now edit::without_inner). Nothing else
is dropped or replaced: unlike roots_of, it keeps layers and
compound-path members. A list without nesting gives the same result as
before. Commands that take both ids and the selection as listed, such
as paint.setFill without item, are unchanged.

Docs: docs/mcp.md, docs/target-app-parity.md.
2026-10-16 06:16:35 +07:00
bflatastic a6f56caa0e Glass Load Texture: el, fi, pt-br and sv rows 2026-10-16 06:16:35 +07:00
dotCooCoo 7e9d0be723 Fields: unit fields take % in arithmetic, as in 3cm*50% and 50pt+25%
Unit fields and length strings read a percentage operand as a share of
a value. After * or /, the percentage scales the term before it:
3cm*50% is 1.5 cm and 3cm/50% is 6 cm. After + or -, it adds or takes
away that share of everything before it: 50pt+25% is 62.5 pt and
100pt+20pt-50% is 60 pt. Before this change these expressions read as
nothing, and the field kept its old value.

The parser now splits a sum at its last + or -, so a percentage applies
to the whole sum before it. Text without % gives the same values as
before, apart from float rounding. A percentage on its own (50%) still
reads as nothing, and percent and degree fields still read % as their
suffix.

Command length strings use the same parser: file.new's width and
height, the distance params and the length preferences.

Docs: docs/mcp.md, docs/ui-parity.md, docs/target-app-parity.md.
2026-10-16 06:16:35 +07:00
dotCooCoo da43c662e0 Export: type copied by a Transform effect that only moves it stays type
Exports bake live effects into plain art, and a Transform effect on
type or on its group or layer turned the type into glyph outlines, even
when the effect only moved it or made moved copies. A PDF reader could
not select or search that text.

The export bake now keeps such type as type, moved into each place the
effect puts its outlines. It does this for Transform effects without
scale, rotation, reflection or Random, for type whose characters are in
solid colors without underline or strikethrough, and that has no fills
or strokes of its own, inline graphics or perspective, and when the
copies do not overlap. Type under such an effect on its group or layer
also needs no transparency or effects of its own, and the group or
layer needs no fill, stroke or Pathfinder effect of its own. The export
still outlines other type under geometry effects, and the canvas and
Expand Appearance still draw outlines.

Docs: docs/mcp.md, docs/target-app-parity.md.
2026-10-16 06:16:35 +07:00