diff options
| author | Maze Winther <mazewinther@gmail.com> | 2026-04-07 04:41:27 +0200 |
|---|---|---|
| committer | Maze Winther <mazewinther@gmail.com> | 2026-04-07 04:41:27 +0200 |
| commit | cbd1b8212370c67b34a70dccd21bd82de72fead2 (patch) | |
| tree | d97cbee2aae22c22b59c59a50e9f8a6af0ae8ccf /apps/web/src/lib/ripple | |
| parent | 4f7d401a974047d37673ee8e3840dceaaddc295c (diff) | |
| download | opencut-cbd1b8212370c67b34a70dccd21bd82de72fead2.tar.gz | |
refactor: structured track layout per scene
Diffstat (limited to 'apps/web/src/lib/ripple')
| -rw-r--r-- | apps/web/src/lib/ripple/apply.ts | 28 | ||||
| -rw-r--r-- | apps/web/src/lib/ripple/diff.ts | 23 |
2 files changed, 36 insertions, 15 deletions
diff --git a/apps/web/src/lib/ripple/apply.ts b/apps/web/src/lib/ripple/apply.ts index 098a0247..f96e4600 100644 --- a/apps/web/src/lib/ripple/apply.ts +++ b/apps/web/src/lib/ripple/apply.ts @@ -1,4 +1,4 @@ -import type { TimelineTrack } from "@/lib/timeline/types"; +import type { SceneTracks, TimelineTrack } from "@/lib/timeline/types"; import { rippleShiftElements } from "./shift"; export interface RippleAdjustment { @@ -11,9 +11,9 @@ export function applyRippleAdjustments({ tracks, adjustments, }: { - tracks: TimelineTrack[]; + tracks: SceneTracks; adjustments: RippleAdjustment[]; -}): TimelineTrack[] { +}): SceneTracks { if (adjustments.length === 0) { return tracks; } @@ -25,12 +25,24 @@ export function applyRippleAdjustments({ adjustmentsByTrack.set(adjustment.trackId, trackAdjustments); } - return tracks.map((track) => - applyTrackRippleAdjustments({ - track, - adjustments: adjustmentsByTrack.get(track.id) ?? [], + return { + overlay: tracks.overlay.map((track) => + applyTrackRippleAdjustments({ + track, + adjustments: adjustmentsByTrack.get(track.id) ?? [], + }), + ), + main: applyTrackRippleAdjustments({ + track: tracks.main, + adjustments: adjustmentsByTrack.get(tracks.main.id) ?? [], }), - ); + audio: tracks.audio.map((track) => + applyTrackRippleAdjustments({ + track, + adjustments: adjustmentsByTrack.get(track.id) ?? [], + }), + ), + }; } function applyTrackRippleAdjustments< diff --git a/apps/web/src/lib/ripple/diff.ts b/apps/web/src/lib/ripple/diff.ts index 22b8d996..49238738 100644 --- a/apps/web/src/lib/ripple/diff.ts +++ b/apps/web/src/lib/ripple/diff.ts @@ -1,5 +1,4 @@ - -import type { TimelineElement, TimelineTrack } from "@/lib/timeline/types"; +import type { SceneTracks, TimelineElement, TimelineTrack } from "@/lib/timeline/types"; import type { RippleAdjustment } from "./apply"; interface Interval { @@ -15,15 +14,25 @@ export function computeRippleAdjustments({ beforeTracks, afterTracks, }: { - beforeTracks: TimelineTrack[]; - afterTracks: TimelineTrack[]; + beforeTracks: SceneTracks; + afterTracks: SceneTracks; }): RippleAdjustment[] { - const afterTracksById = new Map(afterTracks.map((track) => [track.id, track])); + const beforeTrackList = [ + ...beforeTracks.overlay, + beforeTracks.main, + ...beforeTracks.audio, + ]; + const afterTrackList = [ + ...afterTracks.overlay, + afterTracks.main, + ...afterTracks.audio, + ]; + const afterTracksById = new Map(afterTrackList.map((track) => [track.id, track])); const allAfterElementIds = new Set( - afterTracks.flatMap((track) => track.elements.map((element) => element.id)), + afterTrackList.flatMap((track) => track.elements.map((element) => element.id)), ); - return beforeTracks.flatMap((beforeTrack): RippleAdjustment[] => + return beforeTrackList.flatMap((beforeTrack): RippleAdjustment[] => computeTrackRippleAdjustments({ trackId: beforeTrack.id, beforeElements: beforeTrack.elements, |
