Numeric fields dropped every parenthesis before reading a value, so
(10+5)*2 typed into a field committed 20. Only the Kerning field, which
shows its automatic value as (12), now drops one pair of parentheses
around the whole text. Parentheses anywhere else are refused, and fields
without that display refuse them too.
The raster-effect cache key now includes the setting, so a renderer that
draws the same art with it on and then off no longer reuses a drop
shadow or other raster effect made with the other setting.
The Navigator panel menu's Panel Options… is enabled and opens a dialog with
the view box color (a preset or a custom color; Light Red, today's color, is
the default) and Draw Dashed Lines as Solid Lines, off by default, which draws
dashed strokes without their dashes in the panel's thumbnail only. The
options are kept with the UI state, and ui.navigatorPanelOptions sets them.
RenderOptions::solid_dashes draws dashed strokes as solid lines, including
type strokes and the silhouettes of stroke effects.
layer.setProps, layer.new, layer.newSublayer and livePaint.gapOptions read
an 8-digit hex color such as #ff000080 as #ff0000 and set it without its
alpha. They now refuse it with the error a bad color already gets, and
change nothing. #rgba was already refused. #rrggbb, #rgb, a preset index
and a preset name are read as before.
`Color::from_hex` reads `#rrggbbaa` and keeps only its first six digits, so
a `color` set to `#ff000080` through `ui.dialog.set` was applied as
`#ff0000` without an error by Tile Edge Color, Live Paint Selection Tool
Options, Live Paint Bucket Options and Gap Options.
- A new `checked` next to `resolve` in `dialogs/tile_edge_color.rs` gives
the existing "is not a colour" error for an 8-digit hex color, and
otherwise reads the color as `resolve` does. `resolve` is unchanged, so
the swatches the dialogs draw with it show such a color by its RGB as
before.
- Each of the four dialogs' OK checks the color with `checked` first, and
leaves the dialog open with nothing changed. Tile Edge Color and Gap
Options already refused `#rgba`, which `from_hex` does not read. Live
Paint Selection and Live Paint Bucket used to ignore a color they could
not read, such as `#f008`, and apply their other fields; their OK now
refuses it.
- With Preview on, Gap Options sends no color for a `#rrggbbaa` value, so
the groups keep their own color, and the previewed gaps draw in black.
Docs: the params text, docs/mcp.md, docs/control-protocol.md and
docs/target-app-parity.md.
The params text of select.same.symbolInstance, docs/mcp.md and
docs/target-app-parity.md now say that the object compared with can be
of any kind (a group member selected on its own, or an object that is
not a symbol instance, which leaves the selection empty), and that new
art on a locked artboard is not passed over while it stays selected.
A test covers the three cases.
The Global Edit Options dropdowns in the Control bar and in the
Properties panel's Quick Actions turn their button off while Global
Edit is on, but a popup that was already open stayed open and still
changed the options. Both dropdowns now close their popup while Global
Edit is on, and it stays closed after Global Edit stops until the
button is clicked again.
A selection that mixed kerning modes left the Kerning dropdown without
its Auto and Optical entries, so one mode could not be set on all of
it. The menu now lists both entries with neither checked.
The first UI pass applies the saved preferences again (#4837) by removing
the record of what was last applied. A Render Threads change made by a
control request between an earlier tick and that pass was then applied
with no previous value to compare, so the canvas renderer kept its old
thread count. The pass now forces the theme refresh and keeps the
record, so the thread change still restarts the renderer.
Done (pattern editing), Stop Editing Opacity Mask and Exit Isolation
Mode end the Type tool's edit first, so point type a click placed and
left empty is discarded. While a Cmd/Ctrl press had lent a selection
tool, the Type tool was not the active tool, its edit was not ended,
and the empty point type was saved into the pattern tile or the mask.
The lent tool is now given back first. A drag the lent tool started is
kept as its own step, with its last position applied when Real-time
Drawing and Editing is off.
A press or release of Backtick, or a window focus loss, that came after
the mouse button went up in the same frame changed whether the drag
committed a pattern-only transform. The release now takes Backtick's
state at the button-up from the frame's ordered input events.
optical_pair_after_rtl_separate_mark_uses_base_outline sets Noto Sans
Arabic, which is not in assets/fonts. Without CRAFT_FONTS_DIR the font
database returns a fallback face, so the test checked that face instead.
The test now skips when Noto Sans Arabic is missing, as the Shippori
Mincho tests in the same file do.
The marquee's segment test built a two-anchor path for every segment and ran
hit::intersects_rect on it. It now skips a segment whose anchors and handles
all lie past one side of the marquee, and tests the rest directly with the same
bounds and edge checks, so it selects the same segments.
A marquee over 10,000 anchors, press to release (anchor_bench, median of 7):
one open path of 200,000 anchors 84.9 ms -> 24.1 ms, 2,000 closed paths of 50
anchors 27.5 ms -> 13.5 ms, one closed path of 50,000 anchors 14.6 ms -> 8.5 ms.
A layer nested in a group whose art was all locked counted for nothing,
so the group was hidden or locked with the layer inside it. The selected
layer now counts as selected itself.
While Lock Guides was on, a guide path that was locked itself, or sat in
a locked object, was not kept, so the group around it was hidden. Guide
paths inside locked objects are now kept too.
A plug-in object that names a brush kind but ends before the brush's
name was dropped without a trace. When it was the file's only brush
object, the document kept the default brushes and showed no note. It is
now counted with the other brushes that can't be read, so the file gets
the Brushes panel note and no default brushes.
Holding Escape to cancel a floating Tools panel move or a ruler-origin
drag no longer passes its key repeats to the active tool or to the
other Escape actions (pattern edit, isolation, a flyout) once the
cancel frame has passed. The repeats are skipped until Escape is
released or pressed again. Tests hold Escape through both cancels in
each screen mode.
render_node_with and render_node_thumbnail_with drew into a new context
without setting its aliasing threshold, so AntiAlias::None still gave
smooth edges. Both now set the threshold from the options, as a page
render does.
On a multithreaded context, a drop shadow or glow drawn through a filter
layer is drawn into an offscreen that covers the art plus the blur's
spread, but its frame kept the view's visible rect. Art outside the view
but within the spread was culled, so it cast no shadow, and a long stroke
was outlined only near the view, so its far parts no longer fed the blur.
The offscreen's frame now takes its visible rect from its own area, and
the frame of content kept from an earlier split takes the window it is
drawn over.