In the Tabs panel, a stop dragged on the ruler with Ctrl held (Command on
macOS) moves every stop by the same distance, set in one text.tabs.set and
one undo step. The stops keep their order, alignment, leaders and Align On,
and the ruler draws them at their new positions during the drag.
Ctrl is read when the drag starts, as the Left Indent marker reads it. A drag
that would take the leftmost stop below 0 leaves it at 0, and one that would
take the rightmost past 100,000 pt leaves it at 100,000 pt, keeping the
spacing of the others. A Ctrl-drag released off the ruler deletes only the
dragged stop, as a plain drag does. A plain drag still moves one stop.
The Brazilian Portuguese catalog was marked complete under the tests, but 174 strings that the
German, French, Italian and Spanish catalogs already translate still fell back to English: smart
object and smart-filter editors, print presets and Japanese paper names, dimension lines and text,
the gutter, workspace names, swatch names and canvas messages.
Rows follow the catalog's vocabulary (dimension = cota, swatch = amostra, artboard = Mesa de
Trabalho, gutter = medianiz, line weight = espessura da linha) and are appended after the existing
entries; placeholders, ellipses and colons are unchanged. The parity doc records the new count
(6,126) with the commit it was measured on, following the rule in "How it is measured".
An open blend shows a <Spine> row below its key objects, where Release
leaves the spine. A click selects the blend (Shift/Cmd toggles it), so
Direct Selection edits the spine on the canvas; a locked blend's row
selects nothing, and the row is left out while searching or filtering.
EPS export wrote every gradient with a spot color stop in process
colors. A gradient of tints of one spot color and paper white is now
written in that ink's Separation space, at Level 2 and 3. At Level 3, a
gradient that mixes a spot color with CMYK or gray colors, or two spot
colors, is written in a DeviceN space of the process inks its stops use
and the spot inks, each spot ink with the CMYK equivalent its Separation
space has. An off-center midpoint is a stop with the inks halfway
between its two stops. Paper white is an exact white, whether or not
the stop is linked to a process swatch.
These gradients are still written in process colors, each with its own
warning: a mix with other inks at Level 2; a mix with RGB or Lab colors
in an RGB export (a CMYK export converts those stops to CMYK first); a
DeviceN space that would need more than 32 colorants or a spot ink named
Cyan, Magenta, Yellow, Black, All or None; and a Perceptual gradient.
The old warning for every spot gradient has been removed.
The header lists two or more spot colors with each %%+ line right after
the comment it continues: %%DocumentCustomColors and %%CMYKCustomColor
were interleaved, so a DSC reader took the second ink's name as part of
the first ink's %%CMYKCustomColor.
Cmd/Ctrl held with the Pen lends the last-used selection tool (Direct
Selection until one is chosen), which already moved anchors, straight
segments and curves of the path being drawn, one undo step each, and
handed the path back to the Pen.
With the Selection tool used last, the lent tool hit-tested the
bounding box even though the canvas hides it while anchors are selected
on their own, as the end anchor of a path being drawn is. Over the
path it showed a resize pointer, and the drag scaled the path by a
handle nobody could see: a flat path did nothing at all.
The Selection tool's handles now take the pointer only while the box is
shown (View > Show Bounding Box, no anchors selected on their own), so
the lent Selection tool moves the path being drawn.
Tests: select::tests::hidden_box_handles_take_no_press_while_anchors_are_selected,
tests::draw2::pen_cmd_drag_edits_anchors_and_segments_and_goes_on_drawing.
On a Wayland session Linux Display Server's default, Automatic, opened
the window on native Wayland. winit 0.30 doesn't bind the Wayland tablet
protocol, and KWin (since Plasma 6.3) and Mutter turn no tablet input
into pointer input, so the pen moved only the compositor's cursor and
the app got no motion or presses. Only X11 (XWayland) When a Pen Is
Attached, which users had to find and choose, sent the window through
XWayland, where the pen works as a mouse with its pressure.
Automatic now opens the window through XWayland when a pen is attached
as the app starts, as PhotoCraft does by default.
VECTORCRAFT_NATIVE_WAYLAND=1 keeps the window on Wayland, like
PhotoCraft's PHOTOCRAFT_NATIVE_WAYLAND. The X11 choice is unchanged.
- A radial gradient from a spot swatch to a CMYK color is written as a
DeviceN shading (ShadingType 3) of Yellow and the spot ink.
- A Lab spot color used as a flat fill and in a mixed gradient is
written as one Separation space with the Lab alternate, which the
DeviceN space names under /Colorants.
- docs/roadmap.md lists the gradients that still export without the
spot ink: mixed spot/process gradients in SVG and PDF gradients with
RGB or Lab stops. docs/target-app-parity.md also notes that a
Perceptual gradient is written to PDF as an image.
Filled rectangles are drawn on whole pixels, but the gradient chip is a
mesh, which was drawn at its exact position. At a fractional position or
display scale the Gradient button under the Fill/Stroke proxy sat up to
half a pixel off the Color and None buttons beside it. gradient_chip now
rounds its rect to pixels first, which also lines it up wherever else a
gradient chip sits next to a color chip.
A stored projection whose determinant is not finite is read back as the
same map divided by the largest magnitude in its w row, the scale the
overflow branch of conjugated already uses, so points that overflowed at
the stored scale draw: the identity with every entry 1e308 maps (2, 2)
to (2, 2). The overflow branch of inverse scales the map so that the
largest of the products its determinant sums is near 1, so a map with
large entries and a small w row, such as a scale by 1e305 with a move
by -3.9e307, is still inverted and read back.
The two overflow tests in persp_text.rs build their stored projections
with a w row of 1, so they still overflow after the read-back.
The backdrop behind a modal dialog took clicks with Sense::click(), which
egui makes focusable, so Tab stopped on it. It now senses clicks without
taking the keyboard focus.
The Tab tests now check that Tab reaches a known control in each region
instead of only that some widget took the focus: the title bar's three
caption buttons, a control inside each dialog, a Tools panel button and a
floating strip's Put back in the toolbar button, and the isolation bar's
back button. The dialog test also checks that Tab skips the backdrop.
The Feature areas row still listed mixed spot/process gradients as missing in PDF. It and the detailed row now name SVG, plus PDF gradients that mix a spot color with RGB or Lab stops, which are still written without the spot ink.
Homography::from_array accepted nine finite numbers only when det().abs()
was above 1e-15. With large entries the determinant can be inf - inf, so a
valid stored projection was rejected on reading and its type drew flat, or
it can overflow to inf, so a projection that cannot be inverted was
accepted.
When the determinant is not finite, inverse() now inverts a copy divided
by a power of two (largest entry between 0.5 and 1), and treats that copy
as not invertible when its determinant is at most 1e-15 times the largest
of the six products it sums. from_array and the overflow path of
conjugated accept such a map only when that inverse exists. Maps with a
finite determinant are judged as before.
Follows #4912.
A linear or radial gradient whose stops mix a spot color with process
colors, or two spot colors, was written in process colors with a
warning. It is now written as a DeviceN shading of the process inks
its stops use and its spot inks, so each spot ink separates onto its
own plate. An off-center midpoint becomes a stop with the inks halfway
between its two stops. A gradient that mixes a spot color with RGB or
Lab colors is still written without the spot ink, with a warning that
says so.
The reply's index came from the last object the effect was added to, while
its item came from the first selected object (or the first target for an
explicit item). When those objects held different numbers of effects on the
row, the reply named no effect of that object. The index is now read from
that object's effect list.
Each action set now has an id of its own, assigned when the set is made
(Default Actions, New Set, Begin Recording on an empty panel) and when it
is loaded from the saved preferences. The id is not saved.
The question Delete Selection asks about sets holds their ids, and
ui.actionSet.delete takes ids in place of all: OK deletes the asked sets
wherever they are now, and deletes nothing when one of them no longer
exists. Before, the question matched sets by the list of names, so with
two sets of the same name, or a new set made under the asked one's name
while the question was open, OK could delete a set it did not ask about.
ui.actionSet.delete runs while a dialog is open, from the control channel or MCP. An open
Set Options or Batch dialog for a deleted set now closes, and one for a later set has its set
index lowered so that OK renames or batches the same set.
The Delete Selection question now carries the names of all sets as they
were when it asked (`all`). `ui.actionSet.delete` deletes nothing unless
the panel's sets still have exactly those names in that order, so a set
with a repeated name that moves into the asked index is not deleted.
Shift-click on a set's name selects the sets from the current one to it
also while an action in the current set is selected.
The question Delete Selection asks now passes the names of the sets it
names along with their indexes. ui.actionSet.delete deletes nothing and
returns an error when the set at an index no longer has that name, so a
set deleted or added above them while the question is open does not
make OK delete a different set. An index above the platform's usize
range is refused as "no such action set" instead of wrapping on 32-bit
builds.
Delete Selection in the Actions panel (the bottom bar's trash and the
panel menu's new Delete) now deletes the selected action set with its
actions and keeps the other sets, after asking. A selected action is
still deleted at once. Shift-click on a set's name selects the sets from
the current one to it, and one question deletes them together. Default
Actions and the last set can be deleted; New Set still works on the
empty panel.
ui.actionSet.delete {sets?: [index]} does the deletion: an index past
the last set is an error before anything is deleted, a recording into a
deleted set stops, and a recording into a later set stays in its set.
Undo does not restore a deleted set.
Recolor Artwork opened with Preserve White and Black on and Grays off
every time, so clearing them had to be repeated on each use. OK on art
now keeps the three checkboxes in the UI state (recolor_preserve, saved
with the other remembered dialog fields), and the dialog opens with
them. Cancel leaves them as the last OK set them.
tool.setOption kept any finite rotate, while the Objects on Path Tool
Options dialog shows Rotate clamped to -360 to 360 and saves the value
it was given, so a rotate of 450 showed as 360 and the next attach used
450. The tool now clamps rotate to -360 to 360, and attach clamps the
saved rotate it falls back to the same way.
Double-clicking the Objects on Path tool opens Objects on Path Tool
Options: a nine-point Pivot grid, a Rotate field, Reset (the center and
0) and Save. Save sets the tool's options, which last across tool
switches and are saved with the preferences. The tool sends them with
each attach, and object.objectsOnPath.attach without pivot or rotate
uses them, so they apply to the objects attached next; groups attached
before keep theirs.