mirror of
https://github.com/OpenCut-app/OpenCut.git
synced 2026-07-13 21:52:53 +02:00
refactor: move isScrubbing state to playback manager
This commit is contained in:
@@ -6,6 +6,7 @@ export class PlaybackManager {
|
|||||||
private volume = 1;
|
private volume = 1;
|
||||||
private muted = false;
|
private muted = false;
|
||||||
private previousVolume = 1;
|
private previousVolume = 1;
|
||||||
|
private isScrubbing = false;
|
||||||
private listeners = new Set<() => void>();
|
private listeners = new Set<() => void>();
|
||||||
private playbackTimer: number | null = null;
|
private playbackTimer: number | null = null;
|
||||||
private lastUpdate = 0;
|
private lastUpdate = 0;
|
||||||
@@ -101,6 +102,15 @@ export class PlaybackManager {
|
|||||||
return this.muted;
|
return this.muted;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setScrubbing({ isScrubbing }: { isScrubbing: boolean }): void {
|
||||||
|
this.isScrubbing = isScrubbing;
|
||||||
|
this.notify();
|
||||||
|
}
|
||||||
|
|
||||||
|
getIsScrubbing(): boolean {
|
||||||
|
return this.isScrubbing;
|
||||||
|
}
|
||||||
|
|
||||||
subscribe(listener: () => void): () => void {
|
subscribe(listener: () => void): () => void {
|
||||||
this.listeners.add(listener);
|
this.listeners.add(listener);
|
||||||
return () => this.listeners.delete(listener);
|
return () => this.listeners.delete(listener);
|
||||||
|
|||||||
@@ -24,13 +24,13 @@ export function useTimelinePlayhead({
|
|||||||
const currentTime = editor.playback.getCurrentTime();
|
const currentTime = editor.playback.getCurrentTime();
|
||||||
const duration = editor.timeline.getTotalDuration();
|
const duration = editor.timeline.getTotalDuration();
|
||||||
const isPlaying = editor.playback.getIsPlaying();
|
const isPlaying = editor.playback.getIsPlaying();
|
||||||
|
const isScrubbing = editor.playback.getIsScrubbing();
|
||||||
|
|
||||||
const seek = useCallback(
|
const seek = useCallback(
|
||||||
({ time }: { time: number }) => editor.playback.seek({ time }),
|
({ time }: { time: number }) => editor.playback.seek({ time }),
|
||||||
[editor.playback],
|
[editor.playback],
|
||||||
);
|
);
|
||||||
|
|
||||||
const [isScrubbing, setIsScrubbing] = useState(false);
|
|
||||||
const [scrubTime, setScrubTime] = useState<number | null>(null);
|
const [scrubTime, setScrubTime] = useState<number | null>(null);
|
||||||
|
|
||||||
const [isDraggingRuler, setIsDraggingRuler] = useState(false);
|
const [isDraggingRuler, setIsDraggingRuler] = useState(false);
|
||||||
@@ -81,10 +81,10 @@ export function useTimelinePlayhead({
|
|||||||
({ event }: { event: React.MouseEvent }) => {
|
({ event }: { event: React.MouseEvent }) => {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
setIsScrubbing(true);
|
editor.playback.setScrubbing({ isScrubbing: true });
|
||||||
handleScrub({ event });
|
handleScrub({ event });
|
||||||
},
|
},
|
||||||
[handleScrub],
|
[handleScrub, editor.playback],
|
||||||
);
|
);
|
||||||
|
|
||||||
const handleRulerMouseDown = useCallback(
|
const handleRulerMouseDown = useCallback(
|
||||||
@@ -97,10 +97,10 @@ export function useTimelinePlayhead({
|
|||||||
setIsDraggingRuler(true);
|
setIsDraggingRuler(true);
|
||||||
setHasDraggedRuler(false);
|
setHasDraggedRuler(false);
|
||||||
|
|
||||||
setIsScrubbing(true);
|
editor.playback.setScrubbing({ isScrubbing: true });
|
||||||
handleScrub({ event });
|
handleScrub({ event });
|
||||||
},
|
},
|
||||||
[handleScrub, playheadRef],
|
[handleScrub, playheadRef, editor.playback],
|
||||||
);
|
);
|
||||||
|
|
||||||
const handlePlayheadMouseDownEvent = useCallback(
|
const handlePlayheadMouseDownEvent = useCallback(
|
||||||
@@ -132,7 +132,7 @@ export function useTimelinePlayhead({
|
|||||||
};
|
};
|
||||||
|
|
||||||
const handleMouseUp = ({ event }: { event: MouseEvent }) => {
|
const handleMouseUp = ({ event }: { event: MouseEvent }) => {
|
||||||
setIsScrubbing(false);
|
editor.playback.setScrubbing({ isScrubbing: false });
|
||||||
if (scrubTime !== null) {
|
if (scrubTime !== null) {
|
||||||
seek({ time: scrubTime });
|
seek({ time: scrubTime });
|
||||||
editor.project.setTimelineViewState({
|
editor.project.setTimelineViewState({
|
||||||
|
|||||||
Reference in New Issue
Block a user