Commit Graph
2216 Commits
Author SHA1 Message Date
dotCooCoo 3348b41796 Merge main into fix/freehand-tolerance-low-zoom 2026-11-13 08:12:01 -08:00
BFlat cb061d6a2c Merge pull request #7085 from dotCooCoo/feat/learn-next-up
Learn: View more opens a tutorial's practice sample, and Next Up shows the next tutorial
2026-11-13 23:05:29 +07:00
BFlat 6326acb122 Merge pull request #7070 from dotCooCoo/feat/recolor-prominent-colors
Recolor Artwork: the Prominent Colors bar weighs the art's colors
2026-11-13 23:05:19 +07:00
BFlat 25553f21fe Merge pull request #7123 from dotCooCoo/fix/actions-insert-menu-item-ui-commands
Actions: Insert Menu Item adds Object › Align and View menu commands
2026-11-13 23:05:00 +07:00
BFlat f525bd742e Merge pull request #7147 from dotCooCoo/fix/script-file-name
Scripts: $.fileName names the file of the code that reads it
2026-11-13 23:04:04 +07:00
BFlat dd8f8ed2bd Merge pull request #7115 from dotCooCoo/fix/settle-keeps-preview-warnings
Edit: settling an interaction keeps the warning of the preview it applies
2026-11-13 23:03:55 +07:00
BFlat 2d91c860a7 Merge pull request #7087 from dotCooCoo/feat/every-line-composer-shaped-area
Type: the Every-line Composer sets mixed sizes in shaped and wrapped area type
2026-11-13 23:03:29 +07:00
BFlat e9459df52b Merge pull request #7099 from jmverges/fix/7097-top-object-split-curve
Envelopes: a top object's side that is one split curve follows its parameter
2026-11-13 23:00:21 +07:00
dotCooCoo 75c74557bb Scripts: $.fileName names the file of the code that reads it
$.fileName gave the file being run, so a function defined in a file
that #include inserted, in a file $.evalFile ran, or in an earlier run
of a named engine reported the calling file instead of its own.

- vectorcraft_js: HostItem::SiteGetter gives a getter the CallSite
  (source tag, line, column) of the code that reads it.
- $.fileName maps that place through the run's source maps, or the
  maps a named engine kept, to the file the code is in. It is empty in
  code from a script given as source and in kept code whose map was
  dropped. Code that eval or Function compiled still gets the file
  being run.

Docs: docs/mcp.md, docs/target-app-parity.md.
2026-11-13 06:19:23 -08:00
dotCooCoo 53e8391e41 Recolor Artwork: the Prominent Colors bar keeps the Edit tab's height
- With art, the bar is 10 pt tall and the Edit tab leaves out the gaps
  above the wheel and above the sliders. The dialog is as tall on the
  Edit tab as on the Assign tab, and all of it but the color chips fits
  a 1024 by 576 screen.
- recolor.weigh counts a use for the first row that is not excluded
  when an excluded row lists the same color first.
2026-11-13 05:34:30 -08:00
dotCooCoo 73a9c22361 Actions: Insert Menu Item adds Object › Align and View menu commands
Insert Menu Item… now lists the Object › Align items and the View menu
commands the app runs itself (Outline, Pixel Preview, Trim View,
Presentation Mode, Screen Mode, zoom, fit, Rotate View, and the show,
hide and snap items).

- An Align step holds the params its click sends at insertion, so a
  later Align To choice does not change it. A step that aligns to the
  key object stops the playback when the selection has no key.
- A View menu step plays in its place at every speed and adds no undo
  step. At Accelerated the steps on each side of it are one undo step
  each. Playing it while recording records it.
- Batch… refuses an action with an included View menu step.
- An action set file with a View menu step is version 6.
- The steps before a stop now play as saved steps, as other playback
  does, so a key that an older version recorded no longer fails there.

Docs: docs/mcp.md, docs/target-app-parity.md.
2026-11-13 05:17:40 -08:00
dotCooCoo 3aa7ea2f78 Recolor Artwork: a weighed color recolors with the row it moved to
- recolor.weigh drops another row's entry for a color that moved, so
  recolor.apply recolors it with the row it moved to and the shares
  describe the recolor. A color that the first color of another row
  with a new color also lists stays where it is.
- Linked swatch colors are grouped through a map, so a row with many
  unlinked colors no longer compares each one with every group.
