Commit Graph
7722 Commits
Author SHA1 Message Date
dotCooCoo 442ae20e14 SVG: made-up ids skip every id the file names
An id the importer writes into an element no longer matches a style sheet's
#id selector or a <use> link that no element matched before. The ids are
read from the decoded attribute values and text of the file, once.
2026-11-02 03:22:10 -08:00
Rahul Ranjanandrahul05ranjan 2a51404e74 i18n(ru): translate the 130 strings the report listed as missing
The Russian catalog covered 6,126 of the 6,256 interface strings: the
workspace names (Essentials, Painting, Typography…), their Reset
entries, the artboard and dimension annotations, the PDF and export
preset names, the library panel sentences and several control-channel
messages still fell back to English.

Adds the 130 missing entries in the catalog's TSV format with the
Illustrator-style vocabulary the catalog already uses (монтажная
область, выносные линии, плашечные цвета, трассировка). After this the
report lists nothing missing for ru.

Co-authored-by: rahul05ranjan <11793455+rahul05ranjan@users.noreply.github.com>
2026-11-02 11:17:49 +00:00
dotCooCoo 7c7a127ec8 SVG: a thin ellipse far from the origin imports with standard handles
An ellipse whose radius is smaller than the point tolerance at its coordinates, but at least two
f32 steps, now imports as the four-anchor ellipse instead of usvg's curves with rounded handles.
2026-11-02 03:09:08 -08:00
dotCooCoo b4d3ae41bf SVG: made-up ids skip the file's taken ids once
Each id made up on import starts where the last one stopped instead of at
the number of ids made so far, so a file that already holds many of the
made-up ids does not make every new id try them all again. The ids made
up are the same.
2026-11-02 03:04:04 -08:00
dotCooCoo 85b6c2a5eb SVG: ids made up on import never repeat an id in the file
The import gives an element an id when it needs to find it again in
usvg's tree (links, symbol uses, events, data attributes, and now
circles and ellipses). A made-up id could repeat one the file already
had, such as vectorcraft-id-0, so a <use> or paint reference to that
element showed the other one. Made-up ids now skip every id in the file.

