-
Notifications
You must be signed in to change notification settings - Fork 1
Precomp Phase G: timeline tabs, media bin section, stage preview #107
Open
Description
Phase G of the Precomps epic (#100, ADR-0029). Depends on Phase F (#106). Final v1 phase.
Scope
- Timeline tabs: tab strip on the timeline panel host (
src/ui/TimelineWindow.cppwraps a singleTimelineWidget); per-tab state ={Timeline*, selection}.TimelineWidget::setTimeline()exists (TimelineWidget.hpp:99) — audit cached per-timeline widget state for re-point safety; fallback = one widget instance per tab. Main-timeline tab is not closable. Sections/cues UI hidden in definition tabs (root-only concept). - Open paths: double-click a precomp instance (
TimelineWidgetInput.cppdouble-click handling) opens its definition's tab;OpenPrecompTabCommand{definitionId}for scripts/UI. - MediaBin precomp section: list definitions (name, canvas, duration, instance count); "New Precomp..." creation flow (name + canvas + fps + duration →
CreatePrecompDefinitionCommand); drag source with payloadPRECOMP_DEFcarrying the definition id (pattern:MediaBinWindow.cpp:668-678); timeline accept branch alongside MEDIA_FILE/LAYER_KIND (TimelineWidgetRender.cpp:749-800) + drop callback wired in Engine (Engine.cpp:488-549pattern) →CreatePrecompInstanceCommand. LayersWindow palette row for Kind::Precomp. - Stage preview: while a definition tab is active, Engine maintains one hidden preview instance (identity mapping against the tab Timeline's edit playhead, speed=1, no wrap, excluded from root UI and screen routing) flowing through the standard snapshot → PASS 1.6 path; stage view displays its compose target via the EditorReadGate-gated read (ADR-0014 D3D12Renderer m_composeTargets: show-thread emplace_back/resize races editor readers #75 /Video-texture slot free races editor ImGui frames holding the slot's SRV handle (same hazard class as #75) #89 protocol). De-scope fallback (pre-approved in ADR): if the gated read fights back, ship tabs-for-editing with preview via instances on the main timeline, and file the preview instance as a follow-up.
- Compose soft-cap warning: editor-side toast/log when projected slot demand (screens + generatives + ×ばつeffect-layers + instances) ≥ 48 of 64.
Tests
scripts/integration/precomp_tab_open.json:OpenPrecompTab→AddClipToPrecomp→ close tab → assert instance resync (shadow count + render hash change on the main timeline).- Preview: headless CaptureHash of the preview instance's RT if the gated read allows (stretch); otherwise a manual verification checklist posted on this issue before close.
Acceptance
- Author → drop → loop → edit-propagate workflow demonstrated end-to-end in the editor; local ctest green.
- Epic Epic: Precomps — nested timeline containers (ADR-0029) #100 acceptance items satisfied; flip ADR-0029 to Accepted (with amendments if implementation diverged).