Commit Graph
1844 Commits
Author SHA1 Message Date
nevaremandClaude Opus 5.5 a7db76bdfb Properties: selected ruler guides show their position in a Transform section
With ruler guides selected on their own (a click on one), the
Properties panel showed the Document sections, so a guide's position
could be typed only in the Transform panel.

The panel now has a Guides heading and a Transform section with the
Transform panel's guide fields (#1597): X moves the vertical guides and
Y the horizontal ones, together. With art selected too, it shows the
art's sections as before.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EjfPR4a1jPek7r3nyFFNYv
2026-10-29 18:46:47 +07:00
bflatastic e962197260 Tests: put the Rearrange Artboards toggle test's comment back on it 2026-10-29 18:46:46 +07:00
Max MittelstädtandGPT-6-Luna 2b75c63431 Retain spacing when rearranging artboards
Fixes #4558

Co-Authored-By: GPT-6-Luna <noreply@openai.com>
2026-10-29 18:45:57 +07:00
bflatastic ef086103cc Tests: the pan-fill canvas test runs again when another test moves the placed-document clock 2026-10-29 16:27:12 +07:00
NetterSilverandClaude Haiku 5.5 c90cea9e19 Round stepper button steps like arrow-key steps
Fixes #4490

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 15:16:20 +07:00
dotCooCoo a4ca347692 Shaper: dragging a shape out of a Shaper Group's bounds takes it out of the group
Squashed from #4415 onto main.
2026-10-29 15:16:17 +07:00
dotCooCoo 6d66eaf3dc Object: Cmd/Ctrl+Alt+Shift+3 hides every unselected object
Squashed from #4418 onto main.
2026-10-29 15:16:05 +07:00
nevaremandClaude Opus 5.5 69d684ed36 Shapes: the size dialogs' link applies every change of its state
The link applied its state only when its button was clicked, so turning
it off and on again through `ui.dialog.set` kept the old proportions,
and the next dialog didn't open with the state set that way. A link
turned on at a side of zero also took new proportions on the next frame
once that side was a size again.

The dialog now keeps the link state it last applied and applies any
change from it, however it was made: turned on, the link keeps the
sizes the dialog shows then; turned off, it forgets them; either way
the next dialog opens with the new state. Nothing else recalculates the
proportions, so a link turned on at a side of zero stays unconstrained
until it is turned off and on again.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EjfPR4a1jPek7r3nyFFNYv
2026-10-29 14:36:42 +07:00
nevaremandClaude Opus 5.5 7d18b4481c Shapes: the Rectangle and Ellipse dialogs link Width and Height
A click with the Rectangle, Rounded Rectangle or Ellipse tool opens a
dialog with Width and Height. It now has a Constrain Width and Height
Proportions link beside the two rows, drawn like the Transform panel's:
while it is on, typing one side sets the other at the proportions the
shape had when the link was turned on. The next of these dialogs opens
with the link as the last one left it.

Width now comes before Height in these dialogs: the fields were listed
by name, so Height came first.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EjfPR4a1jPek7r3nyFFNYv
2026-10-29 14:36:42 +07:00
dotCooCoo e31e04e545 Part of #3137: Color Guide takes its base from colors chosen in Color, Swatches and the Color Picker
The Color Guide kept the base color it took when the panel first showed,
and only the base chip changed it. In a new document the current fill is
white, so every harmony and variation was white or gray until the base
chip was clicked with another current color.

A color chosen in the Color panel (spectrum, sliders, fields, chips and
Recent Colors), in the Swatches panel or a swatch library panel, or with
OK in the Color Picker for a fill or stroke now becomes the guide's base
color, and the guide shows its harmonies. A color applied from the guide
itself leaves the base as it is, and so does selecting artwork. The base
chip (Set base color to the current color) still makes the current color
the base. A new base clears the cells selected for Save Colors as
Swatches.