- The Prominent Colors bar reads the shares again when a row gains or
  loses a new color, since that changes which row takes a shared color.
2026-11-13 04:58:39 -08:00
dotCooCoo f918c91c13 Edit: settling an interaction keeps the warning of the preview it applies
With Real-time Drawing off, a command that ends a drag first (Undo, Redo,
Clear History, a plug-in command and the others) applies the drag's
deferred preview, but dropped the warning that preview gave, which
releasing the drag shows in the status bar.

- The applied preview's warning is now kept while a top-level command or
  the tool's actions run. A command's result carries it as
  `previewWarning`, and as `warning` when the command has no warning of
  its own, so the status bar shows it.
- Typing kept as its own step when a tool's drag begins, or when Cmd
  lends the Selection tool, shows the warning in the status bar.
- The Cmd-lend path no longer ignores an error from keeping the typing.

Docs: docs/mcp.md (undo/redo row), docs/target-app-parity.md.
2026-11-13 04:36:38 -08:00
dotCooCoo 6e361b0bec Pencil: Fidelity keeps its screen size at low zoom
The Pencil and the Paintbrush send their Fidelity in points at the
current zoom, but path.freehand read at most 100 pt. At 3.13% zoom a
20 px Fidelity (639 pt) was fitted at 100 pt, the same as 3.13 px on
screen, so a stroke drawn zoomed out kept far more anchors than the
same stroke at 100%.

- path.freehand, and brush.freehand, which runs it, take a Fidelity
  from MIN_FIT_TOLERANCE to MAX_FIT_TOLERANCE (100 / 0.0313 pt, the
  100 px field maximum at the lowest zoom). A value outside that range
  is now rejected with an error instead of being read as the nearer
  end. The default stays 1.5 pt and path.blob keeps its 100 pt bound.
- The Pencil and the Paintbrush keep the value they send within that
  range, so a stroke draws at any zoom.
- An extending stroke still closes the path within four Fidelities of
  its other end, at most 400 pt, as before.

It conflicts with open #7089 in crates/tools/src/draw2.rs.

Docs: docs/mcp.md, docs/target-app-parity.md, path.freehand params.
2026-11-13 04:35:29 -08:00
dotCooCoo d747f5b365 Learn: Back to skills and the Quick skill guide card run learn.skills
learn.skills {} shows the Learn panel on its Skills tab with the list of
skills, with no skill and no tutorial open, and returns what learn.list
returns. Back to skills after a skill's last tutorial and the Quick skill
guide card on the For you tab now run it, so the control channel and MCP
can reach the same view.

- The command is listed in both UI command catalogs, and its label has a
  row in every catalog.
- Docs: docs/mcp.md, docs/target-app-parity.md, docs/ui-parity.md.
2026-11-13 04:34:35 -08:00
jmvergesandClaude Opus 5.5 728fd9ef14 Envelopes: a top object's side that is one split curve follows its parameter
A top-object envelope gives each piece of a side a share of the content
in proportion to its control polygon's length. When anchors split a
curve without changing its shape, the pieces' polygons don't divide the
side where the curve's own parameter does, so the envelope bent its
contents differently although its outline was the same: Add Anchor
Points on a top object moved the art, and a top object whose .ai mesh
saves each side's curve split into thirds drew its type up to about
half a point off its drawn art, which follows the whole curve's
parameter.

Coons::from_top_object now checks whether a side's pieces, from corner
to corner, are all pieces of one cubic. The pieces' spans of that
curve's parameter come from the handle lengths either side of each
split, the curve from the outer ends and handles, and every piece must
lie within 0.02 pt of the curve's piece over its span (each control
point). Such a side runs along that curve, by its parameter. Any other
side keeps the polygon shares, including a side only partly made of one
curve and a smooth side drawn in many pieces that isn't one curve as a
whole. Corners found from the outline can still move when anchors are
added, as before. Gradient meshes made from a path are unchanged.

Existing top-object envelopes with such sides redraw.
a_split_curve_moves_the_top_object_share_to_its_new_anchor, which
pinned the earlier behaviour, becomes a_split_curve_keeps_the_top_object_patch.

