mirror of
https://github.com/storytold/artcraft.git
synced 2026-11-06 02:00:46 +00:00
Camera framing - Replace the full-canvas Letterbox with CameraFrame: an inset, aspect-correct frame (dimmed surround, rule-of-thirds, focal label) shown only in camera view and record mode — the free viewport no longer shows mattes - The frame shows the EXACT render framing: CameraController.setCameraFrameRect offsets the viewport projection via camera.setViewOffset; snapshots and the timeline recorder clear/reapply the offset so captures stay full-bleed - recordTimeline now encodes at the render camera's resolution/aspect with the grid hidden (was grabbing the raw viewport canvas) - Frame avoids the bottom UI; expanded-timeline height is measured live Aspect ratio - Default is now 16:9 via DEFAULT_CAMERA_ASPECT_RATIO (store, controller, scene reset, newScene); removed the model cold-sync that forced Square - New top-right aspect popover (AspectRatioMenu rewritten on PopoverMenu with proportional AspectRatioIcon, now exported from ui-promptbox) Timeline - Expanded editor shows every scene object as a track row (no selection needed), capped at ~3.5 rows then scrollable (scrollbar hidden so lanes stay width-aligned with the ruler) - Restyled per design: dark lanes, keyframe diamonds + connecting line, playhead diamond handle, select-none everywhere - Scrubbing: drag the ruler to scrub smoothly, following the pointer 1:1; times quantize to the timeline's frame grid (30fps) — transport readout shows frame timecode (m:ss:ff); keyframe drags quantize the same way - Fixed playhead/keyframe misalignment (scrollbar shrank lanes vs ruler; label indent must be padding, not margin, to keep the w-32 column) - Delete/Backspace removes the selected keyframe (capture-phase, so the engine's delete-scene-object keybind doesn't fire); clicking away deselects it - Motion (easing) popover opens from the curve chip BETWEEN keyframes (new timelineEasingKeyframeId store field), centered above the chip in lane coordinates, backdrop-blurred, dismissed on outside click; selecting a keyframe no longer opens it - Camera-track playback/scrubbing is now visible in camera view: the timeline mirrors the animated ::CAM:: pose onto the viewport camera Record mode - Viewport camera fully locked: mouse-look blocked via isMovable(), right-drag pan and wheel zoom gated in useFreeCam (build mode unaffected) Chrome - Outliner restyled as the "Scene" panel (+ Add via shared openAssetModal, two-line rows with friendly kind labels, blue selected card), open by default, vertically centered, fixed 45vh height independent of aspect ratio - Build/Record pill fully rounded (new TabSelector listClassName prop) - CameraStatusPill moved to the top-right camera cluster, height-matched with the aspect popover - ExitCameraView is a regular labeled button docked right of the timeline bar