The base moves from egui's temporary memory to UiState::color_guide_base,
which is not saved, so the Color panel, the Swatches panels and the Color
Picker can set it.
2026-10-29 14:36:35 +07:00
dotCooCoo b9f9099d91 Flare: preview options and restore defaults with Alt or Option
Squashed from #4446 onto main.
2026-10-29 14:35:57 +07:00
bflatastic efc1501ac9 Path: Object › Path › Smooth smooths the selected paths with a slider and Auto-Smooth (#4115) 2026-10-29 13:51:51 +07:00
Don Omondi c6070f633e Support original-format EPS Save and Save As 2026-10-29 13:00:47 +07:00
dotCooCoo 95ce4d5cb4 Canvas: a pan or zoom-out fills the uncovered area with low-resolution art
Squashed from #4256 onto main.
2026-10-29 13:00:47 +07:00
krosk93 7a79935c10 i18n: add Catalan (ca) localization
Squashed from #4453 onto main.
2026-10-29 13:00:44 +07:00
Davit MatchakhelidzeandClaude Opus 5.5 a8006cfade i18n(ka): Georgian for the batch dialog, PDF presets, dimension options and swatch names
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YMTAbGNRxnMEzRvYnQGphF
2026-10-29 13:00:43 +07:00
Davit MatchakhelidzeandClaude Opus 5.5 7a04b41fcd i18n(ka): Georgian wording fixes for 10 rows
Bullets and Numbering typo (დანომრვა → დანომვრა); select/selected = მონიშვნა;
Path = ტრაექტორია; solid colours = მყარი ფერი; Tint = ტონირება; screenshot =
ეკრანის ანაბეჭდი; count-neutral Result(s); Include Objects On Canvas.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YMTAbGNRxnMEzRvYnQGphF
2026-10-29 13:00:43 +07:00
Kirill M 5ea6a0e544 i18n(ru): 363 rows the Russian catalog was missing
Rows the other catalogs already had: new-document presets, color
harmony rules and swatch names, arrowheads, the keyboard shortcut
editor, and the print, PDF and Save for Web options. The workspace
names, OpenType and the perspective grid presets stay in English as
MENU_KEEP_AS_IS requires. Written from the English meaning by a native
speaker.
2026-10-29 13:00:42 +07:00
Michael Holzheu 44ef4ab4bc Fix canvas pointer mapping under subpixel dock layouts
Squashed from #4292 onto main.
2026-10-29 13:00:42 +07:00
dotCooCoo ca137eb54d i18n: Enter Isolation Mode's errors show in the interface language
object.isolate's errors "type objects can't be isolated", "the object
is hidden or locked" and "missing id" had no row in any catalog, so the
status bar showed them in English in every language. The same was true
of layer.target's "the object is outside the isolated group", the other
isolation-mode error in the commands.

Each of the four messages now has an @msg row in every catalog that
translates all status and error messages and in Bulgarian, Danish,
Indonesian and Dutch. layer.target also gives "the object is hidden or
locked", and several other commands that take an id also give "missing
id", so the same rows translate those errors.

Docs: docs/target-app-parity.md.
2026-10-29 13:00:35 +07:00
dotCooCoo 6d97ffa700 Tests: tests that depend on wall-clock time or font loads pass on a loaded machine
On a machine busy with other builds, four tests each failed once and
passed when run again alone.

The two render tests that count the rasters a drag moves draw content
painted with a pattern or showing a symbol, whose raster key holds the
font generation. The fonts change even while a test holds
fonts_steady(): the first lookup by family name catalogs the installed
fonts, and resolving a cataloged family or a fallback character loads a
face. When that happened between the two frames of a drag, the count
was 0. The new with_fonts_unchanged runs a step up to 100 times, until
the generation is the same after a run as before it, and the two tests
take their frames from it. The second render test,
a_moved_group_draws_the_shadow_of_the_instance_art_in_it_while_interacting,
was not seen failing but has the same fault.

The screenshot test's allow_due moved the capture's due time but not
its 8 s wall-clock deadline, so on a slow run the reply was the timeout
error. allow_due now also sets the deadline to f64::MAX; the two timeout
tests set it in the past themselves.

The persistent control server test gave the server 2 s to wait for
each request, 120 ms to read a line and 150 ms to write a reply. It now
gives the line and the reply 1 s each and the wait 30 s. The handler
sleeps 1.25 s, longer than both budgets, so a deadline kept from the
first request still runs out.

The idle expiry test read until the server closed the connection after
its 150 ms idle budget, and the client gave up after 3 s, so a pause of
about 3 s in the server's thread failed it with TimedOut. Every test in
control_server/tests.rs that waits for the server to reply, to close a
connection or to return its slot now waits up to WAIT (20 s), and
line_timeouts() gives the wait for a request and the reply 30 s. The
budgets under test stay 120 and 150 ms (1 s in the persistent test).
2026-10-29 13:00:25 +07:00
dotCooCoo 1c4894b2f7 Brushes: Pattern Brush Options' OK leaves corner tiles that were not set
OK used to save None for a corner tile the dialog showed as None because
the brush had no art or source for it, so that corner stopped drawing the
other kind of corner's art once the brush got some. It also copied the
art a corner borrows from the other kind of corner when that corner kept
its art. Now OK saves a corner tile's choice only when it was set from its
menu or with `ui.dialog.set`, or when the art it borrows goes away.
2026-10-29 11:22:56 +07:00
dotCooCoo d4a30cc084 Brushes: Pattern Brush Options' corner tiles can be None or made from the side tile
Pattern Brush Options has a menu below the Outer Corner Tile and the Inner
Corner Tile. Each can be the brush's own corner art (Original), None, or one
of four tiles made from the side tile at each corner of the path:

- Auto-Centered stretches one side tile around the corner, centered on it.
- Auto-Between bends a side tile on each side into the corner, the two
  meeting on the corner's diagonal.
- Auto-Sliced lays a side tile on each side past the corner and masks it
  at the diagonal, so the two meet like a mitered frame.
- Auto-Overlap lays a side tile on each side past the corner, overlapping.

The tiles are straight at the corner and follow the path towards the side
tiles, so they meet a curve that runs into the corner. A side tile taller
than the corner can reach is stretched along until the two sides meet. On a
short path, a corner's tile is squeezed along so that it covers at most the
path up to an open path's end and half way to the next corner, and its two sides still meet on the
corner's diagonal.

The definition stores the choice as `outer_source` and `inner_source`
(`none`, `autoCentered`, `autoBetween`, `autoSliced`, `autoOverlap`), which
`brush.options` sets. Corner art wins over a source. A brush saved without
a source draws as before: a kind of corner without art takes the other
kind's art. None leaves that kind of corner empty.

Docs: docs/mcp.md, docs/target-app-parity.md.
2026-10-29 11:22:56 +07:00
bflatastic 1924ddd1dd Properties: one filter leaves out Lock and Isolate Group while they're off (keeps show() within the cognitive complexity lint #4299 added) 2026-10-29 11:22:51 +07:00
dotCooCoo dfe201dec3 Transparency: isolation mode and opacity mask editing can't be entered from each other
Enter Isolation Mode worked while an opacity mask was edited, and Edit
Opacity Mask and View Opacity Mask worked in isolation mode, so each
mode replaced the other's isolated art. In the reference app, isolation
mode can't be entered while a mask is edited, and mask editing can't be
entered in isolation mode.

object.isolate and perspective.editText, which shows type in isolation
mode, are now off while an opacity mask is edited, and a call returns
an error that ends "stop editing the opacity mask first". In isolation
mode transparency.editOpacityMask and transparency.viewOpacityMask are
off, and transparency.makeOpacityMask refuses one target, an object or
a layer, which it would take into mask editing; a call returns an error
that ends "exit isolation mode first". Make Opacity Mask with two
objects still masks one with the other. Pattern editing mode does not
count as isolation mode for these commands.

Object > Perspective > Edit Text, the canvas context menu and the
Transparency panel's menu and Make Mask button follow the commands'
enablement. A click or Alt-click on the mask thumbnail in isolation
mode shows the error and does not edit the mask. While a mask is
edited, the Contextual Task Bar leaves out Isolate, and the Properties
panel's Quick Actions leave out Isolate Group.

Docs: docs/mcp.md, docs/target-app-parity.md.
2026-10-29 11:20:08 +07:00
dotCooCoo e251bbf159 Contextual Task Bar: the Fill and Stroke chips show the proxies' paints
The chips drew the first selected object's fill and stroke. They now show
the paints the Fill and Stroke proxies show, a group's painted art
included, and a "?" when the selected objects' paints differ. A click on
either chip shows the Swatches panel through `window.panel.activate`, so
it also appears when the panel is floating, closed or in an expanded dock
column; an open flyout stays open. The progress doc describes the
reference app's bar in its own words.
2026-10-29 11:20:08 +07:00
dotCooCoo 93bbe36bc9 Contextual Task Bar: a Stroke chip beside Fill picks the stroke color
The task bar's Fill chip had no Stroke counterpart. A Stroke chip now sits
beside it, drawn as a ring with the selected object's stroke paint, as the
Control bar's Stroke chip is. A click on it brings the Stroke proxy forward
and opens the Swatches panel, as a click on the Fill chip does for the
Fill proxy. The chip is left out with the Artboard tool, as Fill is.

The bar's width estimate, which centers the bar under the selection, grows
by the chip's width. The drag test's first square moves 20 pt right so its
bar still starts inside the canvas.
2026-10-29 11:20:08 +07:00
dotCooCoo 02f2dd8c5a Object: Unlock All and Show All with Shift+Alt act only within the selected object's group
Squashed from #4439 onto main.
2026-10-29 11:18:38 +07:00
dotCooCoo a8c166a957 Selection tool: Escape cancels a move, scale, rotation, marquee or widget drag
Escape during a Selection tool move or Alt-drag copy, a bounding-box
scale or rotation, a marquee, or a drag of a corner widget, a pie widget
or the brackets of type on a path did nothing, and the release then
applied the drag. Only a ruler guide, mirror axis or grid repeat drag
and the loaded text took Escape.

Escape in any of these drags now cancels it, the way Direct Selection
cancels its drags: the art returns to its state at the press, an
Alt-drag leaves no copy, no undo step is added, and the release does
nothing.
Outside a drag Escape works as before.

Docs: docs/mcp.md, docs/target-app-parity.md.
2026-10-29 11:18:38 +07:00
dotCooCoo f87b8af62b Snap to Glyph: points land on glyph anchors and line up with x-height, character widths and angles
With View › Snap to Glyph and Smart Guides on, a point drawn near a single
line of live type now also lands on the anchor points of its glyphs and lines
up with its x-height (raised or lowered by Baseline Shift) and with the edges
of each character's advance width along the baseline (proximity guides). In
rotated type the baseline, x-height and proximity guides run at the type's
angle, and type of one glyph also has angular guides along the glyph's slanted
straight segments; a segment that Shift keeps to its angle slides onto them.
A paragraph shows glyph bounds only, so its baselines are no longer guides.

FontFace::x_height gives a face's x-height in font units.
2026-10-29 11:18:38 +07:00
dotCooCoo 25e8836af9 Tools: Escape cancels an Anchor Point, Mesh, Shape Builder or Measure drag
Escape did not cancel a drag with the Anchor Point, Mesh, Shape Builder
and Measure tools, or a Direct Selection drag of a mesh point, a corner
widget or the brackets of type on a path: the drag went on until the
mouse was released. Escape cancels every other Direct Selection drag
and a drag with the Free Transform, Rotate, Reflect, Scale, Shear and
Gradient tools.

Escape now cancels an Anchor Point drag, a Mesh tool drag of a mesh
point or handle, and a Direct Selection drag of a mesh point or handle,
a corner widget or the brackets of type on a path. The art goes back to
how the press found it, no undo step is added, and the rest of the drag
and the release send nothing. Escape during a Shape Builder drag ends
it, so the release merges and deletes nothing; the tool takes Escape
only during the drag. Escape during a Measure tool drag ends it and
brings back the measurement shown before the press. Escape after an
Anchor Point or Direct Selection press that has not moved yet drops the
press. Otherwise, outside a drag, Escape does what it did before.

Docs: docs/mcp.md, docs/target-app-parity.md.
2026-10-29 11:07:46 +07:00
dotCooCoo fea65ffb3d i18n: each catalog names leading with one term
In Turkish, Brazilian Portuguese, Indonesian, Bulgarian and Vietnamese
the Character panel's Leading field and the rows that name leading used
different words: Auto Leading in the Justification dialog, the Type
preferences' Size/Leading increment, and the Paragraph panel menu's
Top-to-Top and Bottom-to-Bottom Leading.
Turkish had four words, and its Leading field read "Lider", a leader.

Turkish now uses "Satır Aralığı", its Auto Leading word, in every
leading row, the Leading field included. In pt-br, id, bg and vi the
other rows now use the Leading field's word ("Entrelinhamento",
"Leading", "Междуредие", "Giãn dòng"). A new test checks that every
word of the Leading field appears in the four other rows of each
catalog.
2026-10-29 10:13:23 +07:00
el-j 813e30be69 i18n: fold Polish ł and additional Latin diacritics in name_sort_key 2026-10-29 10:13:23 +07:00
el-j ad3dac0031 Fix #4143: Window menu lists panel items alphabetically by localized name 2026-10-29 10:13:23 +07:00
dotCooCoo cf9087bb87 Keyboard Shortcuts: Go to Conflict is not offered for a row that leaves the list
When a recorded chord takes the shortcut from a command that needs a value, that command
leaves the list. The dialog now clears its Go to Conflict target as well as its recording
and selection.
2026-10-29 10:13:23 +07:00
dotCooCoo d5f77e18a8 Keyboard Shortcuts: a row that leaves the list stops recording
When Clear, Use Default, Reset to Defaults or another set takes the
shortcut from a command that needs a value, its row leaves the list. A
recording started on that row now stops and the row is no longer
selected, so the next key press does not give the hidden command a
shortcut or take one from another command.
2026-10-29 10:13:23 +07:00
dotCooCoo cd4511c548 Keyboard Shortcuts: an empty saved shortcut does not list a command that needs a value
A command that needs a value stayed listed when a saved or imported set held an empty shortcut
for it, showing no key. It is now listed only while its saved shortcut is not empty.
2026-10-29 10:13:23 +07:00
dotCooCoo 7b36442f41 Keyboard Shortcuts: Distribute Spacing stays listed, its axis is optional
object.distributeSpacing already spaces horizontally without an axis; its params doc now says so, so the editor keeps listing it.
2026-10-29 10:13:23 +07:00
dotCooCoo 610e4523e9 Keyboard Shortcuts: commands that need a value are not listed unless given a shortcut
Edit › Keyboard Shortcuts listed every engine command with a menu path,
whatever its params. A shortcut runs a command with no params, so a key
given to File › Document Setup › Units ran document.setUnits with {}
and failed with "unknown units".