Tests: a_split_curve_keeps_the_top_object_patch,
a_top_object_joins_a_split_curve_saved_with_rounded_coordinates,
a_top_object_keeps_smoothly_joined_curves_apart,
a_top_object_side_partly_of_one_curve_keeps_the_polygon_shares and
a_top_object_side_of_many_arcs_stays_on_them (vectorcraft-doc),
envelope_top_object_keeps_its_look_when_anchors_are_added
(vectorcraft-engine) and
a_top_object_whose_top_is_one_curve_split_in_thirds_opens_live
(vectorcraft-eps).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-13 11:18:40 +00:00
dotCooCoo 6c773585fa Type: the Every-line Composer sets mixed sizes in shaped and wrapped area type
A paragraph whose characters differ in line metrics (type size, font,
leading, vertical scale, or an inline graphic taller than the text) was
broken with the Single-line Composer in area type of a shape other than
a rectangle, or with text wrap. The every-line composer now composes it
there too.

- The composer takes each line's width from a measure that follows
  where the lines above it went (`composer::Measure`,
  `compose_with`). The fixed widths by line number are one such measure.
- In a frame whose lines are not all as wide, each line the composer
  tries is placed from the pen the lines above it left, at its own
  tallest metrics, as the line loop places it (`layout/shaped.rs`).
  Starts with the same placement are shared, and each start keeps the
  placements it was tried with.
- A line too long for its room does not end the search from its start
  while a glyph after it could make the line taller and set it lower,
  where the frame may be wider.
- The line loop places a composed line in such a frame at the line's
  tallest metrics, so it gets the room the composer measured for it.
- The search for one paragraph stops after 1,000,000 lines tried or
  2,000,000 baseline steps. The searches of all the paragraphs of one
  frame share a budget of 2,000,000 lines and 4,000,000 steps, kept
  apart from the line loop's own steps. A paragraph whose search stops
  is broken line by line. A paragraph the frame has no room for is
  broken line by line too, and overflows as before.

Tests: crates/text/src/tests/combos.rs (a stepped frame, a frame that
widens, text wrap with two spans on a baseline, overflow, a long
paragraph) and crates/text/src/layout/wrapping_tests.rs (the composer
with a measure, and the shared search budget).
2026-11-13 01:24:33 -08:00
dotCooCoo 7805479dad Libraries: a character style's menu offers Apply, Add to Character Styles, Rename and Delete
A right-click on a character style in the Libraries panel now opens Apply
Character Style, Add to Character Styles, Move to Group, Rename… and
Delete. Apply is enabled only with type selected. Opening the menu applies
nothing, and the paragraph style menu is unchanged.

- library.addToCharacterStyles adds the style to the document's character
  styles without applying it, so no type needs to be selected. A document
  style with the same name and attributes is reused with no undo step, and
  a name taken by other attributes gets a number.
- library.renameItem renames a library item in place and keeps its group.
  The name is trimmed and has 1 to 256 characters. Another item of the same
  kind with that name is an error, the item's own name writes nothing, and
  a rename is not a document undo step.
- library.use and library.addToCharacterStyles compare a library style
  with the document's in the form the document stores it in. A whole
  number size from a library file no longer adds a numbered copy.
- A character style color linked to a swatch that is not a global or spot
  swatch of the document keeps the color it shows without the link.
  Before, adding or applying such a style failed with "no swatch".

Help page: https://helpx.adobe.com/illustrator/desktop/design-with-text/fonts-and-scripts/add-and-use-text-and-character-styles-in-libraries.html
2026-11-13 01:22:29 -08:00
BFlat 3b48070751 Merge pull request #7061 from dotCooCoo/fix/dcs-transparency-clip
Place: DCS transparency interactions look only at what clipping paths show
2026-11-13 16:04:49 +07:00
dotCooCoo 3792561e1a Learn: View more opens a tutorial's practice sample, and Next Up shows the next tutorial
Under a tutorial's steps, View more opens the tutorial's practice sample
as a new untitled document, which becomes the active one; open documents
stay as they are, and Save asks where to save the copy. Each of the 12
tutorials has its own small SVG drawing in panels/learn/samples.rs, read
only when View more is pressed.

Once the sample is open, Finish tutorial marks the tutorial finished.
A finished tutorial shows Next Up with the next tutorial's title in the
same skill, and Next Up shows that tutorial without opening its sample.
After a skill's last tutorial the panel says so and shows Back to
skills; Next Up never moves to another skill. Finished tutorials are
kept while the app runs; the skill rings and counts do not show them
yet. The help page's short video is not part of this change.

