diff --git a/web/src/views/events/RecordingView.tsx b/web/src/views/events/RecordingView.tsx index 5494b6e87..a428453e1 100644 --- a/web/src/views/events/RecordingView.tsx +++ b/web/src/views/events/RecordingView.tsx @@ -76,6 +76,7 @@ export function RecordingView({ const [mainCamera, setMainCamera] = useState(startCamera); const mainControllerRef = useRef(null); + const mainLayoutRef = useRef(null); const previewRefs = useRef<{ [camera: string]: PreviewController }>({}); const [playbackStart, setPlaybackStart] = useState(startTime); @@ -208,7 +209,36 @@ export function RecordingView({ [currentTime], ); - // motion timeline data + // fullscreen + + const [fullscreen, setFullscreen] = useState(false); + + const onToggleFullscreen = useCallback( + (full: boolean) => { + if (full) { + mainLayoutRef.current?.requestFullscreen(); + } else { + document.exitFullscreen(); + } + }, + [mainLayoutRef], + ); + + useEffect(() => { + if (mainLayoutRef.current == null) { + return; + } + const fsListener = () => { + setFullscreen(document.fullscreenElement != null); + }; + document.addEventListener("fullscreenchange", fsListener); + + return () => { + document.removeEventListener("fullscreenchange", fsListener); + }; + }, [mainLayoutRef]); + + // layout const getCameraAspect = useCallback( (cam: string) => { @@ -372,6 +402,7 @@ export function RecordingView({
@@ -400,6 +431,7 @@ export function RecordingView({ cameraPreviews={allPreviews ?? []} startTimestamp={playbackStart} hotKeys={exportMode != "select"} + fullscreen={fullscreen} onTimestampUpdate={(timestamp) => { setPlayerTime(timestamp); setCurrentTime(timestamp); @@ -413,6 +445,7 @@ export function RecordingView({ }} isScrubbing={scrubbing || exportMode == "timeline"} setFullResolution={setFullResolution} + setFullscreen={onToggleFullscreen} />
{isDesktop && (