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 index 164b91509..d56f7a619 100644 --- a/apps/stage-tamagotchi/src/main/services/fade-on-hover/index.ts +++ b/apps/stage-tamagotchi/src/main/services/fade-on-hover/index.ts @@ -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['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['context']) { - const { start, stop } = useLoop(() => { - const dipPos = screen.getCursorScreenPoint() - context.emit(electronCursorPoint, dipPos) - }, { - autoStart: false, - }) - - onAppWindowAllClosed(() => stop()) - onAppBeforeQuit(() => stop()) - defineInvokeHandler(context, electronStartTrackingCursorPoint, () => start()) } diff --git a/apps/stage-tamagotchi/src/main/services/misc/mouse.ts b/apps/stage-tamagotchi/src/main/services/misc/mouse.ts new file mode 100644 index 000000000..a7d4be746 --- /dev/null +++ b/apps/stage-tamagotchi/src/main/services/misc/mouse.ts @@ -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['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 afd8f99ef..116cc7d1f 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 @@ -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 }) { 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())) } diff --git a/apps/stage-tamagotchi/src/renderer/App.vue b/apps/stage-tamagotchi/src/renderer/App.vue index 477f11da6..0ebab7555 100644 --- a/apps/stage-tamagotchi/src/renderer/App.vue +++ b/apps/stage-tamagotchi/src/renderer/App.vue @@ -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 diff --git a/apps/stage-tamagotchi/src/renderer/stores/window-mouse.ts b/apps/stage-tamagotchi/src/renderer/stores/window-mouse.ts index 29157d65a..c9d6d0d12 100644 --- a/apps/stage-tamagotchi/src/renderer/stores/window-mouse.ts +++ b/apps/stage-tamagotchi/src/renderer/stores/window-mouse.ts @@ -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 } diff --git a/apps/stage-tamagotchi/src/shared/eventa.ts b/apps/stage-tamagotchi/src/shared/eventa.ts index 2ffa1d480..8366ca468 100644 --- a/apps/stage-tamagotchi/src/shared/eventa.ts +++ b/apps/stage-tamagotchi/src/shared/eventa.ts @@ -13,8 +13,8 @@ interface Point { y: number } -export const electronCursorPoint = defineEventa('electron:eventa:event:cursor-point') -export const electronStartTrackingCursorPoint = defineInvokeEventa('electron:eventa:invoke:start-tracking-cursor-point') +export const electronMousePosition = defineEventa('electron:eventa:event:mouse-position') +export const electronStartTrackMousePosition = defineInvokeEventa('electron:eventa:invoke:start-tracking-mouse-position') export const electronOpenMainDevtools = defineInvokeEventa('electron:eventa:invoke:windows:main:devtools:open') export const electronOpenSettings = defineInvokeEventa('electron:eventa:invoke:windows:settings:open') export const electronOpenSettingsDevtools = defineInvokeEventa('electron:eventa:invoke:windows:settings:devtools:open')