- learn.openSample, learn.finish and learn.next run the three controls
  and are listed in the UI command catalogs; a missing, non-string or
  unknown tutorial id, or a step out of order, is an error and changes
  nothing.
- New labels and messages have rows in every catalog.
- Docs: docs/mcp.md, docs/target-app-parity.md, docs/ui-parity.md and
  the ASSETS.md line for art generated in code.
2026-11-13 00:51:37 -08:00
BFlat 9a1a158a3f Merge pull request #7060 from dotCooCoo/fix/dcs-regained-clip
Place: a DCS file that regains its clipping path clips the group that stayed
2026-11-13 15:04:28 +07:00
BFlat 46be3af7f8 Merge pull request #7064 from dotCooCoo/feat/envelope-warp-points
Envelopes: the Mesh tool and Direct Selection edit a warp envelope's points
2026-11-13 15:04:18 +07:00
BFlat dd8446f3a4 Merge pull request #7054 from dotCooCoo/feat/nine-slice-guides-outside-art
Symbols: 9-slice guides may lie outside the symbol's art
2026-11-13 15:03:59 +07:00
BFlat 8998d94cc8 Merge pull request #7057 from dotCooCoo/feat/paste-remembers-sublayers
Layers: Paste Remembers Layers puts art back into the sublayer it was copied from
2026-11-13 14:18:03 +07:00
BFlat 11a37082f7 Merge pull request #7058 from dotCooCoo/feat/touch-workspace
Touch: a two-finger tap switches between selection and drawing modes
2026-11-13 14:17:54 +07:00
BFlat 001660517c Merge pull request #7059 from dotCooCoo/fix/dcs-eps-proxy-plates
Place: DCS links reopen with their plates under the low-resolution EPS proxy
2026-11-13 14:17:44 +07:00
BFlat 9ba02d41d7 Merge pull request #7038 from dotCooCoo/fix/schema-expected-phrases
i18n: parameter schema errors translate what the value must be
2026-11-13 14:16:56 +07:00
dotCooCoo fafd06c959 Recolor Artwork: the Prominent Colors bar weighs the art's colors
With art selected, the Edit tab shows a Prominent Colors bar under the
wheel: a part for each row in its new color, as wide as the row's share
of the art, the largest first. Dragging the edge between two parts moves
width from one to the other; when the drag ends, the rows' current
colors move toward the new widths and the art previews the result. OK
keeps the recolor as one undo step.

- recolor.weigh {map, weights?, ids?} returns each row's share of the
  uses of the art's colors and, with weights, the rows with their
  current colors moved: one color at a time between rows that have a
  new color, while a move brings the shares nearer the weights, the
  color nearest in Lab to the row it goes to first. A row keeps its
  first color, the tints of one global swatch move together, colors
  that stay keep their order, and the command changes nothing. A use
  counts for the row recolor.apply recolors it with, and the work is
  bounded at 50,000,000 color-by-row comparisons.
- The New Color Group menu beside the link button has Save All Colors
  (the new colors in row order) and Save Prominent Colors (the bar's
  colors in its order); each saves a color group as its own undo step.
- The dialog's weights field drives the bar from ui.dialog.set. A new
  Colors count drops it.
2026-11-12 22:48:57 -08:00
BFlat 7d77f8aebd Merge pull request #7044 from dotCooCoo/fix/effect-apply-strict-params
Effects: effect.apply refuses a wrongly typed parameter that has no default
2026-11-13 13:19:01 +07:00
BFlat 9b7aa561c0 Merge pull request #7036 from dotCooCoo/fix/pattern-cancel-dangling
Patterns: canceling a new pattern leaves no swatch or paint of it
2026-11-13 13:18:51 +07:00
BFlat 9b54280846 Merge pull request #7050 from dotCooCoo/feat/layers-delete-confirm
Layers: deleting layers that hold art asks first
2026-11-13 13:18:43 +07:00
BFlat 53ff632a26 Merge pull request #7042 from dotCooCoo/feat/pict-open-place
File formats: PICT pictures open and place
2026-11-13 13:18:26 +07:00
BFlat c6da74eef3 Merge pull request #7043 from dotCooCoo/fix/pen-readout-without-rubber-band
Drawing tools: the measurement readout shows with the rubber band off
2026-11-13 13:17:57 +07:00
BFlat bf71429d06 Merge pull request #7052 from dotCooCoo/feat/font-samples-on-white
Font menu: Show samples on white draws each sample in dark type on a white area
2026-11-13 13:17:48 +07:00
BFlat 499903878e Merge pull request #7055 from dotCooCoo/feat/mojikumi-presets
Type: the Mojikumi Set menu offers the predefined spacing sets
2026-11-13 13:17:36 +07:00
BFlat 7257c28a83 Merge pull request #7056 from dotCooCoo/feat/rotated-box-transforms
Free Transform: handles, shear and distort follow the rotated bounding box
2026-11-13 13:17:23 +07:00
dotCooCoo 6886198458 Merge main into fix/schema-expected-phrases 2026-11-12 21:37:21 -08:00
dotCooCoo 4316f819a8 Envelopes: the Mesh tool and Direct Selection edit a warp envelope's points
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.
2026-11-12 21:37:21 -08:00
dotCooCoo e4fdc10b99 Place: a DCS file that regains its clipping path clips the group that stayed
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.
2026-11-12 21:30:06 -08:00
dotCooCoo 2d2ac65b2c Place: DCS links reopen with their plates under the low-resolution EPS proxy
With the lowResProxyEps preference on, opening a document kept the saved
preview of a linked DCS file, so the link showed as EPS without its
plates. Opening now reads the first 1 MiB of each such EPS file and reads
a DCS file in full. The whole file is read only when a binary EPS header
puts the PostScript past those bytes or the header comments run past
them. Other EPS files keep their preview.
2026-11-12 21:30:06 -08:00
BFlat 1b9aa07e65 Merge pull request #6995 from dotCooCoo/feat/actions-insert-select-path
Actions: Insert Select Path stores the selected path as a step
2026-11-13 12:27:58 +07:00
BFlat bae885e393 Merge pull request #6876 from dotCooCoo/feat/outline-object-image-alpha
Effects: Outline Object on an image's fill or stroke follows its opaque pixels
2026-11-13 12:27:50 +07:00
BFlat ef3beb9401 Merge pull request #7027 from dotCooCoo/fix/followup-6985
Fonts: Find Font skips patterns and inline graphics that draw nothing, and Refresh Font List lays out type in art again
2026-11-13 12:27:33 +07:00
BFlat 65138198a8 Merge pull request #7033 from dotCooCoo/fix/colorize-missing-link-fill
Colorize: a fill color recolors a colorized image whose link is missing
2026-11-13 12:27:18 +07:00
dotCooCoo cc19dc1db2 Touch: a two-finger tap switches between selection and drawing modes
In the Touch workspace, a two-finger tap on the canvas now switches
between the Selection tool and the drawing tool chosen last, as the
help page describes. It no longer undoes there; outside Touch a
two-finger tap still undoes, and a three-finger tap still redoes in
every workspace.

- New UI command tool.toggleTouchMode (Switch Selection and Drawing
  Modes, {} -> {tool}). From the Selection, Direct Selection, Group
  Selection, Magic Wand, Lasso or Perspective Selection tool it chooses
  the drawing tool chosen last in the window, or the Pencil tool when
  none has been chosen; from any other tool it chooses the Selection
  tool. The Hand, Rotate View, Zoom and Print Tiling tools never become
  the drawing tool. It adds no undo step.
- These tool lists and Pencil as the first drawing tool are
  VectorCraft's own rules.
- The label is in every catalog. Docs: docs/mcp.md, the touch row of
  docs/hardware-parity.md and docs/target-app-parity.md.
2026-11-12 21:21:52 -08:00
dotCooCoo 38049325e7 Free Transform: handles, shear and distort follow the rotated bounding box
After a rotation the Selection tool already shows and drags a bounding
box turned with the objects, but the Free Transform tool still used the
page-aligned box. Its handles sat on the wrong corners, a side handle
scaled along the page axes, and Perspective Distort and Free Distort
started from a box that did not match the art.

- The Free Transform tool keeps the selection's turned box for the
  drag. Handles, the rotate zone and the move zone are read in its
  frame; a handle scales along the selection's own sides from the
  opposite handle (or the center with Alt) and snaps as the Selection
  tool's does; Cmd/Ctrl on a side handle shears along that side; the
  outline, handles and cursors are drawn on the turned box.
- Perspective Distort and Free Distort move the corners of the turned
  box. `object.distort` takes `angle?` (degrees): `from`, or the
  selection's bounds without it, is then a box in the frame turned by
  that angle. Upright boxes send the same params as before.
- The Scale and Reflect tools, their dialogs and commands, and the
  Transform panel's flips keep the page's axes.

Docs: docs/mcp.md, docs/target-app-parity.md.
2026-11-12 21:19:58 -08:00
dotCooCoo 41b8114865 Font menu: Show samples on white draws each sample in dark type on a white area
A new Type preference, Show samples on white (`fontSamplesOnWhite`, off
by default), draws each family's sample in every font menu, and in
Type → Font in the in-window menu bar, in the Light brightness's text
color on a white area, in every interface brightness. A row's white
area is drawn while its sample is still rendering, and leaves 2 pt above
and below it where a highlighted row's color shows. The family names and
the rest of the menu keep the interface's colors. Preferences dims the
checkbox while Enable in-menu font previews is off.

Docs: docs/mcp.md (prefs), docs/target-app-parity.md evidence line.
2026-11-12 21:12:37 -08:00
dotCooCoo 7b6b6af7b1 Type: the Mojikumi Set menu offers the predefined spacing sets
The Paragraph panel's Mojikumi Set lists None, YakumonoHankaku,
GyomatsuYakumonoHankaku, GyomatsuYakumonoZenkaku and YakumonoZenkaku,
then Line-end Punctuation Half Width, and text.setFormat {mojikumi}
takes yakumonoHankaku, gyomatsuYakumonoHankaku, gyomatsuYakumonoZenkaku
and yakumonoZenkaku besides none and lineEndHalf.

The spacing of each set is VectorCraft's own rule, built on the help
page's one-line description of each set:
- YakumonoHankaku sets every bracket, comma and full stop half width,
  takes a quarter em off each side of a middle dot, and puts a quarter
  em between Japanese and Latin letters or digits.
- GyomatsuYakumonoHankaku keeps punctuation full width inside a line,
  sets an opening bracket starting a line flush and a closing mark
  ending it half width, and takes the quarter em after a middle dot
  ending a line off.
- GyomatsuYakumonoZenkaku keeps punctuation full width and adds the
  quarter em between Japanese and Latin text.
- YakumonoZenkaku sets characters as None does.

Both composers and vertical type measure each line as it is set. A
right-to-left paragraph, whose line ends are measured untrimmed, also
draws them untrimmed, and a right-to-left line that ends between a
Japanese and a Latin character is measured without the quarter em the
set adds there. With a Desired glyph scaling other than 100%, the
space a set takes off before an opening bracket or middle dot, and the
Japanese-Latin space recorded at a line's end, scale with the glyph.

The sets save with the document and paragraph styles; new type and
Reset Panel keep Line-end Punctuation Half Width. SVG export lays type
with middle dots out again for its positioned spans. A .ai save
reports a paragraph with one of the new sets as left out.

Docs: docs/mcp.md, docs/target-app-parity.md, docs/type-parity.md,
docs/gaps.md.
2026-11-12 21:07:44 -08:00
dotCooCoo d8b6f4cd02 Layers: Paste Remembers Layers puts art back into the sublayer it was copied from
Copy now remembers the whole chain of layers around each object, not only
the name of the nearest one. With Paste Remembers Layers on:

- In the same document, art goes back into the sublayer it came from while
  that sublayer exists, even after it was moved, so two sublayers of the
  same name in different layers stay apart. A deleted sublayer is made
  again inside the layer that held it.
- In another document, the sublayer and the layers around it are matched
  by name from the top level down; of repeated names, the topmost chain
  that matches the most names wins, a shown and unlocked one first. A
  missing sublayer is made inside its layer, and a missing layer on top
  with the sublayer inside it, in the paste's undo step.
- When the matched layer, or a layer around it, is hidden or locked, the
  paste fails with "the target layer is locked or hidden" and nothing is
  pasted, instead of putting art in a hidden layer or making a second
  layer of the same name.
2026-11-12 21:02:59 -08:00
dotCooCoo 149f4243b2 Place: DCS transparency interactions look only at what clipping paths show
Show DCS Transparency Interactions compared full object bounds, so a
transparent object over the part of a DCS image that its clipping path
hides marked the image. Bounds are now cut to the clipping paths of the
clip groups and clipping layers that hold each object.
2026-11-12 20:45:43 -08:00