Commit Graph
12865 Commits
Author SHA1 Message Date
BFlat 0f88bb1fa9 Merge pull request #7372 from dotCooCoo/feat/home-learn-section
Home: a Learn section lists the tutorials and the Quick skill guide
2026-11-14 13:42:47 +07:00
BFlat 0ca2952093 Merge pull request #7363 from dotCooCoo/fix/stained-instance-export
Symbols: a stained instance keeps its stain in SVG, PDF and the other exports
2026-11-14 13:42:39 +07:00
BFlat aa5b635b32 Merge pull request #7388 from dotCooCoo/fix/snap-glyph-parametric-slice
Smart Guides: Parametric Shape and Slice tools snap as the drawing tools do
2026-11-14 13:42:31 +07:00
BFlat be93e4b3f2 Merge pull request #7377 from dotCooCoo/fix/symbol-expand-reset-bbox
Symbols: Break Link and Expand keep an instance's bounding box
2026-11-14 13:42:23 +07:00
BFlat 2a56e33953 Merge pull request #7355 from dotCooCoo/fix/cs-message-rows
i18n: Czech translates 1,813 of the status and error messages the untranslated report lists
2026-11-14 13:42:12 +07:00
BFlat 4b3df93745 Merge pull request #7371 from dotCooCoo/fix/batch-swatch-default-paint
Swatches: swatch steps in a batch change the paints for new art
2026-11-14 13:42:04 +07:00
BFlat 7fd4564c0c Merge pull request #7390 from dotCooCoo/fix/hyphenation-exceptions-relayout
Type: hyphenated type lays out again when the hyphenation exceptions change
2026-11-14 13:41:57 +07:00
BFlat 57933a8046 Merge pull request #7385 from dotCooCoo/fix/type-panels-story-wide
Type: Character and Paragraph panel changes apply to every frame of a selected story
2026-11-14 13:41:46 +07:00
BFlat 8cc8ab0781 Merge pull request #7352 from dotCooCoo/fix/zh-hant-message-rows
i18n: Traditional Chinese has a row for 1,813 of the messages the untranslated report lists
2026-11-14 13:41:36 +07:00
BFlat d8f180006a Merge pull request #7382 from ncic/pencil-alt-close-straight
Pencil: a closed stroke closes with a straight segment
2026-11-14 13:41:27 +07:00
BFlat 19dfce800a Merge pull request #7384 from storytold/fix/font-menu-test-settle
Tests: font menu tests draw until the menu stays put
2026-11-14 13:41:17 +07:00
BFlat ecd4b80af2 Merge pull request #7395 from storytold/fix/warichu-test-text-ops
Tests: warichu PDF check reads only text objects
2026-11-14 13:41:10 +07:00
BFlat e56d1c7dce Merge pull request #7407 from storytold/fix/fmt-craft-libs-migration
Fix main CI after the craft-libs migration (fmt, wasm)
2026-11-14 12:46:39 +07:00
Dylan M. Taylor c11ee11c1c Merge pull request #7454 from storytold/codex/fix-ci
Fix CI formatting after craft-libs cutover
2026-11-14 00:44:10 -05:00
Dylan M. Taylor 2ce569a6a7 Format svg adapter after craft-libs cutover 2026-11-14 05:14:16 +00:00
bflatastic ff9222c1d4 xtask: name wasm crates by package id
craft-svg builds against an older vectorcraft-geom and vectorcraft-pathops by git, so the
graph holds two packages of each name and `cargo check -p vectorcraft-geom` is ambiguous.
The wasm step now passes each workspace crate's package id.
2026-11-14 11:55:41 +07:00
bflatastic f56146635f SVG: rustfmt the SVGZ error arms
#7398 left crates/svg/src/lib.rs unformatted, so main's CI stopped at
fmt and skipped clippy and the tests.
2026-11-14 10:47:02 +07:00
Dylan M. Taylor 1e4e3534f5 Merge pull request #7398 from storytold/feat/craft-libs-migration
Migrate CAD (DXF), EPS/PostScript, and SVG to craft-libs (#778)
2026-11-13 22:14:10 -05:00
dotCooCoo 485636acf8 Merge main into fix/zh-hant-message-rows 2026-11-13 19:09:36 -08:00
bflatastic 3da4c4ba13 Tests: warichu PDF check reads only text objects
warichu_is_a_character_attribute_set_saved_and_exported looked for Tj or
TJ anywhere in the exported PDF. The file ID in the trailer and the XMP is
a base64 hash that changes each second and now and then spells one of
them, so the test failed on main twice (bf3cf422e, 446bf59bc) while
export outlines warichu type every time. It now counts text-object lines
only, as the colour font PDF test already does.
2026-11-14 10:06:23 +07:00
dotCooCoo 1dc8b72bbf Type: hyphenated type lays out again when the hyphenation exceptions change
Changing Preferences › Hyphenation › Exceptions bumped each open
document's revision, but the caches of laid-out type outside the text
crate were keyed on the font generation alone. The renderer kept the
glyph geometry, raster-effect pixels, live-effect and envelope art,
pattern tiles and placed symbol art of unchanged type objects, so
hyphenated area type kept its old line breaks on the canvas. The
hit-test art of blends and envelopes, the Fit to Artwork Bounds answer,
the layout caches of the Type and Touch Type tools and the out port's
overflow mark were keyed the same way.

vectorcraft_text::layout_inputs() returns a number that changes with
the fonts and with the hyphenation exceptions. Every one of those
caches now keys on it instead of FontDb::generation(), and envelope ink
uses it in place of the private envelope_ink_inputs(). The hit-test key
hashes it together with the plug-in revision.

Tests: a renderer that drew hyphenated area type, alone, with a drop
shadow, in a group with a Transform effect, in a symbol instance and in
an envelope, draws it as a new renderer does after the exceptions
change; the out port of selected area type shows the overflow that the
new exceptions cause. The render test helpers that run a step again
when the fonts change during it now also run it again when the
exceptions change.
2026-11-13 18:56:48 -08:00
dotCooCoo fecf724501 Smart Guides: Parametric Shape and Slice tools snap as the drawing tools do
The Parametric Shape tool's center and the Slice tool's corners snapped
with Smart Guides to the bounds of the art only, so View › Snap to Glyph
had no effect on them, and neither did the anchors and segments of
paths that the other drawing tools snap to. The point dragged out from a
Parametric Shape's center did not snap at all, and neither tool showed
Smart Guides while hovering before a press.

Both tools now snap through the drawing tools' shared snapping
(DrawSnap). A Parametric Shape's center (from a drag or a double-click),
the point dragged out from it, and a slice's corners land on glyph
guides and on path anchors and segments. The guides show while hovering
and during the drag. When a ruler guide then takes a slice corner, the
Smart Guides are no longer shown. A click with the Parametric Shape tool
still draws nothing when its center snaps a few pixels from the pointer.

Docs: docs/mcp.md, docs/target-app-parity.md.
2026-11-13 18:50:03 -08:00
bflatastic 797fcf16db Tests: font menu tests draw until the menu stays put
egui places an Area by the size it had the frame before. When a family
name measured late (a face added for its script, a font found in the
background) widened the menu on the helper's last frame, that frame drew
it where the narrower menu fit, and a_menu_wider_than_its_field_stays_in_the_window
saw it 0.7 pt past the window's edge (three failed CI runs on 2026-11-13).
The helper now draws until the menu stops moving.
2026-11-14 09:37:35 +07:00
BFlat 446bf59bc2 Merge pull request #7265 from dotCooCoo/feat/live-paint-cursor-swatch-preview
Live Paint Bucket: Cursor Swatch Preview and arrow keys pick swatches
2026-11-14 09:33:39 +07:00
BFlat 02dd94e9b8 Merge pull request #7347 from dotCooCoo/fix/corner-set-member-keys
Path Precision Tools: Corner commands refuse unknown item keys
2026-11-14 09:33:31 +07:00
BFlat e026414c70 Merge pull request #7348 from dotCooCoo/fix/csv-utf16-no-bom
Variables: Import Data Sets reads UTF-16 CSV files without a byte-order mark
2026-11-14 09:33:23 +07:00
BFlat caa56c2739 Merge pull request #7334 from dotCooCoo/fix/wrap-offset-length-field
Text Wrap: Offset is a distance in the document's units
2026-11-14 09:33:15 +07:00
BFlat af8907ce8c Merge pull request #7356 from dotCooCoo/fix/pl-message-rows
i18n: Polish has a row for 1,808 of the messages the untranslated report lists
2026-11-14 09:33:07 +07:00
BFlat 700089f819 Merge pull request #7343 from dotCooCoo/fix/uk-message-rows
i18n: Ukrainian translates 1,811 more status and error messages
2026-11-14 09:32:59 +07:00
BFlat ea24f694cf Merge pull request #7345 from dotCooCoo/fix/ai-twist-straight-guide-reach
.ai import: straight compound paths whose guides reach past them keep the drawn look under Twist
2026-11-14 09:32:51 +07:00
BFlat 826c8647ec Merge pull request #7361 from dotCooCoo/fix/zh-hans-message-rows
i18n: Simplified Chinese has a row for 1,813 of the messages the untranslated report lists
2026-11-14 09:32:43 +07:00
dotCooCoo 70387fd0ae Type: Character and Paragraph panel changes apply to every frame of a selected story
With the Selection tool, a change in the Character or Paragraph panel to a
selected frame of threaded text now changes every frame of its story,
locked and hidden frames included, in one undo step. Before, only the
selected frames changed.

- The panels send the frames of each selected story as the command's ids:
  every Character and Paragraph field, the font family menu and its
  preview, Bullets and Numbers, anti-aliasing, Variable Font axes, Reset
  Panel in both panels, the Tate-chu-yoko, Warichu and Hyphenation
  dialogs, and the Tabs panel's stops and Clear All Tabs. A story
  selected through several frames or a group is listed once.
- The fields read every frame of the story and show a value only when all
  frames share it.
- Clear All Tabs is enabled when another frame of the story has stops.
- Convert to Text keeps acting on the selected frames.
2026-11-13 18:31:04 -08:00
ruchirguitarandruchirguitar 30eb14d7dc PDF import: outlined Indic glyphs keep their own stroke and transparency (#5235) (#6957)
* PDF import: outlined Indic glyphs keep their own stroke and transparency (#5235)

Follow-up to #6906, for two review findings on how a line kept as
outlines is joined into paths:

- Glyphs were joined when their stroke widths matched; dash, cap, join
  and miter limit were ignored, so a dashed glyph took the stroke of the
  solid one before it. They join only when the whole stroke matches.
- Translucent glyphs were joined into one fill, where overlapping marks
  paint once instead of compositing as the file draws them. Only opaque
  glyphs join.

Also records the fix in the PDF row of docs/target-app-parity.md and in
docs/roadmap.md, as AGENTS.md asks.

Tests: outlined_glyphs_stroked_differently_stay_apart and
outlined_translucent_glyphs_stay_apart (both fail without the change).

* PDF import: outlined Indic glyphs under a soft mask stay apart; check kept geometry (#5235)

Review follow-ups on #6957 and #6906:

- Glyphs kept as outlines under a soft mask were joined into one path,
  so the mask was applied once to all of them where the file applies it
  to each glyph. They now join only when no soft mask is active.
- The fallback tests counted outline nodes only. A new test compares the
  kept outlines (element count and bounding box) with the same file
  opened as outlines, so a dropped or moved glyph fails it.

Tests: outlined_glyphs_under_a_soft_mask_stay_apart (fails without the
change) and kept_glyphs_are_where_the_file_draws_them.

* PDF import: mask outlined Indic glyphs one by one under a soft mask (#5235)

Review follow-up on #6957. Keeping glyphs out of one shared path was not
enough: each path still went into the soft mask's queue and
flush_masked wrapped them all in one masked group, so a mask that is not
constant was applied once to every glyph, where overlapping glyphs
composite one by one in the file.

With a soft mask active the queued art is now drained before the first
glyph and after each one, so every glyph gets a mask of its own.

Test: outlined_glyphs_under_a_varying_soft_mask_are_masked_one_by_one
checks that each outlined glyph carries its own mask (0 of 3 without
the change).

* #6957: clarify soft-mask exception in glyph grouping docs

---------

Co-authored-by: ruchirguitar <info@jeevantirth.org>
2026-11-14 03:26:20 +01:00
dotCooCoo 20fc6a0225 Symbols: Break Link and Expand keep an instance's bounding box
After Reset Bounding Box on a turned symbol instance, Break Link to
Symbol and Object > Expand gave the art a box turned with the instance's
transform again. The art's boxes now turn with the instance's own box,
so they stand square when the instance's box did, and the angles the
art has inside the symbol are kept relative to it. The group that an
instance's opacity, blending mode or opacity mask adds around the art
takes the instance's box angle instead of standing square to the page.

A reflected instance can hold a box 180 degrees from the box its
transform gives in one step; the art now takes the instance's box
there too, the same rectangle with its handles where the instance had
them.

Compound shapes and Pathfinder receive an instance's art through the
same rule.

The clip groups and clip paths that 9-slice guides make for gradient
and pattern art take the angle of the cell that places them, and the
outer group keeps the object's angle turned by the instance, instead
of standing square to the page. This also changes the result for an
instance that was never reset: a 20 degree sliced instance gave clip
groups at 0 degrees and now gives them at 20.

Docs: params text, docs/mcp.md, docs/target-app-parity.md.
2026-11-13 18:26:00 -08:00
ncic b0772bc2d6 Merge upstream main into pencil-alt-close-straight 2026-11-14 03:16:34 +01:00
dotCooCoo ab0d8b6d77 Home: a Learn section lists the tutorials and the Quick skill guide
The Home screen gets a Learn section between Recent Files and the new-file
presets: the Quick skill guide card, which shows the Learn panel's list of
skills (learn.skills), and each tutorial under its skill, which shows the
panel at its steps (learn.show). It works with no document open and over
open documents, opens no document and never hides the panel.

The card is shared with the panel's For you tab and now shows an outline
while it has the keyboard focus.
2026-11-13 18:13:45 -08:00
dotCooCoo b3fae432b6 Merge main into fix/batch-swatch-default-paint 2026-11-13 17:54:08 -08:00
dotCooCoo 73fd610324 Swatches: swatch steps in a batch change the paints for new art
A swatch delete, Swatch Options edit, merge, Edit Color Group, Spot
Colors options change or Default Swatches replace run as a
command.batch step left the fill and stroke new art takes linked to the
old or deleted swatch, because the defaults were skipped whenever an
interaction was open. A batch step now rewrites them as the command run
on its own does; a live Swatch Options preview still leaves them alone,
and a failed batch or a canceled batch preview puts them back.

The same commands now also rewrite the fills and strokes of the
appearance new art takes, and record the change with their undo step,
so Undo and Redo put the paints for new art back with the swatches.
2026-11-13 17:54:07 -08:00
Dylan M. Taylor e927729f25 SVG: delegate entity expansion bounds, sniffing, and SVGZ to craft-svg 2026-11-14 01:40:55 +00:00
BFlat 9fcfc81cc2 Merge pull request #7336 from dotCooCoo/fix/i18n-scan-gaps
i18n: the untranslated report checks the effects, map_err messages and schema phrases
2026-11-14 08:40:23 +07:00
BFlat c1efdbdaae Merge pull request #7255 from dotCooCoo/fix/folder-prefs-out-of-recorded-steps
Actions: keep folder preferences out of saved sets and confined replies
2026-11-14 08:40:15 +07:00
BFlat 5ccb284e34 Merge pull request #7335 from dotCooCoo/fix/live-paint-noop-undo
Live Paint: an edit that changes nothing records no undo step
2026-11-14 08:40:06 +07:00
BFlat bf3cf422e2 Merge pull request #7311 from dotCooCoo/fix/ai-graphs-keep-data
PDF/.ai import: graphs keep their data and settings when their records read whole
2026-11-14 08:39:57 +07:00
BFlat 99011cba0c Merge pull request #7288 from dotCooCoo/fix/task-bar-wraps-on-narrow-canvas
Contextual Task Bar: actions wrap onto more rows on a narrow canvas
2026-11-14 08:39:49 +07:00
BFlat 12117a48f9 Merge pull request #7324 from dotCooCoo/fix/edit-colors-no-change-undo
Edit Colors: no undo step when a recolor changes nothing
2026-11-14 08:39:40 +07:00
BFlat 3f7bbd4494 Merge pull request #7329 from dotCooCoo/fix/ruler-guides-nodes-one-pass
Guides: stripping and mapping ruler guides look at each child of a layer once
2026-11-14 08:39:32 +07:00
BFlat b0a2dfd448 Merge pull request #7309 from dotCooCoo/fix/de-message-rows
i18n: German has a row for 1,804 of the messages the untranslated report lists
2026-11-14 08:39:21 +07:00
BFlat 83ed754450 Merge pull request #7326 from dotCooCoo/fix/trace-jpeg-blocks
Image Trace: a JPEG's 8 x 8 blocks no longer trace as staircase steps
2026-11-14 08:39:13 +07:00
BFlat 6cc5dca69e Merge pull request #7315 from dotCooCoo/fix/it-message-rows
i18n: Italian translates 1,802 more status and error messages
2026-11-14 08:39:04 +07:00
BFlat c028cf6ab1 Merge pull request #7332 from dotCooCoo/fix/type-outlines-keep-appearance
Type: Create Outlines keeps the type object's own fills and strokes
2026-11-14 08:38:56 +07:00