import type { SizeCallback, V86Starter } from "components/apps/V86/types"; import useWindowSize from "components/system/Window/useWindowSize"; import { useEffect } from "react"; const SET_SCREEN_GFX = "screen-set-size-graphical"; const SET_SCREEN_TXT = "screen-set-size-text"; const useV86ScreenSize = ( id: string, screenContainer: React.MutableRefObject, emulator?: V86Starter ): void => { const { updateWindowSize } = useWindowSize(id); useEffect(() => { const setScreenGfx: SizeCallback = ([width, height]) => updateWindowSize(height, width); const setScreenText: SizeCallback = ([, rows]) => { const { height, width } = screenContainer.current ?.querySelector("span:last-of-type") ?.getBoundingClientRect() || {}; if (height && width) updateWindowSize(rows * height, width); }; emulator?.add_listener(SET_SCREEN_GFX, setScreenGfx); emulator?.add_listener(SET_SCREEN_TXT, setScreenText); return () => { emulator?.remove_listener(SET_SCREEN_GFX, setScreenGfx); emulator?.remove_listener(SET_SCREEN_TXT, setScreenText); }; }, [emulator, screenContainer, updateWindowSize]); }; export default useV86ScreenSize;