The dialog and shortcuts.list now leave out a command with a menu path
and no default shortcut when no item of the menu bar runs it without
params, it opens no dialog when run without them, and its params doc
names a required field. This leaves out 38 commands, among them the
Graphic Styles, Swatches and character and paragraph style commands
that take a name. A command whose shortcut the user has changed is
still listed, where the key can be changed or cleared, and a saved key
still runs and conflicts as before. Every command with a default
shortcut stays listed.

Docs: docs/mcp.md, docs/target-app-parity.md.
2026-10-29 10:13:23 +07:00
dotCooCoo a6a850868c Object: Lock, Hide, Unlock All and Show All are off in isolation mode
The reference app disables its Lock, Hide and Show All menus in
isolation mode. In VectorCraft every item of Object › Lock and
Object › Hide, Unlock All and Show All worked there.

In isolation mode, object.lock, object.lock.above,
object.lock.otherLayers, object.hide, object.hide.above,
object.hide.otherLayers, object.unlockAll and object.showAll are now
off. Their menu items are greyed out, and a call returns an error
that ends "exit isolation mode first". The Contextual Task Bar's
Lock button is greyed out too, and the Properties panel's Quick
Actions leave out Lock. Pattern editing mode and opacity mask editing do not count as
isolation mode for these commands. The check is outside_isolation in
cmd.rs, with has_selection_outside_isolation beside it.

Docs: docs/mcp.md, docs/target-app-parity.md.
2026-10-29 10:12:16 +07:00
dotCooCoo 38bb903495 Distort tools: Escape cancels a Puppet Warp, perspective or Liquify drag
Escape did not cancel a drag with the Puppet Warp, Perspective Grid,
Perspective Selection and Liquify tools: the drag went on until the
mouse was released. Escape cancels a drag with the Direct Selection,
Gradient and Artboard tools.

Escape now cancels a Puppet Warp pin drag or turn, a Perspective Grid
handle or plane widget drag, a Perspective Selection move, resize or
plane widget drag, and a Liquify stroke. The art and the grid go back
to how they were when the drag began, the undo history does not
change, and the rest of the drag and the release send nothing. Puppet
Warp selects again the pins that were selected before the press.
During a Liquify Alt-drag that sizes the brush, Escape puts the brush
size back; the tool claims Escape only then. Escape during a
Perspective Selection press that has not moved past the drag threshold
ends the press, so moving on does not start a move. Otherwise, outside
a drag, Escape does what it did before.

Docs: docs/mcp.md, docs/target-app-parity.md.
2026-10-29 10:12:16 +07:00
dotCooCoo 5ed2fec4fd Text styles: the panel menu's Duplicate highlights the copy and Delete clears the highlight
Squashed from #4419 onto main.
2026-10-29 10:12:16 +07:00
dotCooCoo e28c08a8b8 Tabs: the position field's label is translated
The Tabs panel drew its X: and Y: label untranslated, so French showed
"X:" in place of its catalog's "X :" with a no-break space, and Chinese
showed an ASCII colon. The label now goes through the catalogs, and the
Polish and Vietnamese catalogs get their X: and Y: rows.
2026-10-29 10:12:16 +07:00
dotCooCoo 7f7067bcba Blob Brush: Tool Options set its Fidelity
Squashed from #4414 onto main.
2026-10-29 10:11:42 +07:00
dotCooCoo b6f916d211 Character and Paragraph Styles: a style dropped on New is copied, and one dropped on Delete is deleted
The Character Styles and Paragraph Styles panels took only clicks on
their rows. The reference app copies a style dragged onto Create New
Style and deletes a style dragged onto Delete.

