From 50853a23e237503cbf89385ed646418583726f50 Mon Sep 17 00:00:00 2001 From: talksik Date: Thu, 12 May 2022 17:58:36 -0500 Subject: [PATCH] adding in first layer --- .vscode/settings.json | 2 +- .../src/providers/ElectronProvider.tsx | 64 +++++++++++++++++++ 2 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 packages/desktop/src/providers/ElectronProvider.tsx diff --git a/.vscode/settings.json b/.vscode/settings.json index f14e08f..e2e226e 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -8,7 +8,7 @@ "editor.defaultFormatter": "esbenp.prettier-vscode", "workbench.colorTheme": "Default Light+", "javascript.format.semicolons": "insert", - "window.zoomLevel": 1, + "window.zoomLevel": 2, "eslint.workingDirectories": ["./packages/desktop"] } diff --git a/packages/desktop/src/providers/ElectronProvider.tsx b/packages/desktop/src/providers/ElectronProvider.tsx new file mode 100644 index 0000000..bef3f0d --- /dev/null +++ b/packages/desktop/src/providers/ElectronProvider.tsx @@ -0,0 +1,64 @@ +import React, { useEffect, useState } from 'react'; +import Channels, { DEFAULT_APP_PRESET, Dimensions } from '../electron/constants'; + +interface IElectronProvider { + // pass handlers and current dimensions? + desktopMode: DesktopMode; +} + +type DesktopMode = 'overlayOnly' | 'mainApp'; + +const ElectronContext = React.createContext({ + desktopMode: 'mainApp', +}); + +export default function ElectronProvider({ children }: { children: React.ReactNode }) { + const [desktopMode, setDesktopMode] = useState('mainApp'); + + // handle all window resizing logic + useEffect(() => { + // add dimensions if it's not overlay only mode + let finalDimensions: Dimensions = { height: 0, width: 0 }; + let finalPosition: 'center' | 'topRight'; + let stayOnTop: boolean; + + if (desktopMode === 'mainApp') { + stayOnTop = false; + finalDimensions = DEFAULT_APP_PRESET; + } else if (desktopMode === 'overlayOnly') { + stayOnTop = true; + finalDimensions = { + height: 668, + width: 360, + }; + } + + // send the final dimensions to main process + window.electronAPI.window.resizeWindow({ + setAlwaysOnTop: stayOnTop, + dimensions: { + height: finalDimensions.height, + width: finalDimensions.width, + }, + setPosition: finalPosition, + addDimensions: false, + }); + }, [desktopMode]); + + // handle window focus and unfocus + useEffect(() => { + window.electronAPI.on(Channels.ON_WINDOW_BLUR, () => { + console.log( + 'window blurring now, should be always on top and then ill tell main process to change dimensions', + ); + // TODO: testing mode... uncomment both instructions below + // setDesktopMode("overlayOnly"); + + // todo: make sure that if I am toggle broadcasted into a line, then don't deselect selected line + // the overlay should be showing selected line if I am broadcasting toggled into it as well as of course all other toggle tuned ones + // setSelectedLineId(null); + }); + }, [setDesktopMode]); + + return {children}; +}