refactor(stage-tamagotchi): re-structure under misc

This commit is contained in:
Neko Ayaka
2025-10-13 20:19:43 +08:00
parent a63e1d9f1f
commit 2326bf3b61
6 changed files with 31 additions and 24 deletions
@@ -1,21 +1,5 @@
import type { createContext } from '@unbird/eventa/adapters/electron/main'
import { defineInvokeHandler } from '@unbird/eventa'
import { screen } from 'electron'
export function createFadeOnHoverService(_context: ReturnType<typeof createContext>['context']) {
import { electronCursorPoint, electronStartTrackingCursorPoint } from '../../../shared/eventa'
import { onAppBeforeQuit, onAppWindowAllClosed } from '../../libs/bootkit/lifecycle'
import { useLoop } from '../../libs/event-loop'
export function createFadeOnHoverService(context: ReturnType<typeof createContext>['context']) {
const { start, stop } = useLoop(() => {
const dipPos = screen.getCursorScreenPoint()
context.emit(electronCursorPoint, dipPos)
}, {
autoStart: false,
})
onAppWindowAllClosed(() => stop())
onAppBeforeQuit(() => stop())
defineInvokeHandler(context, electronStartTrackingCursorPoint, () => start())
}
@@ -0,0 +1,21 @@
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<typeof createContext>['context']) {
const { start, stop } = useLoop(() => {
const dipPos = screen.getCursorScreenPoint()
context.emit(electronMousePosition, dipPos)
}, {
autoStart: false,
})
onAppWindowAllClosed(() => stop())
onAppBeforeQuit(() => stop())
defineInvokeHandler(context, electronStartTrackMousePosition, () => start())
}
@@ -6,12 +6,14 @@ import { ipcMain } from 'electron'
import { electronOpenMainDevtools, electronOpenSettings } from '../../../../shared/eventa'
import { createFadeOnHoverService } from '../../../services/fade-on-hover'
import { createMouseService } from '../../../services/misc/mouse'
import { toggleWindowShow } from '../../shared'
export function setupMainWindowElectronInvokes(params: { window: BrowserWindow, settingsWindow: () => Promise<BrowserWindow> }) {
const { context } = createContext(ipcMain, params.window)
createFadeOnHoverService(context)
createMouseService(context)
defineInvokeHandler(context, electronOpenMainDevtools, () => params.window.webContents.openDevTools({ mode: 'detach' }))
defineInvokeHandler(context, electronOpenSettings, async () => toggleWindowShow(await params.settingsWindow()))
}
+2 -2
View File
@@ -9,7 +9,7 @@ import { onMounted, watch } from 'vue'
import { useI18n } from 'vue-i18n'
import { RouterView, useRouter } from 'vue-router'
import { electronOpenSettings, electronStartTrackingCursorPoint } from '../shared/eventa'
import { electronOpenSettings, electronStartTrackMousePosition } from '../shared/eventa'
import { useWindowMode } from './stores/window-controls'
useWindowMode()
@@ -32,7 +32,7 @@ onMounted(async () => {
await settingsStore.initializeStageModel()
const { context } = createContext(window.electron.ipcRenderer)
const startTrackingCursorPoint = defineInvoke(context, electronStartTrackingCursorPoint)
const startTrackingCursorPoint = defineInvoke(context, electronStartTrackMousePosition)
await startTrackingCursorPoint()
// Listen for open-settings IPC message from main process
@@ -3,7 +3,7 @@ import { createContext } from '@unbird/eventa/adapters/electron/renderer'
import { useMouse } from '@vueuse/core'
import { ref } from 'vue'
import { electronCursorPoint, electronStartTrackingCursorPoint } from '../../shared/eventa'
import { electronMousePosition, electronStartTrackMousePosition } from '../../shared/eventa'
export function useWindowMouse(options?: { x: number, y: number }) {
const eventTarget = useElectronMouseEventTarget()
@@ -14,11 +14,11 @@ export function useElectronMouseEventTarget() {
const context = ref(createContext(window.electron.ipcRenderer).context)
const eventTarget = ref(new EventTarget())
context.value.on(electronCursorPoint, (event) => {
context.value.on(electronMousePosition, (event) => {
const e = new MouseEvent('mousemove', { screenX: event.body?.x, screenY: event.body?.y })
eventTarget.value.dispatchEvent(e)
})
defineInvoke(context.value!, electronStartTrackingCursorPoint)()
defineInvoke(context.value!, electronStartTrackMousePosition)()
return eventTarget
}
+2 -2
View File
@@ -13,8 +13,8 @@ interface Point {
y: number
}
export const electronCursorPoint = defineEventa<Point>('electron:eventa:event:cursor-point')
export const electronStartTrackingCursorPoint = defineInvokeEventa('electron:eventa:invoke:start-tracking-cursor-point')
export const electronMousePosition = defineEventa<Point>('electron:eventa:event:mouse-position')
export const electronStartTrackMousePosition = defineInvokeEventa('electron:eventa:invoke:start-tracking-mouse-position')
export const electronOpenMainDevtools = defineInvokeEventa<void, void>('electron:eventa:invoke:windows:main:devtools:open')
export const electronOpenSettings = defineInvokeEventa<void, void>('electron:eventa:invoke:windows:settings:open')
export const electronOpenSettingsDevtools = defineInvokeEventa<void, void>('electron:eventa:invoke:windows:settings:devtools:open')