dialog_sliders_report_the_numbers_their_fields_show still expected the Smooth
tool's Fidelity slider to read "0.25pt". The dialog shows that Fidelity in
screen pixels, so the test expects "0.25px", and it now also checks that the
Blob Brush's Fidelity slider reads in points.
The Smooth tool, and an Alt smoothing drag with the Pencil, Paintbrush or
Blob Brush, now send path.smoothRegion their Fidelity divided by the zoom,
as the Pencil and the Paintbrush do since #5748. Smooth Tool Options shows
Fidelity in px. A saved Fidelity keeps its number, so it smooths as before
at 100% zoom.
path.smoothRegion now refits at tolerances from 0.05 px at the highest zoom
to 100 px at the lowest (0.000078125 to about 3195 pt) instead of clamping
to 0.05 to 100 pt, so the setting keeps scaling across the whole zoom range.
The fuzz case counted objects that match the look style C applies, so a
C read with no paint also passed. It now also checks that C's look has
no fill and one red 2 pt stroke.
Mesh export checked the object's solids together by building all of them
before the first mesh. It now builds and counts each solid as the loop
reaches it, so a mesh past the triangle budget stops the export before
the solids after it are built.
The kept grid now records whether a type measure was registered, so a
grid built before registration is not reused when the registered inputs
number happens to be 0.
object.mesh.movePoint and object.envelope.setMeshPoint compare a handle
end with point plus handle, the form the caller sends, so a rounding
difference in (p + v) - p no longer turns an unchanged warp into a mesh
envelope with an undo step.
The fuzz case also loads its .ai library with graphicStyle.loadLibrary,
applies every style to the rich document's objects and then applies a
red 2 pt stroke style read before the fuzzed one, and checks that the
stroke style reaches the objects whenever the fuzzed text is only paint
operators.
The i18n test that main added for 3D refusals calls validate_three_d_at with this branch's (Option<usize>, usize) position: effect 0 of appearance item 0 is (Some(0), 0).
With Background Save and Background Export on, Package's OK on a dirty
document starts the package once the save's result arrives. That start
ran in background::after's callback, on the frame that applied the
save's result, so the worker took the frame's file access scope. The
desktop frame has no automation roots, so a package asked for by an
automation request confined to its roots could write outside them.
OK now captures the scope in force and starts the deferred package in
it, so the package is checked against the same roots as the save.
Adds a test with a half-transparent square that its own clip group,
its clipping layer, or two nested clipping paths together hide, so the
square no longer marks the DCS image under it.
A plain group holding just the image becomes its clip group again only
when the image takes its DCS file's clipping path. When Placement Options
clip the image, it goes into a new clip group as before, so a group the
user made around the image alone stays a plain group.
The check that decides whether a linked EPS file is DCS now gets the
file's size. When the bytes read hold the whole file, it reads them as a
full read does. A binary EPS header whose PostScript or TIFF preview ends
past the end of the file names no plates, so such a file keeps its
preview with lowResProxyEps on instead of going missing.
Validation built the Extrude & Bevel, Inflate and Rotate solids from the
stored shape, while drawing, Export 3D Object and Expand as Wireframes
build them after the geometry effects before the 3D effect. A Transform
effect with copies before Extrude & Bevel could pass the check and then
draw the source art. Validation now reshapes the object, the fill or
stroke, or a group's members with those effects first.
validate_three_d_at and validate_three_d_at_in take the effect's index
for an effect on the object too, so an edit checks the effects before
that effect, and effect.apply checks a new effect after the others.
With both guides of an axis past the same edge, the art keeps its size
from the other edge of the instance, or shrinks to the instance's width
or height when the instance is smaller than the art. The module doc,
AxisMap::new and the docs/target-app-parity.md entry now say so.
A selected warp envelope now shows the points of its surface on a 4x4
grid (8x8 or 16x16 where 4x4 strays more than 0.1% of the warp's
diagonal from it). object.mesh.movePoint, movePoints, addLine,
deletePoint and object.envelope.setMeshPoint accept a warp: the first
edit turns it into a mesh envelope on that grid and applies the edit as
one undo step, so Undo or Escape gives the warp back with its style and
bend. An edit that moves no point leaves the warp and adds no undo
step. A warp that no such grid follows (some version 0 maps) shows no
points and its edits fail without changing anything.
movePoints and setPointColor on a gradient mesh record no undo step
when they change no point.
A gradient instance in a one-paint style marked both the fill and the
stroke as not read, so a style with a solid fill and a stroke gradient
was left out even when its `Xd` turns on only the fill. The instance's
flag (`1 Bb` for the stroke) now says which side the gradient paints, as
the object reader reads it; a gradient outside an instance still marks
both.
The dialog stored the scroll area's offered height as its content
height, which is taller than a short section draws. The room it gave a
longer section after a switch then left too little for the rest of the
window, and on a small screen OK and Cancel went below the screen. It now
stores the height the scroll area shows, the smaller of the offered
height and the content's height.
A changed content height also lays the frame out again before it is
shown, so the window is placed at its new size in the frame of the
switch rather than one frame later.
#5748 moved the Pencil's and the Paintbrush's Fidelity to screen pixels, but
docs/ui-parity.md still gave it in points. The Pencil row now gives the
slider's rail, the field and the key steps in px, and says the tool sends
path.freehand the value in points at the current zoom.
The Pencil row also appeared twice, the second copy without the Fidelity
text. The two rows are merged into one.
The comments on FIDELITY_MAX, fidelity_step, fidelity_at and fidelity_from
in the Tool Options dialog name the tool's unit, since the slider is shared
with Smooth and Blob Brush, which stay in points.
When a linked file lost its clipping path, the clip group holding the
image stayed as a plain group of the image. When the file had a clipping
path again, the image went into a new clip group inside that plain group,
so each round nested one more group. The plain group holding just the
image now becomes its clip group again, in the layers and in symbol,
pattern, graph design and mask art.