perfect target area thing
This commit is contained in:
parent
664252e0fc
commit
5bcf22e458
23 changed files with 668 additions and 432 deletions
|
|
@ -30,10 +30,11 @@ stage and timeline. A stage marquee replaces, or with Shift adds to, the same
|
|||
set. Timeline rows, bars, and cel blocks render membership from that same set;
|
||||
the primary member gets the inspector/focus treatment.
|
||||
|
||||
Targeting remains separate. Clicking a timeline label both selects it and aims
|
||||
it. Shift-click changes the selection set and makes the clicked row the one
|
||||
target. Clicking a bar/cel or the stage changes selection without silently
|
||||
changing the target. A target is singular even when selection is plural.
|
||||
Creation targeting is derived rather than stored. The primary (last-selected)
|
||||
occurrence is the preferred row; the playhead validates it and, when necessary,
|
||||
walks outward to the nearest valid containing occurrence. A target is singular
|
||||
even when selection is plural. See `docs/creating-in.md` for the resolver
|
||||
contract.
|
||||
|
||||
## Clipboard value
|
||||
|
||||
|
|
@ -50,19 +51,13 @@ cross-project identity collision policy hidden inside it.
|
|||
|
||||
## Paste
|
||||
|
||||
Paste always uses the explicit insertion target and the playhead:
|
||||
|
||||
- no target: paste at the top of the open symbol;
|
||||
- aimed ordinary node: paste beside it in the symbol that owns it;
|
||||
- aimed instance, including an instance whose source is drawn as a lane: paste
|
||||
inside the symbol it places;
|
||||
- the open lane's own row: paste directly into that lane.
|
||||
|
||||
The destination is resolved structurally from the target. It does not require
|
||||
the target instance to be visible at the playhead. Being outside the target
|
||||
symbol's authored window is legal: content can exist there and be cropped by
|
||||
the window. Lane paste may grow the lane/window because a sequence cannot store
|
||||
an overlapping or unreachable tail and pretend the edit succeeded.
|
||||
Paste resolves one destination from the primary selection and playhead. An
|
||||
ordinary occurrence is usable only while the playhead maps through every
|
||||
enclosing occurrence and lies within its extent. Otherwise resolution walks
|
||||
outward, with the open symbol as the total fallback. A selected lane is an
|
||||
insertion surface only while all occurrences enclosing its parent symbol are
|
||||
valid. Multi-selection supplies one ordered payload, not several destinations;
|
||||
only its primary member anchors this resolution.
|
||||
|
||||
The earliest finite start among the copied roots is aligned with the playhead
|
||||
in the destination. All other root starts retain their offset from it. Roots
|
||||
|
|
@ -118,13 +113,14 @@ After either duplicate command, the new roots replace the selection.
|
|||
|
||||
Cut, paste, duplicate, and duplicate unique each call one domain command and
|
||||
commit through one `edit/transaction`; each is exactly one undo/redo step no
|
||||
matter how many nodes or symbols it touches. Copy, aiming, and selection do not
|
||||
matter how many nodes or symbols it touches. Copy and selection do not
|
||||
touch history. A refusal changes no document leaves and creates no history step.
|
||||
|
||||
Undo/redo filters the complete selection set against the restored document and
|
||||
repairs the primary selection. Clipboard payloads remain snapshots. Paste
|
||||
validates the destination and all remapped references at commit time, so a stale
|
||||
target or a newly impossible symbol cycle refuses rather than partially editing.
|
||||
validates the resolved destination and all remapped references at commit time,
|
||||
so a stale selection or a newly impossible symbol cycle refuses rather than
|
||||
partially editing.
|
||||
|
||||
## Required tests
|
||||
|
||||
|
|
@ -133,7 +129,7 @@ normal shared references, deep unique graph remaps, multi-root relative timing,
|
|||
composition overlap, lane overwrite, lane forward duplication and ripple,
|
||||
mixed-owner duplication, cycle refusal, stale targets, and all-or-nothing
|
||||
failure. Event tests cover copy without history, atomic cut/paste/duplicates,
|
||||
resulting multi-selection, target resolution, pasting beyond a symbol window,
|
||||
resulting multi-selection, target fallback at the playhead,
|
||||
and one undo plus redo of each mutation. Browser tests cover mirrored stage and
|
||||
timeline selection, Shift-toggle on labels/bars/cels, singular aiming, and the
|
||||
keyboard commands.
|
||||
timeline selection, Shift-toggle on labels/bars/cels, singular derived creation
|
||||
targeting, and the keyboard commands.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue