summaryrefslogtreecommitdiff
path: root/apps/web/src/lib/commands/timeline/element/retime
diff options
context:
space:
mode:
authorMaze Winther <mazewinther@gmail.com>2026-04-06 00:02:23 +0200
committerMaze Winther <mazewinther@gmail.com>2026-04-06 00:02:23 +0200
commit44d8c4c8764d49a8e8d0ae713432c07f07cb7597 (patch)
tree4657187279adb475ea710231feb3d0bd4add36ed /apps/web/src/lib/commands/timeline/element/retime
parent20235d0724a70e6787b6cbdbfa054b1c5d8f62e9 (diff)
downloadopencut-44d8c4c8764d49a8e8d0ae713432c07f07cb7597.tar.gz
refactor: unify element updates into pipeline and centralize ripple
Diffstat (limited to 'apps/web/src/lib/commands/timeline/element/retime')
-rw-r--r--apps/web/src/lib/commands/timeline/element/retime/index.ts1
-rw-r--r--apps/web/src/lib/commands/timeline/element/retime/update-element-retime.ts115
2 files changed, 0 insertions, 116 deletions
diff --git a/apps/web/src/lib/commands/timeline/element/retime/index.ts b/apps/web/src/lib/commands/timeline/element/retime/index.ts
deleted file mode 100644
index e9c24c44..00000000
--- a/apps/web/src/lib/commands/timeline/element/retime/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { UpdateElementRetimeCommand } from "./update-element-retime";
diff --git a/apps/web/src/lib/commands/timeline/element/retime/update-element-retime.ts b/apps/web/src/lib/commands/timeline/element/retime/update-element-retime.ts
deleted file mode 100644
index 474396a1..00000000
--- a/apps/web/src/lib/commands/timeline/element/retime/update-element-retime.ts
+++ /dev/null
@@ -1,115 +0,0 @@
-import { EditorCore } from "@/core";
-import { clampRetimeRate } from "@/lib/retime/rate";
-import { clampAnimationsToDuration } from "@/lib/animation";
-import { Command, type CommandResult } from "@/lib/commands/base-command";
-import { getTimelineDurationForSourceSpan, getSourceSpanAtClipTime } from "@/lib/retime";
-import { isRetimableElement, updateElementInTracks } from "@/lib/timeline";
-import type { RetimeConfig, TimelineTrack } from "@/lib/timeline";
-
-function getSourceDuration({
- trimStart,
- trimEnd,
- duration,
- sourceDuration,
- retime,
-}: {
- trimStart: number;
- trimEnd: number;
- duration: number;
- sourceDuration?: number;
- retime?: RetimeConfig;
-}): number {
- if (typeof sourceDuration === "number") {
- return sourceDuration;
- }
-
- return (
- trimStart +
- getSourceSpanAtClipTime({
- clipTime: duration,
- retime,
- }) +
- trimEnd
- );
-}
-
-export class UpdateElementRetimeCommand extends Command {
- private savedState: TimelineTrack[] | null = null;
- private readonly trackId: string;
- private readonly elementId: string;
- private readonly retime: RetimeConfig | undefined;
-
- constructor({
- trackId,
- elementId,
- retime,
- }: {
- trackId: string;
- elementId: string;
- retime?: RetimeConfig;
- }) {
- super();
- this.trackId = trackId;
- this.elementId = elementId;
- this.retime = retime;
- }
-
- execute(): CommandResult | undefined {
- const editor = EditorCore.getInstance();
- this.savedState = editor.timeline.getTracks();
-
- const updatedTracks = updateElementInTracks({
- tracks: this.savedState,
- trackId: this.trackId,
- elementId: this.elementId,
- elementPredicate: isRetimableElement,
- update: (element) => {
- if (!isRetimableElement(element)) {
- return element;
- }
-
- const nextRetime = this.retime
- ? {
- ...this.retime,
- rate: clampRetimeRate({ rate: this.retime.rate }),
- }
- : undefined;
- const sourceDuration = getSourceDuration({
- trimStart: element.trimStart,
- trimEnd: element.trimEnd,
- duration: element.duration,
- sourceDuration: element.sourceDuration,
- retime: element.retime,
- });
- const visibleSourceSpan = Math.max(
- 0,
- sourceDuration - element.trimStart - element.trimEnd,
- );
- const nextDuration = getTimelineDurationForSourceSpan({
- sourceSpan: visibleSourceSpan,
- retime: nextRetime,
- });
-
- return {
- ...element,
- retime: nextRetime,
- duration: nextDuration,
- animations: clampAnimationsToDuration({
- animations: element.animations,
- duration: nextDuration,
- }),
- };
- },
- });
-
- editor.timeline.updateTracks(updatedTracks);
- return undefined;
- }
-
- undo(): void {
- if (this.savedState) {
- const editor = EditorCore.getInstance();
- editor.timeline.updateTracks(this.savedState);
- }
- }
-}