mirror of
https://github.com/ksyasuda/SubMiner.git
synced 2026-04-10 04:19:25 -07:00
- switch Windows overlay tracking to native win32 polling with native owner and z-order helpers - keep the visible overlay and stats overlay aligned across focus handoff, transient tracker misses, and minimize/restore cycles - start the visible overlay click-through and hide the initial opaque startup frame until the tracked transparent state settles - add a backlog task for the inconsistent mpv y-t overlay toggle after menu toggles
72 lines
2.7 KiB
TypeScript
72 lines
2.7 KiB
TypeScript
import type { Session } from 'electron';
|
|
|
|
type OverlayWindowKind = 'visible' | 'modal';
|
|
|
|
export function createCreateOverlayWindowHandler<TWindow>(deps: {
|
|
createOverlayWindowCore: (
|
|
kind: OverlayWindowKind,
|
|
options: {
|
|
isDev: boolean;
|
|
ensureOverlayWindowLevel: (window: TWindow) => void;
|
|
onRuntimeOptionsChanged: () => void;
|
|
setOverlayDebugVisualizationEnabled: (enabled: boolean) => void;
|
|
isOverlayVisible: (windowKind: OverlayWindowKind) => boolean;
|
|
tryHandleOverlayShortcutLocalFallback: (input: Electron.Input) => boolean;
|
|
forwardTabToMpv: () => void;
|
|
onVisibleWindowBlurred?: () => void;
|
|
onWindowContentReady?: () => void;
|
|
onWindowClosed: (windowKind: OverlayWindowKind) => void;
|
|
yomitanSession?: Session | null;
|
|
},
|
|
) => TWindow;
|
|
isDev: boolean;
|
|
ensureOverlayWindowLevel: (window: TWindow) => void;
|
|
onRuntimeOptionsChanged: () => void;
|
|
setOverlayDebugVisualizationEnabled: (enabled: boolean) => void;
|
|
isOverlayVisible: (windowKind: OverlayWindowKind) => boolean;
|
|
tryHandleOverlayShortcutLocalFallback: (input: Electron.Input) => boolean;
|
|
forwardTabToMpv: () => void;
|
|
onVisibleWindowBlurred?: () => void;
|
|
onWindowContentReady?: () => void;
|
|
onWindowClosed: (windowKind: OverlayWindowKind) => void;
|
|
getYomitanSession?: () => Session | null;
|
|
}) {
|
|
return (kind: OverlayWindowKind): TWindow => {
|
|
return deps.createOverlayWindowCore(kind, {
|
|
isDev: deps.isDev,
|
|
ensureOverlayWindowLevel: deps.ensureOverlayWindowLevel,
|
|
onRuntimeOptionsChanged: deps.onRuntimeOptionsChanged,
|
|
setOverlayDebugVisualizationEnabled: deps.setOverlayDebugVisualizationEnabled,
|
|
isOverlayVisible: deps.isOverlayVisible,
|
|
tryHandleOverlayShortcutLocalFallback: deps.tryHandleOverlayShortcutLocalFallback,
|
|
forwardTabToMpv: deps.forwardTabToMpv,
|
|
onVisibleWindowBlurred: deps.onVisibleWindowBlurred,
|
|
onWindowContentReady: deps.onWindowContentReady,
|
|
onWindowClosed: deps.onWindowClosed,
|
|
yomitanSession: deps.getYomitanSession?.() ?? null,
|
|
});
|
|
};
|
|
}
|
|
|
|
export function createCreateMainWindowHandler<TWindow>(deps: {
|
|
createOverlayWindow: (kind: OverlayWindowKind) => TWindow;
|
|
setMainWindow: (window: TWindow | null) => void;
|
|
}) {
|
|
return (): TWindow => {
|
|
const window = deps.createOverlayWindow('visible');
|
|
deps.setMainWindow(window);
|
|
return window;
|
|
};
|
|
}
|
|
|
|
export function createCreateModalWindowHandler<TWindow>(deps: {
|
|
createOverlayWindow: (kind: OverlayWindowKind) => TWindow;
|
|
setModalWindow: (window: TWindow | null) => void;
|
|
}) {
|
|
return (): TWindow => {
|
|
const window = deps.createOverlayWindow('modal');
|
|
deps.setModalWindow(window);
|
|
return window;
|
|
};
|
|
}
|