diff options
| author | Maze Winther <mazewinther@gmail.com> | 2026-04-20 11:31:17 +0200 |
|---|---|---|
| committer | Maze Winther <mazewinther@gmail.com> | 2026-04-20 11:31:17 +0200 |
| commit | 3e89d2998588f8e35c524e523ba2ee853f0f6475 (patch) | |
| tree | 57221f96c1259b3b07e3ddf8c1adefc502b9d8eb /apps/web/src/timeline/components/track-layout.ts | |
| parent | 729d10592f4e802f91c555c309ff3ba4b119f843 (diff) | |
| download | opencut-3e89d2998588f8e35c524e523ba2ee853f0f6475.tar.gz | |
refactor: restructure files to their domains, new preview overlay system, and dep graph
Diffstat (limited to 'apps/web/src/timeline/components/track-layout.ts')
| -rw-r--r-- | apps/web/src/timeline/components/track-layout.ts | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/apps/web/src/timeline/components/track-layout.ts b/apps/web/src/timeline/components/track-layout.ts new file mode 100644 index 00000000..59f4a5f9 --- /dev/null +++ b/apps/web/src/timeline/components/track-layout.ts @@ -0,0 +1,60 @@ +import type { TrackType } from "@/timeline"; +import { + KEYFRAME_LANE_HEIGHT_PX, + TIMELINE_TRACK_GAP_PX, + TIMELINE_TRACK_HEIGHTS_PX, +} from "./layout"; + +export function getTrackHeight({ type }: { type: TrackType }): number { + return TIMELINE_TRACK_HEIGHTS_PX[type]; +} + +export function getExpandedTrackHeight({ + type, + expandedLaneCount, +}: { + type: TrackType; + expandedLaneCount: number; +}): number { + return ( + TIMELINE_TRACK_HEIGHTS_PX[type] + + expandedLaneCount * KEYFRAME_LANE_HEIGHT_PX + ); +} + +export function getCumulativeHeightBefore({ + tracks, + trackIndex, + getExtraHeight, +}: { + tracks: Array<{ type: TrackType }>; + trackIndex: number; + getExtraHeight?: (trackIndex: number) => number; +}): number { + return tracks + .slice(0, trackIndex) + .reduce( + (sum, track, i) => + sum + + getTrackHeight({ type: track.type }) + + (getExtraHeight?.(i) ?? 0) + + TIMELINE_TRACK_GAP_PX, + 0, + ); +} + +export function getTotalTracksHeight({ + tracks, + getExtraHeight, +}: { + tracks: Array<{ type: TrackType }>; + getExtraHeight?: (trackIndex: number) => number; +}): number { + const tracksHeight = tracks.reduce( + (sum, track, i) => + sum + getTrackHeight({ type: track.type }) + (getExtraHeight?.(i) ?? 0), + 0, + ); + const gapsHeight = Math.max(0, tracks.length - 1) * TIMELINE_TRACK_GAP_PX; + return tracksHeight + gapsHeight; +} |
