summaryrefslogtreecommitdiff
path: root/apps/web/src/timeline/element-snap-source.ts
blob: ec1e5f65e6b7b92ba7c3a935c1aaef93aaa9ecf4 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import type { SceneTracks } from "@/timeline";
import type { SnapPoint } from "@/timeline/snapping";

export function getElementEdgeSnapPoints({
	tracks,
	excludeElementIds,
}: {
	tracks: SceneTracks;
	excludeElementIds?: Set<string>;
}): SnapPoint[] {
	const snapPoints: SnapPoint[] = [];
	const orderedTracks = [...tracks.overlay, tracks.main, ...tracks.audio];

	for (const track of orderedTracks) {
		for (const element of track.elements) {
			if (excludeElementIds?.has(element.id)) {
				continue;
			}

			snapPoints.push(
				{
					time: element.startTime,
					type: "element-start",
					elementId: element.id,
					trackId: track.id,
				},
				{
					time: element.startTime + element.duration,
					type: "element-end",
					elementId: element.id,
					trackId: track.id,
				},
			);
		}
	}

	return snapPoints;
}