diff options
| author | Maze Winther <mazewinther@gmail.com> | 2025-07-17 23:51:12 +0200 |
|---|---|---|
| committer | Maze Winther <mazewinther@gmail.com> | 2025-07-17 23:51:12 +0200 |
| commit | f492ac9aad81a26e7806ddfd433e11f1cd24c609 (patch) | |
| tree | 24b1cbf240c02fd357d3fa40a210028e547fa111 /apps/web/src/hooks/use-timeline-element-resize.ts | |
| parent | 499f06cb526e833450857315c06bed5a6db35a8f (diff) | |
| download | opencut-f492ac9aad81a26e7806ddfd433e11f1cd24c609.tar.gz | |
fix: timeline element resizing
Diffstat (limited to 'apps/web/src/hooks/use-timeline-element-resize.ts')
| -rw-r--r-- | apps/web/src/hooks/use-timeline-element-resize.ts | 12 |
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; |
