Commit Graph
7420 Commits
Author SHA1 Message Date
dotCooCoo 01bc69cc80 .ai import: placed EPS files in the version 7 form are read
Squashed from #5187 onto main.
2026-11-02 14:32:56 +07:00
dotCooCoo 2a41c74690 .ai import: a group still open at the end of the art is an error
A group (`u`), clipping group (`q`) or compound path (`*u`) opened after
the last layer and never closed was accepted, and the art inside it was
dropped without a message. The reader now stops with "it ends inside a
group or compound path", as it already does for data that ends inside a
layer. Pattern and symbol definitions, which are read inside a group of
their own, are not affected.
2026-11-02 14:32:56 +07:00
dotCooCoo b9f4ea29f7 Actions: Save Actions… and Load Actions… save a set to a file and load it back
Squashed from #5192 onto main.
2026-11-02 14:32:55 +07:00
dotCooCoo 9c120c735e Keyboard Shortcuts: commands a key cannot run without a value are not listed
Edit > Keyboard Shortcuts listed commands whose params are all optional
but that do nothing or fail when a key runs them with none, such as
Transparency (transparency.set) and Opacity Mask Options
(transparency.setOpacityMask). These are now left out while they have
no shortcut, along with Align and Distribute, Delete Swatch, Move
Swatch, Spot Options, Adjust Color Balance, the library and data set
loaders, stroke.set, layer.setProps and menu queries that no menu item
runs. A key saved for one of them before keeps it listed so it can be
cleared.

A shortcut for a command whose menu bar items all give it the same
params now runs what a click on that item runs, so Clean Up..., Print
Ink Fixes... and Find and Replace... open their dialogs.
2026-11-02 14:32:55 +07:00
dotCooCoo 82806d1441 Fonts: Find Font and Replace Missing Fonts reach the type in symbols
Exports warn about type in a symbol's art that is set in a missing
font and point to Find Font, but Find Font and Replace Missing Fonts
only looked at the type on the layers.

- text.fonts lists the fonts of the type in the document's symbols too;
  with selectionOnly, of the symbols the selected instances show.
- select.font (Find) also selects the instances of the symbols whose
  art uses the font in type that is not hidden or locked.
- text.replaceFont changes that type in the symbols in scope, so every
  instance follows. Type hidden or locked in a symbol's art, and the
  type of symbols that only a selected hidden or locked instance shows,
  keeps its font and is counted in skipped.
- addon.cleanup.replaceFonts replaces missing fonts in symbols' type.

While a symbol is edited, its type is taken from the editing layer
only, so it is counted and changed once.
2026-11-02 14:32:55 +07:00
dotCooCoo 0895eccfe1 Type: right-to-left manual kerning moves a rotated character along the line
Right-to-left manual kerning was added to the glyph's offset, which
Character Rotation turns, so a rotated character with kerning moved
across the line (up at 90 degrees) instead of away from the next
character in reading order. The shift is now applied to the pen
position along the baseline, outside the rotation, and the rotation
turns the glyph about that moved pen position.
2026-11-02 14:32:54 +07:00
dotCooCoo 8346f052e9 Type: manual kerning in right-to-left text spaces the pair it is set on
A manual kerning value on a character in right-to-left text changed the
space between it and the character before it in reading order, under
both Auto and Optical kerning. The shaped glyphs of a right-to-left
cluster now also move right by the value, so the space its advance
gains is at its left, between it and the next character in reading
order. Left-to-right text and tracking are unchanged.

Optical kerning no longer takes the left glyph's manual value off the
advance it measures, since right to left the value is in that glyph's
offset as well.
2026-11-02 14:32:54 +07:00
bflatastic 188754f68e Tests: the listed Shadow style writes every Drop Shadow setting 2026-11-02 14:32:54 +07:00
bflatastic 83daab708d .ai import: graphic styles scale with a document drawn on its page 2026-11-02 14:32:54 +07:00
dotCooCoo 405372555d .ai import: the document's graphic styles open in the panel with their objects linked
Squashed from #5155 onto main.
2026-11-02 14:32:53 +07:00
dotCooCoo 0e38796573 .ai import: placed files are found by the folder they keep relative to the document
Squashed from #5176 onto main.
2026-11-02 14:32:53 +07:00
dotCooCoo 56f6128f94 .ai import: a line width of 0 draws as a hairline
Squashed from #5174 onto main.
2026-11-02 14:32:53 +07:00
bflatastic dc363ec356 Tests: Convert to Shape beside Offset Path is a style any object takes 2026-11-02 14:32:53 +07:00
dotCooCoo dbb04905e0 .ai import: Offset Path, Outline Object and Outline Stroke open live
Squashed from #5148 onto main.
2026-11-02 14:32:52 +07:00
dotCooCoo e8cd6c173a Variables: Save Variable Library… writes the variables and data sets as an XML library
Squashed from #5147 onto main.
2026-11-02 14:32:52 +07:00
dotCooCoo 9031906abd Actions: deleting sets moves the selected action with its set
`ui.actionSet.delete` now moves the panel's selected action down with its
set, and clears it when its set is deleted. Before, the stored set and
action indexes stayed as they were, so a set made later at the deleted
set's index, and an action recorded into it, showed as selected, and
Action Options… renamed that action.
2026-11-02 14:32:51 +07:00
dotCooCoo b2c62c398e Actions: the panel menu reads the selected action only in the current set
The panel menu read the stored (set, action) pair without checking that
its set is still the current one, as the panel and Delete Selection do.
After `ui.actionSet.delete` removed a set above it, the pair pointed at
another set's action, and Action Options…, Batch… and Play Current
Selection acted on that action. They are now off until an action of the
current set is selected.
2026-11-02 14:32:51 +07:00
dotCooCoo 0212c2b00e Actions: Action Options and Set Options refuse a field that is not an index
The dialog's fields choose what OK does, as they choose its heading. A
`set` or `action` field that `ui.dialog.set` changed to null or to an
index past the last set or action is now an error: OK renames no set or
action, adds no set, and the dialog stays open. Before, an Action Options
dialog whose `action` was null renamed the set instead.
2026-11-02 14:32:51 +07:00
dotCooCoo 642df312b3 Actions: the panel menu's Action Options… renames the selected action
Action Options… opens the New Set and Set Options dialog, headed Action
Options, with the selected action's name; OK renames the action and keeps
its steps. The new command ui.action.rename {set, action, name} does the
rename and refuses an index past the last set or action or an empty name.

Part of #1629.
2026-11-02 14:32:50 +07:00
dotCooCoo 90179904d8 Actions: the saved current set follows its set when windows merge
When two windows save the preferences, the current set's index and the
list of sets can come from different windows. The index now points at
the same set in the merged list, found by its contents or its name, and
no set is current when the merge cannot tell which set it was. Recording
into, renaming or deleting the current set, or deleting a set before it,
does not override a set the other window made current.
2026-11-02 14:32:50 +07:00
dotCooCoo f5da917b37 Actions: the current set is kept after a restart
The Actions panel did not save which set was current, so after a restart
Begin Recording put the new action into the first set (Default Actions)
instead of the set the user had picked. The current set is now saved
with the UI preferences as an index into the saved sets; a value that is
not an index, or is past the last set, leaves no set current.

