A double click on a clip row did not open its tab. The first click of
the double click had already selected the clip for the inspector, so
the second click selected the same thing again and the editor saw no
change. Frames of textures and pixel art had no rows at all.
- A double click now asks for the tab with openSelection, even when
the selection is already right.
- Textures with frames and pixel art with more than one frame get a
chevron and one row per frame, like sounds and videos. Which rows an
asset has is decided in one place, src/core/model/assetParts.ts,
used by the panel and the inspector link.
- A texture frame shows in the inspector on click and opens the
texture with the frame selected on double click.
- A pixel art frame selects the pixel art on click, so an open tab
paints on that frame. A double click opens the tab on the frame.
- A frame can be dragged onto a composition track like a video clip.
The item carries the sprite of the whole image, the frame becomes
the texture of its object, and it is 3 s long. The agent can do the
same with add_composition_item.
- A texture label that names a frame now points at the frame row.
Found on the way: the e2e check from #425 only double clicked the
texture label, where the first click is a ping, so the bug never
showed there.
Tests:
- Unit: asset-parts (new, 6), composition-sprites and references
extended, related tests 303/303, agent tests 21/21
- 5 mutations, all red in the matching test
- e2e 69 (atx): ALL PASSED, 26 checks, 69t new
- Gate (atx): CHECK EXIT 0, 325 files, 5017 tests
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A clip of a video could not be laid on a composition track at all, and
neither could a clip of a sound, although #418 and the wiki said so.
The only place a drag starts is the asset panel, and it listed assets,
not clips. The texture label of an item playing a video clip was dead
too, because the reference lookup did not know video clips.
- The asset panel gives a sound or video with clips a chevron of its
own. It unfolds one row per clip and starts closed.
- A clip row drags like an asset. One click shows the clip in the
inspector without leaving the tab (`EditorState.glance`). A double
click opens its sound or video with the clip picked.
- A video clip dropped on a composition track becomes an item as long
as the clip. It wears the sprite of its whole video, so a composition
keeps one sprite per video, and the clip is a texture override on
the object. Sprite, item and override are one undo step
(`droppedPicture`).
- A sound clip becomes an audio item as long as the clip. The song tab
takes sound clips on the same way, through `findSound`.
- `referencedTarget` lets a reference label link to the clip itself.
One click pings the clip row, a double click opens the asset with the
clip picked. The Plays row of an audio item reads "Sound / Clip".
- `clipOwner` in `sound.ts` finds the sound or video a clip id belongs
to. `activateAssetOrClip` uses it for the double clicks.
Found on the way: the Blip of the e2e seed is only 0.25 s long, so a
clip of 0.2 to 0.7 s on it is cut to one frame. 69s takes the Drone
(0.75 s) instead.
Tests:
- tsc, eslint, Prettier clean
- Unit on stein2 (composition, references, sound, video, editor):
94 files, 1238 tests green
- e2e 69 on melektaus-atx: ALL PASSED, 25 checks, 2 of them new (69s)
- Gate on melektaus-atx with the fix for 68k on top: CHECK EXIT 0,
313 files, 4841 tests
- Counter checks, all red: no clip rows in e2e 69 (no drag starts),
no clip override in the unit test, the link aimed at the asset
instead of the clip
- Not covered by its own e2e check: sound clips on the song tab
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A track item has always carried an object, and an object needs an
asset. Instead of objects without one, a dropped picture or video gets
a sprite the composition owns, the way a song owns its sounds (#355).
To the rest of the code it is a sprite like any other.
- The asset list starts a drag for textures, vector art, pixel art and
videos. Dropped on a track, they make the sprite and the item in one
undo step. A video item is as long as the video and follows it.
- One sprite per picture and composition. A second drop of the same
video shares it. Once no item wears it, it goes in the same step.
- Deleting a composition takes its sprites along. A duplicate gets
sprites of its own.
- Pasting into a scene or container turns the sprite into a project
asset. Pasting into another composition gives that one a copy. The
clipboard carries the sprite, so cut and paste loses nothing.
- Owned sprites stay out of the asset list and the pickers. The
inspector shows them with a dot in front.
- "Make project asset" in the item's menu, on the timeline and in the
hierarchy, turns the sprite into an ordinary one.
- The first track of the Composition tab gets its top line, as the
Song tab's has.
Found on the way: loading kept an owner only for the asset types a
song can hold. A composition's sprite would have lost its owner and
turned up in the list after a reload.
Tests:
- Unit composition-sprites: 11 new. Without the rule 5 of them are
red, without the loading fix the loading test is.
- e2e 69 on melektaus-atx: ALL PASSED, 15 checks, 69k new
- Gate on melektaus-atx: 305 files, 4714 tests
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>