Circles and ellipses in a file whose style sheet has an [id selector get
no made-up id and keep usvg's curves, so the selector matches the same
elements as before.
2026-11-02 02:59:51 -08:00
dotCooCoo 820a750310 SVG: a small circle far from the origin imports as a four-anchor ellipse
The tolerance that compares the points usvg makes of a <circle> or
<ellipse> grew with the center's distance from the origin, so a circle
of radius 400 at x 40,000,000 fell back to eight anchors. The tolerance
is now a few f32 steps at the size of the coordinates, and the on-ellipse
check allows the same steps relative to the smaller radius.
2026-11-02 02:53:34 -08:00
dotCooCoo 60e1600caa SVG: circles and ellipses import as four-anchor ellipses
usvg turns each <circle> and <ellipse> into arcs and then into a number
of cubics that depends on f32 rounding: an ellipse that export wrote as
<ellipse> could come back with eight anchors instead of the four it was
written from. The renderer flattens the two outlines differently, so a
round trip of a flat filled ellipse redrew 158 edge pixels by up to 43
levels, and prop_svg::plain_art_survives_visually failed on main.

Import now records the ids of <circle> and <ellipse> elements in the
prepass and rebuilds each as the ellipse VectorCraft draws: four smooth
anchors on the axes, starting at the right as SVG defines, with handles
KAPPA of the radii long, then transformed as before.

Tests: prop_svg::filled_ellipse_on_the_artboard_edge_survives_visually
(the failing case) and basic_shapes::circles_and_ellipses_import_as_the_ellipse_drawn
fail without the change.
2026-11-02 02:49:36 -08:00
dotCooCoo c5bfa08663 Merge branch 'main' into feat/global-edit-shift-exclude 2026-11-02 02:17:18 -08:00
dotCooCoo a5c0153596 Global Edit: a Shift-drag from a highlighted match snaps from its first move
The snap targets of a Shift-drag that starts on a highlighted Global Edit
match are gathered when the drag begins, for the selection with the match
added, before the first preview moves it. The first preview is now snapped
to the grid or to points, and later previews snap from the original
position.
2026-11-02 02:15:14 -08:00
BFlat 4ee0ef231a Merge pull request #5139 from dotCooCoo/fix/ai-os10-distort
.ai import: type keeps its Distort & Transform effects live
2026-11-02 16:54:41 +07:00
BFlat 04f5e6455d Merge pull request #5156 from dotCooCoo/fix/ai-os18-d
.ai import: open the variable library and data sets from the editing data
2026-11-02 16:54:26 +07:00
BFlat 942a29d9cb Merge pull request #5231 from dotCooCoo/feat/pixar-pxr-open
File formats: Pixar (.pxr) images open and place
2026-11-02 16:54:08 +07:00
BFlat d439a9f6e2 Merge pull request #5232 from dotCooCoo/fix/envelope-appearance-transform-options
Envelope: Distort Appearance keeps a Transform effect's Scale Strokes & Effects and Transform Patterns
2026-11-02 16:53:52 +07:00
BFlat f56b8ae578 Merge pull request #5230 from Hassan1305/fix-5159-cmdv-image
Fix #5159: ⌘V from the macOS menu bar pastes a picture another app copied
2026-11-02 16:53:34 +07:00
dotCooCoo 023b5eedec Docs: a Shift-drag from a Global Edit match selects and moves it 2026-11-02 01:51:38 -08:00
dotCooCoo c88d88548c Global Edit: a Shift-drag from a highlighted match selects it and moves it
A Shift-press on a highlighted object of the Global Edit waits for the release
to leave it out of the edit. A drag from it now selects it when the drag starts
and moves it with the selection, as a Shift-drag from an unselected object did.
The snap targets are gathered after the object joins the selection.
2026-11-02 01:41:48 -08:00
dotCooCoo 1cd5bc4016 Global Edit: a Shift-click on a match inside a selected group deselects the group
A match that sits inside a selected object is no longer highlighted, and a
Shift-click on it with the Selection tool deselects that object as before
instead of leaving the match out of the Global Edit.
2026-11-02 01:28:57 -08:00
dotCooCoo b664216a2a .ai import: type keeps its Distort & Transform effects live
Squashed from #5139 onto main.
2026-11-02 16:19:59 +07:00
dotCooCoo 8ab68e4223 .ai import: open the variable library and data sets from the editing data
Squashed from #5156 onto main.
2026-11-02 16:19:19 +07:00
dotCooCoo 952446253f File formats: Pixar (.pxr) images open and place
Squashed from #5231 onto main.
2026-11-02 16:18:48 +07:00
dotCooCoo 9aac3ca888 Envelope: Distort Appearance keeps a Transform effect's Scale Strokes & Effects and Transform Patterns
With Envelope Options > Distort Appearance on, a path whose Transform
effect has Scale Strokes & Effects or Transform Patterns on, or copies it
with a gradient, was baked with the effect as geometry only: every copy
kept the original's stroke weight, dashes and pattern placement before
the envelope bent it. bake_appearance now makes such a path into the
per-copy art that drawing, export and Expand Appearance already use, and
bakes each copy's strokes into filled outlines from there.
2026-11-02 16:18:15 +07:00
HassanKhanandClaude Opus 5.5 b6f90d42fb Fix #5159: ⌘V from the macOS menu bar pastes a picture another app copied
The menu bar takes ⌘V's key-down as Edit › Paste's key equivalent, and
`native_menu::key_events` turns it back into egui input. With text on the
clipboard that was a Paste event; with only a picture (a screenshot) it
was nothing, leaving the paste to the window's own key-up. egui's window
integration only releases a key whose press it saw, so that release never
came and ⌘V pasted nothing, while Edit › Paste and ⌘V with the menu open
worked.

`key_events` now ends ⌘V with the key's release, as it already did for
⌘X and ⌘C: without a Paste event that release is the picture paste
`PasteChord` looks for, and after one it ends that paste so the next
picture paste still fires.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 16:18:13 +07:00
dotCooCoo 205e5b3e8b Global Edit: a Shift-click on a highlighted match leaves it out of the edit
While Global Edit is on, a Shift-click (not a Shift-drag) with the
Selection tool on a highlighted match, or on an object inside a matched
group, leaves that match out: it is no longer highlighted and later
edits leave it as it is. The object the edit started from stays in, and
Global Edit ends when fewer than two matches are left. Leaving a match
out is not an undo step.

- New command `select.globalEditExclude {id}` returns `{active, count,
  ids}`; the Selection tool calls it on the release of a Shift-click.
- `ToolContext::global_edit` gives the tools the Global Edit's objects.
- Label and messages in the i18n catalogs; docs/mcp.md,
  docs/ui-parity.md and docs/target-app-parity.md updated.

Source: https://helpx.adobe.com/ph_fil/illustrator/how-to/global-editing-sensei.html
2026-11-02 01:06:40 -08:00
BFlat 683abdb2d6 Merge pull request #5080 from dotCooCoo/fix/issue-3118
Fix #3118: PDF export writes CMYK inks, gray and spot tints as the document holds them
2026-11-02 16:05:58 +07:00
BFlat 45eaeb258c Merge pull request #5226 from dotCooCoo/feat/compound-shape-blend-envelope-members
Pathfinder: blends, envelopes and warped objects can be compound shape members
2026-11-02 16:05:44 +07:00
BFlat e607294cb4 Merge pull request #5079 from dotCooCoo/feat/symbol-nine-slice-scaling
Symbols: a scaled instance of a symbol with 9-slice guides keeps its corners and edges unstretched
2026-11-02 16:05:26 +07:00
BFlat fafac93f4d Merge pull request #5221 from dotCooCoo/fix/transform-effect-item-options
Effects: a Transform effect on a fill or stroke honors Scale Strokes & Effects and Transform Patterns
2026-11-02 16:05:07 +07:00
BFlat 1df7337599 Merge pull request #5118 from dotCooCoo/fix/vars-p1
Variables: art on a locked artboard is not bound or rewritten by a data set
2026-11-02 16:04:49 +07:00
BFlat 846c2e6de9 Merge pull request #5224 from dotCooCoo/feat/select-same-link-block-series
Select: Same › Link Block Series selects every frame of a text thread
2026-11-02 16:04:33 +07:00
BFlat 37147bb029 Merge pull request #5223 from dotCooCoo/feat/raster-extension-aliases
File formats: .dib and .rle bitmaps, .pdd Photoshop files and .pns PNGs open and place
2026-11-02 16:04:15 +07:00
dotCooCoo b30f7ad34c Fix #3118: PDF export writes CMYK inks, gray and spot tints as the document holds them
Squashed from #5080 onto main.
2026-11-02 15:22:38 +07:00
dotCooCoo d324440afb Pathfinder: blends, envelopes and warped objects can be compound shape members
Squashed from #5226 onto main.
2026-11-02 15:22:32 +07:00
dotCooCoo 83f2bfe9d6 Symbols: a scaled instance of a symbol with 9-slice guides keeps its corners and edges unstretched
Squashed from #5079 onto main.
2026-11-02 15:22:07 +07:00
dotCooCoo ae23859002 Effects: later effects on a fill's or stroke's own Transform apply to all its copies as one piece
The geometry effects after a fill's or stroke's own Transform effect with
Scale Strokes & Effects or Transform Patterns now take the bounds of the
transformed path and all its copies as their reference box, as an
object's own effects do. A later Rotate turns the copies about their
combined center instead of turning each copy about its own, and a later
Offset Path or plain Transform applies to the paths themselves. Each copy
keeps its own scaled distances.

Part of #885
2026-11-02 15:22:00 +07:00
dotCooCoo eb92a1e53a Effects: a fill's or stroke's own Transform copies leave room in the effect budget for the pieces painted after them
transform_item_leaf now holds back the leaf's geometry for each plain or transformed piece that follows a transformed fill or stroke, so the copies of an earlier item no longer use up the budget that a later fill or stroke still needs. The nested pass over a transformed piece keeps to the same reduced limit.
2026-11-02 15:22:00 +07:00
dotCooCoo a1b8da43de Effects: plain fills and strokes beside a fill's or stroke's own Transform count toward the effect budget
Each fill or stroke without such a Transform effect is drawn on the object's geometry again, so its cost now counts toward the budget that limits the Transform effect's copies. The object's own geometry is no longer counted a second time next to the pieces that replace it. The Transform effect options entry in docs/target-app-parity.md links the current help pages.

Part of #885
2026-11-02 15:22:00 +07:00
dotCooCoo 3e77f65c7f Effects: a Transform effect on a fill or stroke honors Scale Strokes & Effects and Transform Patterns
A Transform effect in a fill's or stroke's own effect list now applies its
Scale Strokes & Effects and Transform Patterns options as the same effect on
the object does: the stroke's weight and dashes, the distances of the fill's
or stroke's later effects and its pattern follow the transformation, each
copy once more than the last, and with Transform Objects off the geometry
stays and the options apply once. The fill or stroke becomes an object of
its own in the art the canvas, export and Expand Appearance draw, and Use
Preview Bounds measures that art too (also for the object-level options).

Part of #885
2026-11-02 15:22:00 +07:00
dotCooCoo e68bf6af55 Variables: art on a locked artboard is not bound or rewritten by a data set
Squashed from #5118 onto main.
2026-11-02 15:21:58 +07:00
dotCooCoo 30dd4fe8f5 Select: Link Block Series checks the selection in linear time
The type objects in the selection are deduplicated with a set, each frame's
thread is looked up in a map built once, the locked artboards are measured
once per call, and the menu check stops at the first selected type object.
2026-11-02 15:21:51 +07:00
dotCooCoo 405cc83cae Select: Link Block Series ignores selected type that Select All cannot reach
Type selected by id on a hidden, locked or template layer, or outside
the isolated group, no longer counts as selected type: the command stays
off and does not select that frame's thread. The check reads the
object's ancestry, so the Select menu does not walk the whole document.
2026-11-02 15:21:51 +07:00
dotCooCoo 012a50815f Select: Link Block Series skips hidden and locked type in selected groups
Select › Same › Link Block Series no longer counts hidden or locked type
inside a selected group, or type inside a hidden or locked object there,
as selected. A group that holds only such type leaves the command off, and
the command does not select the other frames of that type's thread.
2026-11-02 15:21:51 +07:00
dotCooCoo 67032aece6 Select: Same › Link Block Series selects every frame of a text thread
Select › Same › Link Block Series (select.same.linkBlockSeries) selects every
frame of the threads that the selected type objects, and the type inside
selected groups, are in, in thread order. Type in no thread selects itself,
other selected objects are left out, and with frames of several threads
selected it selects all of them. Hidden, locked and out-of-isolation frames
are left out, Reselect repeats it, and it records no undo step. The item is
off while no type is selected.

Menu row in every catalog, docs/mcp.md and a docs/target-app-parity.md line.
2026-11-02 15:21:50 +07:00
dotCooCoo b5c91ece24 File formats: .dib and .rle bitmaps, .pdd Photoshop files and .pns PNGs open and place
File > Open and File > Place read BMP files named .dib or .rle (run-length
encoded bitmaps included), Photoshop files named .pdd and PNG files named
.pns, in any letter case. The Open and Place dialogs list them in "All
readable files", "All placeable files" and their format's own filter, and
Glass's Load Texture lists them too. Linked files with these names update
and relink, the Links panel shows their format, and Edit Original opens
them.

The extensions are read-only: exports still write .bmp, .psd and .png, and
an export to a path with one of the new extensions is refused as before.
The desktop packaging does not associate them with the app.
2026-11-02 15:21:48 +07:00
BFlat 5198b7084a Merge pull request #5078 from mockydevs/fix/repeat-edit-text-5054
Fix #5054: a double-click on a repeat isolates it to edit its source
2026-11-02 14:59:56 +07:00
BFlat ef5121c5df Merge pull request #5154 from mockydevs/fix/placed-bitmap-test-5152
Fix #5152: placed-document bitmap test no longer races its worker
2026-11-02 14:59:44 +07:00
BFlat f8fe21b180 Merge pull request #5107 from TheGalitube/fix/h7830-dxf-unicode-escapes-drop-supplem
Decode DXF surrogate pairs
2026-11-02 14:59:31 +07:00
BFlat be6433f799 Merge pull request #5075 from Prin-Ing/fix/h168-svg-export-with-metadata-on-writ
Filter invalid XML characters from SVG Dublin Core metadata
2026-11-02 14:59:15 +07:00
BFlat 86e7f2f342 Merge pull request #4324 from nrq6993-a11y/stream/vc-feat3-g4-mixed-type-orientation
G4: Type orientation menu unchecked for mixed vertical/horizontal selection
2026-11-02 14:59:02 +07:00
BFlat 6dcd0045b0 Merge pull request #5222 from ruchirguitar/fix/5218-artboard-navigation-commands
Fix #5218: the artboard navigator's buttons are commands Keyboard Shortcuts lists
2026-11-02 14:58:43 +07:00
BFlat 429cf5a7c5 Merge pull request #5090 from mockydevs/feat/corner-kind-arrows-2898
Fix #2898: Up and Down change the corner kind while dragging a widget
2026-11-02 14:58:27 +07:00