From 32c3eaba12cc914eade14d10827db4192bd9acb6 Mon Sep 17 00:00:00 2001 From: Kuingsmile <96409857+Kuingsmile@users.noreply.github.com> Date: Tue, 5 Aug 2025 16:46:30 +0800 Subject: [PATCH] :sparkles: Feature(custom): optimize mini page --- src/main/apis/app/window/windowList.ts | 18 +++++++++++++++++- src/main/lifeCycle/index.ts | 10 +++++++++- src/main/utils/windowHelper.ts | 19 ++++++++++++++----- src/renderer/pages/MiniPage.vue | 5 ++--- 4 files changed, 42 insertions(+), 10 deletions(-) diff --git a/src/main/apis/app/window/windowList.ts b/src/main/apis/app/window/windowList.ts index 69393155..8b2b5436 100644 --- a/src/main/apis/app/window/windowList.ts +++ b/src/main/apis/app/window/windowList.ts @@ -4,7 +4,7 @@ import { fileURLToPath } from 'node:url' import bus from '@core/bus' import { CREATE_APP_MENU } from '@core/bus/constants' import db from '@core/datastore' -import { app } from 'electron' +import { app, BrowserWindow, Rectangle } from 'electron' import { TOGGLE_SHORTKEY_MODIFIED_MODE } from '#/events/constants' import { IWindowListItem } from '#/types/electron' @@ -28,6 +28,21 @@ const getDefaultWindowSizes = (): { width: number; height: number } => { } } +function setMiniWindowShape (win: BrowserWindow) { + const radius = 32 + const shape: Rectangle[] = [] + + for (let y = -radius; y <= radius; y++) { + for (let x = -radius; x <= radius; x++) { + if (x * x + y * y <= radius * radius) { + shape.push({ x: radius + x, y: radius + y, width: 1, height: 1 }) + } + } + } + + win.setShape(shape) +} + const __dirname = path.dirname(fileURLToPath(import.meta.url)) const preloadPath = fileURLToPath(new URL('../preload/index.mjs', import.meta.url)) @@ -211,6 +226,7 @@ windowList.set(IWindowList.MINI_WINDOW, { hash: 'mini-page' }) } + setMiniWindowShape(window) } }) diff --git a/src/main/lifeCycle/index.ts b/src/main/lifeCycle/index.ts index 138f1af7..b177ecfe 100644 --- a/src/main/lifeCycle/index.ts +++ b/src/main/lifeCycle/index.ts @@ -227,7 +227,15 @@ class LifeCycle { const { width, height } = screen.getPrimaryDisplay().workAreaSize const lastPosition = db.get(configPaths.settings.miniWindowPosition) if (lastPosition) { - miniWindow.setPosition(lastPosition[0], lastPosition[1]) + if (lastPosition[0] < 0 || lastPosition[0] > width || lastPosition[1] < 0 || lastPosition[1] > height) { + miniWindow.setPosition(width - 100, height - 100) + db.set(configPaths.settings.miniWindowPosition, [width - 100, height - 100]) + } else if (lastPosition[0] + miniWindow.getSize()[0] > width || lastPosition[1] + miniWindow.getSize()[1] > height) { + miniWindow.setPosition(width - miniWindow.getSize()[0], height - miniWindow.getSize()[1]) + db.set(configPaths.settings.miniWindowPosition, [width - miniWindow.getSize()[0], height - miniWindow.getSize()[1]]) + } else { + miniWindow.setPosition(lastPosition[0], lastPosition[1]) + } } else { miniWindow.setPosition(width - 100, height - 100) } diff --git a/src/main/utils/windowHelper.ts b/src/main/utils/windowHelper.ts index a572dcf7..f96617dc 100644 --- a/src/main/utils/windowHelper.ts +++ b/src/main/utils/windowHelper.ts @@ -13,15 +13,24 @@ export function openMiniWindow (hideSettingWindow: boolean = true) { } const { width, height } = screen.getPrimaryDisplay().workAreaSize const lastPosition = db.get(configPaths.settings.miniWindowPosition) - if (lastPosition) { - miniWindow.setPosition(lastPosition[0], lastPosition[1]) - } else { - miniWindow.setPosition(width - 100, height - 100) - } const setPositionFunc = () => { const position = miniWindow.getPosition() db.set(configPaths.settings.miniWindowPosition, position) } + if (lastPosition) { + if (lastPosition[0] < 0 || lastPosition[0] > width || lastPosition[1] < 0 || lastPosition[1] > height) { + miniWindow.setPosition(width - 100, height - 100) + db.set(configPaths.settings.miniWindowPosition, [width - 100, height - 100]) + } else if (lastPosition[0] + miniWindow.getSize()[0] > width || lastPosition[1] + miniWindow.getSize()[1] > height) { + miniWindow.setPosition(width - miniWindow.getSize()[0], height - miniWindow.getSize()[1]) + db.set(configPaths.settings.miniWindowPosition, [width - miniWindow.getSize()[0], height - miniWindow.getSize()[1]]) + } else { + miniWindow.setPosition(lastPosition[0], lastPosition[1]) + } + } else { + miniWindow.setPosition(width - 100, height - 100) + } + miniWindow.on('close', setPositionFunc) miniWindow.on('move', setPositionFunc) miniWindow.show() diff --git a/src/renderer/pages/MiniPage.vue b/src/renderer/pages/MiniPage.vue index 68c11bf9..609f37f1 100644 --- a/src/renderer/pages/MiniPage.vue +++ b/src/renderer/pages/MiniPage.vue @@ -16,6 +16,8 @@ v-if="!dragover && !isShowingProgress" :src="logoPath ? logoPath : '/squareLogo.png'" style="width: 100%; height: 100%; border-radius: 50%" + draggable="false" + @dragstart.prevent >