A lane is a generic row of symbol clips
A lane was a drawing lane: the only thing that could go in one was a one-frame held cel, and every other symbol instance stayed a permanent root row of its own. Those are not two kinds of timing, they are one kind with two creation policies. `lane/place-symbol` drops any library symbol in as a clip that plays naturally at speed one, `lane/adopt` moves an instance that is already in the document into a lane keeping its source, span, playback and corrections, and `append-drawing`/`overwrite-drawing` keep being the policy that makes a new empty symbol a one-frame hold. The child shape they produce is the same. Both new commands claim their interval through `blank` before they write, so the partition rule is unchanged and unduplicated: placing into occupied lane time trims, removes or splits the incumbents, and a lane still never stores an overlap. Real compositing overlap is another lane, where the order is explicit. Creating a symbol with nothing aimed now makes a lane and a clip in it instead of a loose root instance, and a pool drop prefers an explicitly targeted lane, then the selected one, and makes a lane only when there is neither. That is what stops the row-per-symbol growth coming back in through the drop path, and it is why `add-lane` now takes a z in front of the existing root nodes and calls what it makes a "lane" rather than "drawings". The timeline learned the two gestures that a generic lane needs. A clip body dragged over another lane's track previews there as a dashed block and lands through `::adopt-in-lane`; the track is found with `elementsFromPoint` and its selection read back off the element, because a pointer capture does not retarget. A pool drop over an existing lane previews as a dashed clip inside that lane instead of a temporary new row that appears and then vanishes -- which also needed the drag-leave check to be geometric, since inserting the preview changes the element under the pointer and Chromium then reports a leave with no related target. Lanes are renameable from their label, by double-click, F2, or the pencil, through `::rename-node`. `symbol/lane-cels` is `symbol/lane-clips`, and the vocabulary table in the handoff now separates the two words it had merged: a clip is an instance in a lane, and a cel is specifically the one-frame held source that drawing creation makes. Keeping `cel` for the policy is what lets the lane stop being about drawings at all. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
26ada03591
commit
5ebe776ce4
12 changed files with 590 additions and 174 deletions
|
|
@ -1,6 +1,6 @@
|
|||
# The Lane Model
|
||||
|
||||
Revised 2026-10-01. Cel ownership, source playback, one-row drawing lanes,
|
||||
Revised 2026-10-01. Clip ownership, source playback, one-row generic lanes,
|
||||
direct clip movement and edge editing, correction evaluation, and correction
|
||||
authoring for rotation and position are implemented. The former cel-sheet
|
||||
projection was removed: the timeline is the single timing interface. Sections
|
||||
|
|
@ -147,8 +147,9 @@ cel transform and then the content's own transform.
|
|||
The interval in lane time is derived through `:time`; do not also store parent
|
||||
start/end values. Sequence children require finite intervals and positive
|
||||
placement rates. Ordering and overlap checks use the mapped intervals, not `:z`.
|
||||
The sequence group may contain visual cels or audio cels; its
|
||||
capability must reject an incompatible mixture rather than infer it per frame.
|
||||
The current sequence group contains visual symbol clips. Audio remains an
|
||||
independent root node (and can be linked to picture); if audio lanes are added,
|
||||
their capability must be explicit rather than inferred per frame.
|
||||
|
||||
A source reference is fixed within a cel. The lane changes content when
|
||||
another cel becomes active. This is a deliberate revision of the original
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue