summaryrefslogtreecommitdiff
path: root/apps/web/src/components/editor/timeline.tsx
diff options
context:
space:
mode:
authorSamSyntax <klfracc@gmail.com>2025-06-23 21:13:18 +0200
committerSamSyntax <klfracc@gmail.com>2025-06-23 21:13:18 +0200
commit59ca411c534f17b038ee5a074f981cc26ffffce4 (patch)
tree67fd225c976c739cb3896a7bd8eee25c37098802 /apps/web/src/components/editor/timeline.tsx
parenta6a520db70ef639e066d1012fa2ecf7e26c53049 (diff)
downloadopencut-59ca411c534f17b038ee5a074f981cc26ffffce4.tar.gz
Implementing playhead scrubbing over timeline
Diffstat (limited to 'apps/web/src/components/editor/timeline.tsx')
-rw-r--r--apps/web/src/components/editor/timeline.tsx24
1 files changed, 21 insertions, 3 deletions
diff --git a/apps/web/src/components/editor/timeline.tsx b/apps/web/src/components/editor/timeline.tsx
index 675b398c..83ff5904 100644
--- a/apps/web/src/components/editor/timeline.tsx
+++ b/apps/web/src/components/editor/timeline.tsx
@@ -557,8 +557,26 @@ export function Timeline() {
{/* Playhead in ruler */}
<div
- className="absolute top-0 bottom-0 w-0.5 bg-red-500 pointer-events-none z-10"
+ className="absolute top-0 bottom-0 w-0.5 bg-red-500 cursor-ew-resize z-1000"
style={{ left: `${currentTime * 50 * zoomLevel}px` }}
+ onMouseDown={(e) => {
+ e.preventDefault();
+ e.stopPropagation();
+ const handleMouseMove = (e: MouseEvent) => {
+ const timeline = timelineRef.current;
+ if (!timeline) return;
+ const rect = timeline.getBoundingClientRect();
+ const mouseX = Math.max(0, e.clientX - rect.left);
+ const newTime = mouseX / (50 * zoomLevel);
+ seek(newTime);
+ };
+ const handleMouseUp = () => {
+ window.removeEventListener("mousemove", handleMouseMove);
+ window.removeEventListener("mouseup", handleMouseUp);
+ };
+ window.addEventListener("mousemove", handleMouseMove);
+ window.addEventListener("mouseup", handleMouseUp);
+ }}
>
<div className="absolute top-1 left-1/2 transform -translate-x-1/2 w-3 h-3 bg-red-500 rounded-full border-2 border-white shadow-sm" />
</div>
@@ -670,7 +688,7 @@ export function Timeline() {
{/* Playhead for tracks area */}
<div
- className="absolute top-0 w-0.5 bg-red-500 pointer-events-none z-20"
+ className="absolute top-0 w-0.5 bg-red-500 cursor-ew-resize z-20"
style={{
left: `${currentTime * 50 * zoomLevel}px`,
height: `${tracks.length * 60}px`,
@@ -1510,4 +1528,4 @@ function TimelineTrackContent({
</div>
</div>
);
-} \ No newline at end of file
+}