An animation with more rows than the panel is tall cut the bottom rows
off. There was no way to reach them, their fields or their keys.
- The view has a new `scrollY`. Rows scroll up under the ruler, which
stays where it is together with the tab head.
- The wheel over the header column scrolls the rows. Over the cells it
still zooms, and `Shift`+wheel still scrolls across.
- A scrollbar at the right edge shows up only when the rows do not
fit. Its thumb can be dragged, a click beside it jumps there.
- The middle button pans both ways. `Shift`+drag stays across only.
- A row picked or added out of view is scrolled just far enough to be
seen whole. Value fields out of view are not drawn.
- The tab keeps its scroll like its zoom when switching.
Found on the way: `zoomCells` built a new view from `panX` and
`cellWidth` only, so every zoom would have dropped the scroll. The
type check caught it, and a unit test now holds it.
Tests:
- tsc, eslint, Prettier clean
- Unit timeline-view: 20 green, 6 new. Bending `rowAt` to ignore the
scroll or `revealRow` to do nothing turns exactly those tests red.
- e2e 25 on melektaus-atx: ALL PASSED, 37 checks (25j, 25j-ii new).
32 rows, the wheel brings the last field into view and typing keys
77 there. Dragging the thumb up goes back to 0.
- Gate on melektaus-atx: green, 305 files, 4730 tests.
- Not checked in the browser: the middle button, revealing a picked
row, the wheel right over a value field.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The rows of the animation timeline stood in the order they were keyed.
With several objects and properties the list was hard to read, and a
value could only be changed by picking a key and using the inspector.
The Play button also kept saying Pause after scrubbing had paused.
- Each object gets a header row with its name, indented by depth. The
groups follow the scene hierarchy, the root first. Rows whose object
is missing go to the end.
- Under an object the rows follow the order in which it lists its
properties: X, Y, Z, then the order of the inspector. Only the view
is sorted, the animation itself is unchanged and there is no undo
step. After a move in the hierarchy the order is right by itself.
- The row head shows the same field as the inspector with the value at
the playhead. Without keys it shows the value of the object, for a
relative row the offset.
- A change in that field sets or changes the key at the playhead,
selects it and is one undo step. A running playback pauses first.
- The Play/Pause button follows every change of the playing state, so
scrubbing that pauses shows Play again.
Tests:
- Unit animation + timeline-view: 100 passed, 3 new.
- e2e 25 on melektaus-atx: ALL PASSED, 34 checks, 3 new (groups,
order and values at frame 4, a typed 55 becomes a selected key on
frame 4, Play then a click on the ruler shows Play and pauses).
- Gate on melektaus-atx: exit 0, 297 files, 4561 tests.
- tsc, eslint, Prettier clean.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
To play a clip at its real speed the user had to know its length,
work out the last whole frame by hand and then scroll far to the
right to set the end key. The timeline now does the sum, and it
zooms out far enough to see a long clip in one piece.
- The context menu of a Video time row gets "Video at 1x to its end
from frame N". It keys the playhead with the row's value there and
the last whole frame before the clip ends with the matching time.
- The start key turns linear and keys in between are removed. The
whole run is one undo step (KeyStraightRunCommand).
- The clip is the one the sprite wears at the playhead, also when
the texture is keyed in the same animation (rowVideoAt).
- The entry is greyed out for relative rows, without a video, while
the length is unknown, or when the playhead is already at the end.
- The status line names the result, e.g. "frame 572 shows 57.2 s of
57.27 s".
- The timeline zooms out to 0.02 px per frame instead of 4 px. The
ruler labels follow a 1-2-5 step without an upper limit.
Tests:
- Unit video-clock + timeline-view: 27 tests green, 8 new
- e2e 66 (atx, alone): ALL PASSED, 23 checks, 66l new
- Gate (atx): CHECK EXIT 0, 297 files, 4553 tests
- Counter-check: the command keeping the keys in between turns
exactly the command test red
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>