With no set current, Begin Recording records into the first set as
before, and now makes that set current so the panel shows where the
recording goes.
2026-11-02 14:32:50 +07:00
dotCooCoo 0be7609bf7 Tabs: Above Text checks the place below text against the window's top
The place below the text was taken even when the text was panned above
the canvas, which put the panel above the main window. It is now taken
only when it is at or below the window's top. A docked Tabs panel is
measured at the 360-point height it floats at, not 240, so it is placed
below the text only when it fits there.
2026-11-02 14:32:49 +07:00
dotCooCoo 442430ff12 Tabs: Above Text puts the panel below text near the window's top
With no room above the text, the panel went to the top of the main
window's content and could cover the text. It now goes just below the
text when it fits there in the canvas, and at the window's top only when
it does not.
2026-11-02 14:32:49 +07:00
dotCooCoo 48e2bc6508 Tabs: Above Text keeps the panel's bar inside the window
With text near the top of the window, Position Panel Above Text put the
panel, and its OS window, above the main window's content and could put
the bar above every screen. The panel now goes no higher than the top of
the main window's content.
2026-11-02 14:32:49 +07:00
dotCooCoo d8394d5d87 Fix #4995: Above Text moves a Tabs panel that already floats
Position Panel Above Text moved a floating Tabs panel only in the layout's
in-window rect. On desktop builds a floating panel is an OS window, which
moves only when its desktop rect changes, so the panel stayed where it
was and the layout followed it back on the next frame. A docked panel
floated above the text as expected.

place_floating now also sets the window's desktop rect, from the main
window's content origin, when the panel's window already has one.
2026-11-02 14:32:49 +07:00
dotCooCoo 6be88a24b4 Fix #785: commands refuse an id that isn't an object id instead of using the selection
Commands whose `id` or `ids` the shared check in Session::execute does not
read still parsed them with id_param/ids_param, which drop anything that is
not a non-negative integer, and then acted on the selection or the current
layer. `object.blend.make {"ids": 3}` blended the selection,
`object.envelope.makeWithWarp {"ids": [2, "x"]}` warped the selection,
`graph.setData {"id": "2"}` changed the selected graph and
`layer.newSublayer {"parent": "2"}` added a sublayer to the current layer.

- cmd::named_ids and cmd::named_id read `ids`/`id` as targets does: a value
  that is not an object id, or an unresolved step reference, is an error.
- The symbol and brush, Live Paint, Shape Builder and Image Trace, blend,
  envelope and mesh, perspective, Liquify, Puppet Warp and graph helpers use
  them in place of the lenient readers.
- layer.clippingMask.toggle checks `id`, and layer.newSublayer checks
  `parent`, with checked_id before falling back to the highlighted row or the
  current layer.
