diff --git a/src/main/node/package-lock.json b/package-lock.json similarity index 100% rename from src/main/node/package-lock.json rename to package-lock.json diff --git a/src/main/node/package.json b/package.json similarity index 65% rename from src/main/node/package.json rename to package.json index 4f840d8..b4b5e03 100644 --- a/src/main/node/package.json +++ b/package.json @@ -6,26 +6,21 @@ "build": { "appId": "dev.kruhlmann.imgfloat.overlay", "productName": "Imgfloat", - "files": [ - "app.js" - ], + "files": [ "src/main/node/app.js" ], "asar": false, - "directories": { - "output": "dist" - }, + "directories": { "output": "dist" }, "linux": { - "target": [ - "AppImage" - ], + "target": ["AppImage"], "category": "Utility" + "icon": "assets/icon/raw_icon.png" }, "win": { - "target": [ - "nsis" - ] + "target": ["nsis"] + "icon": "assets/icon/appicon.ico" }, "mac": { "category": "public.app-category.productivity" + "icon": "assets/icon/macos.icns" } }, "devDependencies": { diff --git a/src/main/node/app.js b/src/main/node/app.js index 55b7c1d..0060bc8 100644 --- a/src/main/node/app.js +++ b/src/main/node/app.js @@ -1,24 +1,22 @@ const { app, BrowserWindow } = require('electron'); +const path = require('path'); function createWindow() { - const url = process.env.ELECTRON_START_URL || "https://imgfloat.kruhlmann.dev/channels"; - const width = Number.parseInt(process.env.ELECTRON_WINDOW_WIDTH, 10) || 960; - const height = Number.parseInt(process.env.ELECTRON_WINDOW_HEIGHT, 10) || 640; - - const win = new BrowserWindow({ - width: width, - height: height, + const url = "https://imgfloat.kruhlmann.dev/channels"; + const initialWindowWidthPx = 960; + const initialWindowHeightPx = 640; + const applicationWindow = new BrowserWindow({ + width: initialWindowWidthPx, + height: initialWindowHeightPx, transparent: true, frame: true, backgroundColor: '#00000000', alwaysOnTop: false, - webPreferences: { - backgroundThrottling: false - } + icon: path.join(__dirname, "../resources/assets/icon/appicon.ico"), + webPreferences: { backgroundThrottling: false }, }); let canvasSizeInterval; - const clearCanvasSizeInterval = () => { if (canvasSizeInterval) { clearInterval(canvasSizeInterval); @@ -27,11 +25,11 @@ function createWindow() { }; const lockWindowToCanvas = async () => { - if (win.isDestroyed()) { + if (applicationWindow.isDestroyed()) { return false; } try { - const size = await win.webContents.executeJavaScript(`(() => { + const size = await applicationWindow.webContents.executeJavaScript(`(() => { const canvas = document.getElementById('broadcast-canvas'); if (!canvas || !canvas.width || !canvas.height) { return null; @@ -40,13 +38,13 @@ function createWindow() { })();`); if (size?.width && size?.height) { - const [currentWidth, currentHeight] = win.getSize(); + const [currentWidth, currentHeight] = applicationWindow.getSize(); if (currentWidth !== size.width || currentHeight !== size.height) { - win.setSize(size.width, size.height, false); + applicationWindow.setSize(size.width, size.height, false); } - win.setMinimumSize(size.width, size.height); - win.setMaximumSize(size.width, size.height); - win.setResizable(false); + applicationWindow.setMinimumSize(size.width, size.height); + applicationWindow.setMaximumSize(size.width, size.height); + applicationWindow.setResizable(false); return true; } } catch (error) { @@ -66,27 +64,25 @@ function createWindow() { lockWindowToCanvas(); } else { clearCanvasSizeInterval(); - win.setResizable(true); - win.setMinimumSize(320, 240); - win.setMaximumSize(10000, 10000); - win.setSize(width, height, false); + applicationWindow.setResizable(true); + applicationWindow.setMinimumSize(320, 240); + applicationWindow.setMaximumSize(10000, 10000); + applicationWindow.setSize(initialWindowWidthPx, initialWindowHeightPx, false); } } catch { // Ignore malformed URLs while navigating. } }; - win.loadURL(url); + applicationWindow.loadURL(url); - win.webContents.on('did-finish-load', () => { - handleNavigation(win.webContents.getURL()); + applicationWindow.webContents.on('did-finish-load', () => { + handleNavigation(applicationWindow.webContents.getURL()); }); - win.webContents.on('did-navigate', (_event, navigationUrl) => handleNavigation(navigationUrl)); - win.webContents.on('did-navigate-in-page', (_event, navigationUrl) => handleNavigation(navigationUrl)); - win.on('closed', clearCanvasSizeInterval); + applicationWindow.webContents.on('did-navigate', (_event, navigationUrl) => handleNavigation(navigationUrl)); + applicationWindow.webContents.on('did-navigate-in-page', (_event, navigationUrl) => handleNavigation(navigationUrl)); + applicationWindow.on('closed', clearCanvasSizeInterval); } -app.whenReady().then(() => { - createWindow(); -}); +app.whenReady().then(createWindow); diff --git a/src/main/resources/assets/icon/appicon.ico b/src/main/resources/assets/icon/appicon.ico new file mode 100644 index 0000000..79fb49f Binary files /dev/null and b/src/main/resources/assets/icon/appicon.ico differ diff --git a/src/main/resources/assets/icon/favicon.ico b/src/main/resources/assets/icon/favicon.ico new file mode 100644 index 0000000..79fb49f Binary files /dev/null and b/src/main/resources/assets/icon/favicon.ico differ diff --git a/src/main/resources/assets/icon/macos.icns b/src/main/resources/assets/icon/macos.icns new file mode 100644 index 0000000..b2de9cb Binary files /dev/null and b/src/main/resources/assets/icon/macos.icns differ diff --git a/src/main/resources/assets/raw_icon.png b/src/main/resources/assets/icon/raw.png similarity index 100% rename from src/main/resources/assets/raw_icon.png rename to src/main/resources/assets/icon/raw.png diff --git a/src/main/resources/assets/raw_icon.xcf b/src/main/resources/assets/icon/raw.xcf similarity index 99% rename from src/main/resources/assets/raw_icon.xcf rename to src/main/resources/assets/icon/raw.xcf index e3b5d64..7de1bdc 100644 Binary files a/src/main/resources/assets/raw_icon.xcf and b/src/main/resources/assets/icon/raw.xcf differ