From ab001a7ab90c31ce28f795598d98a69d6cf060da Mon Sep 17 00:00:00 2001 From: Neko Ayaka Date: Sun, 19 Oct 2025 01:38:21 +0800 Subject: [PATCH] fix(stage-tamagotchi): live2d focus issue & added useElectronAllDisplays, useElectronRelativeMouse, and updated devtools --- .../src/main/services/electron/index.ts | 1 + .../src/main/services/electron/screen.ts | 14 ++++ .../src/main/services/electron/window.ts | 27 +++++++ .../src/main/services/fade-on-hover/index.ts | 5 -- .../src/main/services/misc/mouse.ts | 21 ----- .../main/windows/main/rpc/index.electron.ts | 7 +- .../windows/settings/rpc/index.electron.ts | 5 +- .../src/renderer/layouts/default.vue | 2 +- ...play.vue => use-electron-all-displays.vue} | 28 ++----- .../devtools/use-electron-relative-mouse.vue | 80 ++++++++++++++++++ .../pages/devtools/use-window-mouse.vue | 4 +- .../src/renderer/pages/index.vue | 6 +- .../pages/settings/system/developer.vue | 10 ++- .../src/renderer/stores/window-mouse.ts | 24 ------ .../src/renderer/stores/window.ts | 81 ++++++++++++++++++- .../src/shared/electron/index.ts | 2 + .../src/shared/electron/screen.ts | 7 +- .../src/shared/electron/window.ts | 12 +++ apps/stage-tamagotchi/src/shared/eventa.ts | 5 +- 19 files changed, 244 insertions(+), 97 deletions(-) create mode 100644 apps/stage-tamagotchi/src/main/services/electron/window.ts delete mode 100644 apps/stage-tamagotchi/src/main/services/fade-on-hover/index.ts delete mode 100644 apps/stage-tamagotchi/src/main/services/misc/mouse.ts rename apps/stage-tamagotchi/src/renderer/pages/devtools/{electron-display.vue => use-electron-all-displays.vue} (80%) create mode 100644 apps/stage-tamagotchi/src/renderer/pages/devtools/use-electron-relative-mouse.vue delete mode 100644 apps/stage-tamagotchi/src/renderer/stores/window-mouse.ts create mode 100644 apps/stage-tamagotchi/src/shared/electron/window.ts diff --git a/apps/stage-tamagotchi/src/main/services/electron/index.ts b/apps/stage-tamagotchi/src/main/services/electron/index.ts index 1e648f4d7..7a466d4ef 100644 --- a/apps/stage-tamagotchi/src/main/services/electron/index.ts +++ b/apps/stage-tamagotchi/src/main/services/electron/index.ts @@ -1 +1,2 @@ export * from './screen' +export * from './window' diff --git a/apps/stage-tamagotchi/src/main/services/electron/screen.ts b/apps/stage-tamagotchi/src/main/services/electron/screen.ts index 91ae084f9..47f7cdb89 100644 --- a/apps/stage-tamagotchi/src/main/services/electron/screen.ts +++ b/apps/stage-tamagotchi/src/main/services/electron/screen.ts @@ -4,9 +4,23 @@ import type { BrowserWindow } from 'electron' import { defineInvokeHandler } from '@unbird/eventa' import { screen } from 'electron' +import { cursorScreenPoint, startLoopGetCursorScreenPoint } from '../../../shared/electron/screen' import { electron } from '../../../shared/eventa' +import { onAppBeforeQuit, onAppWindowAllClosed } from '../../libs/bootkit/lifecycle' +import { useLoop } from '../../libs/event-loop' export function createScreenService(params: { context: ReturnType['context'], window: BrowserWindow }) { + const { start, stop } = useLoop(() => { + const dipPos = screen.getCursorScreenPoint() + params.context.emit(cursorScreenPoint, dipPos) + }, { + autoStart: false, + }) + + onAppWindowAllClosed(() => stop()) + onAppBeforeQuit(() => stop()) + defineInvokeHandler(params.context, startLoopGetCursorScreenPoint, () => start()) + defineInvokeHandler(params.context, electron.screen.getAllDisplays, () => screen.getAllDisplays()) defineInvokeHandler(params.context, electron.screen.getPrimaryDisplay, () => screen.getPrimaryDisplay()) defineInvokeHandler(params.context, electron.screen.dipToScreenPoint, point => screen.dipToScreenPoint(point)) diff --git a/apps/stage-tamagotchi/src/main/services/electron/window.ts b/apps/stage-tamagotchi/src/main/services/electron/window.ts new file mode 100644 index 000000000..84dcb4f41 --- /dev/null +++ b/apps/stage-tamagotchi/src/main/services/electron/window.ts @@ -0,0 +1,27 @@ +import type { createContext } from '@unbird/eventa/adapters/electron/main' +import type { BrowserWindow } from 'electron' + +import { defineInvokeHandler } from '@unbird/eventa' + +import { bounds, startLoopGetBounds } from '../../../shared/electron/window' +import { electron } from '../../../shared/eventa' +import { onAppBeforeQuit, onAppWindowAllClosed } from '../../libs/bootkit/lifecycle' +import { useLoop } from '../../libs/event-loop' + +export function createWindowService(params: { context: ReturnType['context'], window: BrowserWindow }) { + const { start, stop } = useLoop(() => { + if (params.window.isDestroyed()) { + return + } + + params.context.emit(bounds, params.window.getBounds()) + }, { + autoStart: false, + }) + + onAppWindowAllClosed(() => stop()) + onAppBeforeQuit(() => stop()) + defineInvokeHandler(params.context, startLoopGetBounds, () => start()) + + defineInvokeHandler(params.context, electron.window.getBounds, () => params.window.getBounds()) +} diff --git a/apps/stage-tamagotchi/src/main/services/fade-on-hover/index.ts b/apps/stage-tamagotchi/src/main/services/fade-on-hover/index.ts deleted file mode 100644 index d56f7a619..000000000 --- a/apps/stage-tamagotchi/src/main/services/fade-on-hover/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -import type { createContext } from '@unbird/eventa/adapters/electron/main' - -export function createFadeOnHoverService(_context: ReturnType['context']) { - -} diff --git a/apps/stage-tamagotchi/src/main/services/misc/mouse.ts b/apps/stage-tamagotchi/src/main/services/misc/mouse.ts deleted file mode 100644 index a7d4be746..000000000 --- a/apps/stage-tamagotchi/src/main/services/misc/mouse.ts +++ /dev/null @@ -1,21 +0,0 @@ -import type { createContext } from '@unbird/eventa/adapters/electron/main' - -import { defineInvokeHandler } from '@unbird/eventa' -import { screen } from 'electron' - -import { electronMousePosition, electronStartTrackMousePosition } from '../../../shared/eventa' -import { onAppBeforeQuit, onAppWindowAllClosed } from '../../libs/bootkit/lifecycle' -import { useLoop } from '../../libs/event-loop' - -export function createMouseService(context: ReturnType['context']) { - const { start, stop } = useLoop(() => { - const dipPos = screen.getCursorScreenPoint() - context.emit(electronMousePosition, dipPos) - }, { - autoStart: false, - }) - - onAppWindowAllClosed(() => stop()) - onAppBeforeQuit(() => stop()) - defineInvokeHandler(context, electronStartTrackMousePosition, () => start()) -} diff --git a/apps/stage-tamagotchi/src/main/windows/main/rpc/index.electron.ts b/apps/stage-tamagotchi/src/main/windows/main/rpc/index.electron.ts index bea5732a0..d0f64974b 100644 --- a/apps/stage-tamagotchi/src/main/windows/main/rpc/index.electron.ts +++ b/apps/stage-tamagotchi/src/main/windows/main/rpc/index.electron.ts @@ -5,17 +5,14 @@ import { createContext } from '@unbird/eventa/adapters/electron/main' import { ipcMain } from 'electron' import { electronOpenMainDevtools, electronOpenSettings } from '../../../../shared/eventa' -import { createScreenService } from '../../../services/electron' -import { createFadeOnHoverService } from '../../../services/fade-on-hover' -import { createMouseService } from '../../../services/misc/mouse' +import { createScreenService, createWindowService } from '../../../services/electron' import { toggleWindowShow } from '../../shared' export function setupMainWindowElectronInvokes(params: { window: BrowserWindow, settingsWindow: () => Promise }) { const { context } = createContext(ipcMain, params.window) - createFadeOnHoverService(context) - createMouseService(context) createScreenService({ context, window: params.window }) + createWindowService({ context, window: params.window }) defineInvokeHandler(context, electronOpenMainDevtools, () => params.window.webContents.openDevTools({ mode: 'detach' })) defineInvokeHandler(context, electronOpenSettings, async () => toggleWindowShow(await params.settingsWindow())) diff --git a/apps/stage-tamagotchi/src/main/windows/settings/rpc/index.electron.ts b/apps/stage-tamagotchi/src/main/windows/settings/rpc/index.electron.ts index 90a7dc618..f1389d6a2 100644 --- a/apps/stage-tamagotchi/src/main/windows/settings/rpc/index.electron.ts +++ b/apps/stage-tamagotchi/src/main/windows/settings/rpc/index.electron.ts @@ -5,14 +5,13 @@ import { createContext } from '@unbird/eventa/adapters/electron/main' import { ipcMain } from 'electron' import { electronOpenSettingsDevtools } from '../../../../shared/eventa' -import { createScreenService } from '../../../services/electron' -import { createFadeOnHoverService } from '../../../services/fade-on-hover' +import { createScreenService, createWindowService } from '../../../services/electron' export async function setupSettingsWindowInvokes(params: { settingsWindow: BrowserWindow }) { const { context } = createContext(ipcMain, params.settingsWindow) - createFadeOnHoverService(context) createScreenService({ context, window: params.settingsWindow }) + createWindowService({ context, window: params.settingsWindow }) defineInvokeHandler(context, electronOpenSettingsDevtools, async () => params.settingsWindow.webContents.openDevTools({ mode: 'detach' })) } diff --git a/apps/stage-tamagotchi/src/renderer/layouts/default.vue b/apps/stage-tamagotchi/src/renderer/layouts/default.vue index 77beeecd0..83cede6ca 100644 --- a/apps/stage-tamagotchi/src/renderer/layouts/default.vue +++ b/apps/stage-tamagotchi/src/renderer/layouts/default.vue @@ -3,7 +3,7 @@ import { RouterView } from 'vue-router' diff --git a/apps/stage-tamagotchi/src/renderer/pages/devtools/electron-display.vue b/apps/stage-tamagotchi/src/renderer/pages/devtools/use-electron-all-displays.vue similarity index 80% rename from apps/stage-tamagotchi/src/renderer/pages/devtools/electron-display.vue rename to apps/stage-tamagotchi/src/renderer/pages/devtools/use-electron-all-displays.vue index 89faf132a..97f7b18fb 100644 --- a/apps/stage-tamagotchi/src/renderer/pages/devtools/electron-display.vue +++ b/apps/stage-tamagotchi/src/renderer/pages/devtools/use-electron-all-displays.vue @@ -1,29 +1,15 @@ + + + + +meta: + layout: settings + diff --git a/apps/stage-tamagotchi/src/renderer/pages/devtools/use-window-mouse.vue b/apps/stage-tamagotchi/src/renderer/pages/devtools/use-window-mouse.vue index 32ea968ba..ce96c6e93 100644 --- a/apps/stage-tamagotchi/src/renderer/pages/devtools/use-window-mouse.vue +++ b/apps/stage-tamagotchi/src/renderer/pages/devtools/use-window-mouse.vue @@ -1,7 +1,7 @@