A style row can now be dragged. Dropped on Create New Style, the style
is copied with charStyle.duplicate or paraStyle.duplicate, as the panel
menu's Duplicate does, and the panel highlights the copy. Dropped on
Delete, the style is deleted with charStyle.delete or paraStyle.delete,
as the Delete button deletes the highlighted style, and Delete accepts
a dragged style even when the highlighted one is Normal or none. Normal
is not deleted. Each button is outlined while a row it accepts is held
over it, and each drop is one undo step.

Docs: docs/target-app-parity.md.
2026-10-29 10:11:41 +07:00
dotCooCoo 16d679fde7 Layers: Cmd/Ctrl+Alt-click places a new layer below the current one and a new sublayer at the bottom
The reference app places a new layer below the selected layer with
Ctrl+Alt-click (Command+Option-click) on the New Layer button, and a
new sublayer at the bottom of the layer list with the same click on
the New Sublayer button. In VectorCraft that click opened Layer
Options, and New Layer and New Sublayer always added the layer above
the current layer and the sublayer on top of the layer's contents.

layer.new takes below, which adds the layer directly below the current
layer at its level, and layer.newSublayer takes bottom, which adds the
sublayer under the parent's contents. In a clipping layer the new
sublayer goes above the clipping path. Each is one undo step, and
below is refused together with top. A Cmd/Ctrl+Alt-click on the
Layers panel's New Layer and New Sublayer buttons runs them. A plain
click, an Alt-click and a Cmd/Ctrl-click work as before.

