summaryrefslogtreecommitdiff
path: root/apps/web/src/hooks
diff options
context:
space:
mode:
authorMaze Winther <mazewinther@gmail.com>2025-07-17 23:51:12 +0200
committerMaze Winther <mazewinther@gmail.com>2025-07-17 23:51:12 +0200
commitf492ac9aad81a26e7806ddfd433e11f1cd24c609 (patch)
tree24b1cbf240c02fd357d3fa40a210028e547fa111 /apps/web/src/hooks
parent499f06cb526e833450857315c06bed5a6db35a8f (diff)
downloadopencut-f492ac9aad81a26e7806ddfd433e11f1cd24c609.tar.gz
fix: timeline element resizing
Diffstat (limited to 'apps/web/src/hooks')
-rw-r--r--apps/web/src/hooks/use-timeline-element-resize.ts12
1 files changed, 11 insertions, 1 deletions
diff --git a/apps/web/src/hooks/use-timeline-element-resize.ts b/apps/web/src/hooks/use-timeline-element-resize.ts
index 0e409977..63b566c2 100644
--- a/apps/web/src/hooks/use-timeline-element-resize.ts
+++ b/apps/web/src/hooks/use-timeline-element-resize.ts
@@ -1,6 +1,7 @@
import { useState, useEffect } from "react";
import { ResizeState, TimelineElement, TimelineTrack } from "@/types/timeline";
import { useMediaStore } from "@/stores/media-store";
+import { useTimelineStore } from "@/stores/timeline-store";
interface UseTimelineElementResizeProps {
element: TimelineElement;
@@ -28,6 +29,7 @@ export function useTimelineElementResize({
}: UseTimelineElementResizeProps) {
const [resizing, setResizing] = useState<ResizeState | null>(null);
const { mediaItems } = useMediaStore();
+ const { updateElementStartTime } = useTimelineStore();
// Set up document-level mouse listeners during resize (like proper drag behavior)
useEffect(() => {
@@ -100,12 +102,20 @@ export function useTimelineElementResize({
const deltaTime = deltaX / (50 * zoomLevel);
if (resizing.side === "left") {
- // Left resize - only trim within original duration
+ // Left resize - trim content AND move element position to the right
const maxAllowed = element.duration - resizing.initialTrimEnd - 0.1;
const calculated = resizing.initialTrimStart + deltaTime;
const newTrimStart = Math.max(0, Math.min(maxAllowed, calculated));
+ // Calculate how much the trim changed and update startTime accordingly
+ const trimDelta = newTrimStart - resizing.initialTrimStart;
+ const newStartTime = element.startTime + trimDelta;
+
+ // Update both trim and start time for proper left resize behavior
onUpdateTrim(track.id, element.id, newTrimStart, resizing.initialTrimEnd);
+
+ // Update startTime so element moves to the right when trimming from left
+ updateElementStartTime(track.id, element.id, newStartTime);
} else {
// Right resize - can extend duration for supported element types
const calculated = resizing.initialTrimEnd - deltaTime;