|
|
|
|
@ -1,9 +1,9 @@
|
|
|
|
|
import { getCurrentWindow } from '@tauri-apps/api/window';
|
|
|
|
|
import { useState, useEffect, useCallback, useRef } from 'react';
|
|
|
|
|
import type { ViewerSettings } from '../types';
|
|
|
|
|
import type { ChapterData } from '../types';
|
|
|
|
|
import { MangaPage } from './MangaPage';
|
|
|
|
|
import { ViewerToolbar } from './ViewerToolbar';
|
|
|
|
|
import { getCurrentWindow } from '@tauri-apps/api/window';
|
|
|
|
|
import { SettingsPanel } from './SettingsPanel';
|
|
|
|
|
|
|
|
|
|
interface MangaViewerProps {
|
|
|
|
|
@ -172,7 +172,7 @@ export function MangaViewer({
|
|
|
|
|
};
|
|
|
|
|
window.addEventListener('keydown', handler);
|
|
|
|
|
return () => window.removeEventListener('keydown', handler);
|
|
|
|
|
}, [goNext, goPrev, showSettings, settings.direction, toggleFullscreen]);
|
|
|
|
|
}, [goNext, goPrev, showSettings, settings.direction]);
|
|
|
|
|
|
|
|
|
|
// Auto-hide toolbar
|
|
|
|
|
const resetToolbarTimer = useCallback(() => {
|
|
|
|
|
@ -190,17 +190,23 @@ export function MangaViewer({
|
|
|
|
|
};
|
|
|
|
|
}, []);
|
|
|
|
|
|
|
|
|
|
const toggleFullscreen = useCallback(async () => {
|
|
|
|
|
const toggleFullscreen = async () => {
|
|
|
|
|
try {
|
|
|
|
|
const win = getCurrentWindow();
|
|
|
|
|
const current = await win.isFullscreen();
|
|
|
|
|
const nextState = !current;
|
|
|
|
|
await win.setFullscreen(nextState);
|
|
|
|
|
setIsFullscreen(nextState);
|
|
|
|
|
const isFull = await win.isFullscreen();
|
|
|
|
|
await win.setFullscreen(!isFull);
|
|
|
|
|
setIsFullscreen(!isFull);
|
|
|
|
|
} catch (e) {
|
|
|
|
|
console.error('Failed to toggle fullscreen', e);
|
|
|
|
|
console.error("Native fullscreen failed, using DOM fallback", e);
|
|
|
|
|
if (!document.fullscreenElement) {
|
|
|
|
|
containerRef.current?.requestFullscreen().catch(console.error);
|
|
|
|
|
setIsFullscreen(true);
|
|
|
|
|
} else {
|
|
|
|
|
document.exitFullscreen().catch(console.error);
|
|
|
|
|
setIsFullscreen(false);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}, []);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const bgMap = {
|
|
|
|
|
black: '#000000',
|
|
|
|
|
|