Docs: docs/mcp.md, docs/target-app-parity.md.
2026-10-29 10:10:59 +07:00
dotCooCoo 77b2391f7a i18n: Reset Tracking and Kerning check matches each term once
A Tracking term that is part of the Kerning term no longer counts as
present when only the Kerning term appears in the row.
2026-10-29 10:10:58 +07:00
dotCooCoo 946ed6f12d i18n: Character panel Kerning and Tracking terms agree in each catalog
In Brazilian Portuguese the Character panel's Kerning field was named
Entrelinhamento, the word the catalog uses for Leading, so the two
fields had the same name. In Danish, Turkish, Indonesian and Dutch the
Reset Tracking and Kerning command named tracking with a different word
from the Tracking field, and in Dutch, Bulgarian and Greek the Info
panel's type line did the same.

The pt-br Kerning field is now Kerning (0 = Automático). The reset row
in da, tr, id and nl and the Info panel row in nl, bg and el now use
the word of the catalog's Tracking field. A new test checks that the
three fields have different names in every catalog and that the reset
row and the Info panel row use the field words.
2026-10-29 10:10:58 +07:00
dotCooCoo 71a67601a5 Layers: Alt-click selects only on the drawn name, and in an isolated layer
An Alt-click right of a short layer name, inside the wider rename
target, no longer replaces the selection. The isolated layer's own row
now selects the art inside it (layer.selectAll), where it cleared the
selection before. The doc line says the click selects visible, unlocked
art and clears the selection on a hidden or locked layer.
2026-10-29 10:03:20 +07:00
dotCooCoo ec988442b5 Layers: Alt-click on a layer name selects the layer's art
The reference app selects all objects on a layer with an Alt-click
(Option-click) on the layer's name in the Layers panel. In VectorCraft
an Alt-click on a name did what a plain click does: it highlighted the
row and made the layer current, and the art stayed unselected.

An Alt-click on the name of a layer or sublayer now also selects its
visible, unlocked art, as the row's selection square does
(layer.selectAll), and the layer still becomes current
(layer.setCurrent). On a locked or hidden layer the click clears the
selection, as that row's selection square does. On a group or object
row, beside the name, and with Shift or Ctrl/Cmd held as well, the
click does what it did before.

Docs: docs/mcp.md, docs/target-app-parity.md.
2026-10-29 10:03:20 +07:00