2026-11-02 14:32:49 +07:00
Brandon Thomas cfb30d8139 Merge pull request #5214 from dotCooCoo/feat/recolor-global-adjust
Recolor: the Global Adjust sliders change every color at once
2026-11-02 00:34:59 -05:00
Brandon Thomas 6daefef735 Merge pull request #5212 from dotCooCoo/feat/document-info-save-category
Document Info: Save writes the category the panel shows
2026-11-02 00:34:54 -05:00
Brandon Thomas c4a394c536 Merge pull request #5203 from dotCooCoo/fix/empty-text-clip-kept
Artwork Cleanup: Empty Text and Off-Artboard Art leave type that clips art
2026-11-02 00:34:49 -05:00
Brandon Thomas 9269cb7cf3 Merge pull request #5197 from dotCooCoo/fix/cleanup-leaves-hidden-locked-art
Artwork Cleanup: Simplify Anchors and Deep Ungroup leave hidden and locked art alone
2026-11-02 00:34:43 -05:00
Brandon Thomas a51391a7c3 Merge pull request #5195 from dotCooCoo/fix/release-moves
Canvas: a drag ends where its button went up
2026-11-02 00:34:37 -05:00
Brandon Thomas cb700213c6 Merge pull request #5191 from dotCooCoo/fix/issue-2181
Fix #2181: PDF layer forms get real boxes and lose their off-page marks
2026-11-02 00:34:31 -05:00
Brandon Thomas 3d59d874ac Merge pull request #5190 from dotCooCoo/fix/separations-gamut-count-plural
Separations Preview: Gamut Check counts colors in the singular and the plural
2026-11-02 00:34:26 -05:00
BFlat 278dfa0b64 Merge pull request #5117 from dotCooCoo/fix/ai-os22-g5
.ai import: multi-layer masks open as a clipping group in each layer
2026-11-02 12:32:45 +07:00
BFlat 71d4f43dea Merge pull request #5115 from dotCooCoo/fix/ai-os22-g4
.ai import: graphs open as their drawn art, with a note
2026-11-02 12:32:31 +07:00
BFlat 3754e305a3 Merge pull request #5102 from dotCooCoo/fix/ai-os20-settings
.ai import: artboard display options, raster effects settings and the header's author come in
2026-11-02 12:32:12 +07:00
BFlat f94baa5b82 Merge pull request #5122 from dotCooCoo/fix/ai-os22-g14
.ai import: anchors are smooth or corners by the case of their segment operators
2026-11-02 12:31:56 +07:00
BFlat 6e23642861 Merge pull request #5121 from dotCooCoo/fix/vars-p7
Variables: Edit Data Set's Name field renames the data set
2026-11-02 12:31:39 +07:00
BFlat 517f3e0f3e Merge pull request #5116 from dotCooCoo/fix/vars-p9
Variables: Import Data Sets reads CSV files that are not UTF-8 as Windows-1252
2026-11-02 12:31:29 +07:00
BFlat 16a8ba8a2f Merge pull request #5106 from dotCooCoo/fix/symbol-edit-mode-followups
Symbols: symbol editing mode keeps every instance in step, and its UI entry points are tested
2026-11-02 12:31:19 +07:00
BFlat 09a143bf0b Merge pull request #5094 from dotCooCoo/feat/char-style-options-advanced
Character Styles: Style Options sets scale, baseline shift, rotation and language
2026-11-02 12:31:02 +07:00
BFlat 42473c9aeb Merge pull request #5098 from dotCooCoo/feat/opentype-panel-position
OpenType: the panel's Position menu sets superscript, subscript, numerator or denominator glyphs
2026-11-02 12:30:46 +07:00
BFlat b1ff0dc237 Merge pull request #5101 from dotCooCoo/fix/kerning-optical-clears-manual
Type: choosing Optical kerning clears manual pair values, as Auto does
2026-11-02 12:30:29 +07:00
BFlat 15d88941f1 Merge pull request #5105 from dotCooCoo/fix/jp2-display-resolution-first
File formats: JPEG 2000 prefers the display resolution box over the capture box in either order
2026-11-02 12:30:18 +07:00
BFlat 780926bfac Merge pull request #5104 from dotCooCoo/fix/opacity-mask-editable-ids
Transparency: makeOpacityMask refuses objects in ids that cannot be edited
2026-11-02 12:30:05 +07:00
BFlat 28116b90e4 Merge pull request #5097 from dotCooCoo/fix/pattern-brush-original-restores
Brushes: Pattern Brush Options keeps Original after a swatch is chosen
2026-11-02 12:29:48 +07:00
BFlat 87f192a475 Merge pull request #5095 from dotCooCoo/fix/mesh-create-outside
Mesh: Create Gradient Mesh at a point outside the object keeps the path
2026-11-02 12:29:35 +07:00
BFlat e7feddedbc Merge pull request #5087 from dotCooCoo/fix/effect-move-reply
Appearance: effect.move reports the effect's index in the object whose row it names
2026-11-02 12:29:23 +07:00
BFlat 4491eb1c72 Merge pull request #5091 from dotCooCoo/fix/simplify-backdrop-tab
Accessibility: Tab no longer stops on the Simplify and Smooth sliders' backdrop
2026-11-02 12:29:09 +07:00
BFlat 2c00ed0780 Merge pull request #5093 from dotCooCoo/fix/screens-dotless-i
Export for Screens: a folder named with dotless ı is not merged into i
2026-11-02 12:28:54 +07:00