137 lines
3.5 KiB
TypeScript
137 lines
3.5 KiB
TypeScript
import { BrowserWindow, screen } from 'electron'
|
|
import path from 'node:path'
|
|
import { fileURLToPath } from 'node:url'
|
|
|
|
const __dirname = path.dirname(fileURLToPath(import.meta.url))
|
|
|
|
const APP_ROOT = path.join(__dirname, '..')
|
|
const VITE_DEV_SERVER_URL = process.env['VITE_DEV_SERVER_URL']
|
|
const RENDERER_DIST = path.join(APP_ROOT, 'dist')
|
|
|
|
export function createHudOverlayWindow(): BrowserWindow {
|
|
const primaryDisplay = screen.getPrimaryDisplay();
|
|
const { workArea } = primaryDisplay;
|
|
|
|
// Define the desired window size
|
|
const windowWidth = 350;
|
|
const windowHeight = 80;
|
|
|
|
const x = Math.floor(workArea.x + workArea.width - windowWidth - 5); // Align to the right edge of the work area
|
|
// const x = Math.floor(workArea.x + (workArea.width - windowWidth) / 2); // Center horizontally within the work area
|
|
const y = Math.floor(workArea.y + workArea.height - (windowHeight - 30));
|
|
|
|
const win = new BrowserWindow({
|
|
width: windowWidth,
|
|
height: windowHeight,
|
|
minWidth: 350,
|
|
maxWidth: 350,
|
|
minHeight: 80,
|
|
maxHeight: 80,
|
|
x: x,
|
|
y: y,
|
|
frame: false,
|
|
transparent: true,
|
|
resizable: false,
|
|
alwaysOnTop: true,
|
|
skipTaskbar: true,
|
|
hasShadow: false,
|
|
webPreferences: {
|
|
preload: path.join(__dirname, 'preload.mjs'),
|
|
nodeIntegration: false,
|
|
contextIsolation: true,
|
|
backgroundThrottling: false,
|
|
},
|
|
})
|
|
|
|
|
|
win.webContents.on('did-finish-load', () => {
|
|
win?.webContents.send('main-process-message', (new Date).toLocaleString())
|
|
})
|
|
|
|
if (VITE_DEV_SERVER_URL) {
|
|
win.loadURL(VITE_DEV_SERVER_URL + '?windowType=hud-overlay')
|
|
} else {
|
|
win.loadFile(path.join(RENDERER_DIST, 'index.html'), {
|
|
query: { windowType: 'hud-overlay' }
|
|
})
|
|
}
|
|
|
|
return win
|
|
}
|
|
|
|
export function createEditorWindow(): BrowserWindow {
|
|
const win = new BrowserWindow({
|
|
width: 1200,
|
|
height: 800,
|
|
minWidth: 800,
|
|
minHeight: 600,
|
|
titleBarStyle: 'hiddenInset',
|
|
trafficLightPosition: { x: 12, y: 12 },
|
|
transparent: false,
|
|
resizable: true,
|
|
alwaysOnTop: false,
|
|
skipTaskbar: false,
|
|
title: 'OpenScreen',
|
|
backgroundColor: '#000000',
|
|
webPreferences: {
|
|
preload: path.join(__dirname, 'preload.mjs'),
|
|
nodeIntegration: false,
|
|
contextIsolation: true,
|
|
webSecurity: false,
|
|
backgroundThrottling: false,
|
|
},
|
|
})
|
|
|
|
// Maximize the window by default
|
|
win.maximize();
|
|
|
|
win.webContents.on('did-finish-load', () => {
|
|
win?.webContents.send('main-process-message', (new Date).toLocaleString())
|
|
})
|
|
|
|
if (VITE_DEV_SERVER_URL) {
|
|
win.loadURL(VITE_DEV_SERVER_URL + '?windowType=editor')
|
|
} else {
|
|
win.loadFile(path.join(RENDERER_DIST, 'index.html'), {
|
|
query: { windowType: 'editor' }
|
|
})
|
|
}
|
|
|
|
win.webContents.openDevTools();
|
|
|
|
return win
|
|
}
|
|
|
|
export function createSourceSelectorWindow(): BrowserWindow {
|
|
const { width, height } = screen.getPrimaryDisplay().workAreaSize
|
|
|
|
const win = new BrowserWindow({
|
|
width: 620,
|
|
height: 420,
|
|
minHeight: 350,
|
|
maxHeight: 500,
|
|
x: Math.round((width - 620) / 2),
|
|
y: Math.round((height - 420) / 2),
|
|
frame: false,
|
|
resizable: false,
|
|
alwaysOnTop: true,
|
|
transparent: true,
|
|
backgroundColor: '#00000000',
|
|
webPreferences: {
|
|
preload: path.join(__dirname, 'preload.mjs'),
|
|
nodeIntegration: false,
|
|
contextIsolation: true,
|
|
},
|
|
})
|
|
|
|
if (VITE_DEV_SERVER_URL) {
|
|
win.loadURL(VITE_DEV_SERVER_URL + '?windowType=source-selector')
|
|
} else {
|
|
win.loadFile(path.join(RENDERER_DIST, 'index.html'), {
|
|
query: { windowType: 'source-selector' }
|
|
})
|
|
}
|
|
|
|
return win
|
|
}
|