feat(stage-tamagotchi): port useful screen related getters from electron
This commit is contained in:
@@ -0,0 +1 @@
|
||||
export * from './screen'
|
||||
@@ -0,0 +1,17 @@
|
||||
import type { createContext } from '@unbird/eventa/adapters/electron/main'
|
||||
import type { BrowserWindow } from 'electron'
|
||||
|
||||
import { defineInvokeHandler } from '@unbird/eventa'
|
||||
import { screen } from 'electron'
|
||||
|
||||
import { electron } from '../../../shared/eventa'
|
||||
|
||||
export function createScreenService(params: { context: ReturnType<typeof createContext>['context'], window: BrowserWindow }) {
|
||||
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))
|
||||
defineInvokeHandler(params.context, electron.screen.dipToScreenRect, rect => screen.dipToScreenRect(params.window, rect))
|
||||
defineInvokeHandler(params.context, electron.screen.screenToDipPoint, point => screen.screenToDipPoint(point))
|
||||
defineInvokeHandler(params.context, electron.screen.screenToDipRect, rect => screen.screenToDipRect(params.window, rect))
|
||||
defineInvokeHandler(params.context, electron.screen.getCursorScreenPoint, () => screen.getCursorScreenPoint())
|
||||
}
|
||||
@@ -5,6 +5,7 @@ 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 { toggleWindowShow } from '../../shared'
|
||||
@@ -14,6 +15,8 @@ export function setupMainWindowElectronInvokes(params: { window: BrowserWindow,
|
||||
|
||||
createFadeOnHoverService(context)
|
||||
createMouseService(context)
|
||||
createScreenService({ context, window: params.window })
|
||||
|
||||
defineInvokeHandler(context, electronOpenMainDevtools, () => params.window.webContents.openDevTools({ mode: 'detach' }))
|
||||
defineInvokeHandler(context, electronOpenSettings, async () => toggleWindowShow(await params.settingsWindow()))
|
||||
}
|
||||
|
||||
@@ -5,11 +5,14 @@ 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'
|
||||
|
||||
export async function setupSettingsWindowInvokes(params: { settingsWindow: BrowserWindow }) {
|
||||
const { context } = createContext(ipcMain, params.settingsWindow)
|
||||
|
||||
createFadeOnHoverService(context)
|
||||
createScreenService({ context, window: params.settingsWindow })
|
||||
|
||||
defineInvokeHandler(context, electronOpenSettingsDevtools, async () => params.settingsWindow.webContents.openDevTools({ mode: 'detach' }))
|
||||
}
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
import { screen } from './screen'
|
||||
|
||||
export const electron = {
|
||||
screen,
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
import type { Display, screen as electronScreen } from 'electron'
|
||||
|
||||
import { defineInvokeEventa } from '@unbird/eventa'
|
||||
|
||||
const getAllDisplays = defineInvokeEventa<Display[]>('eventa:invoke:electron:screen:get-all-displays')
|
||||
const getPrimaryDisplay = defineInvokeEventa<Display>('eventa:invoke:electron:screen:get-primary-display')
|
||||
const getCursorScreenPoint = defineInvokeEventa<ReturnType<typeof electronScreen.getCursorScreenPoint>>('eventa:invoke:electron:screen:get-cursor-screen-point')
|
||||
const dipToScreenPoint = defineInvokeEventa<ReturnType<typeof electronScreen.dipToScreenPoint>, Parameters<typeof electronScreen.dipToScreenPoint>[0]>('eventa:invoke:electron:screen:dip-to-screen-point')
|
||||
const dipToScreenRect = defineInvokeEventa<ReturnType<typeof electronScreen.dipToScreenRect>, Parameters<typeof electronScreen.dipToScreenRect>[1]>('eventa:invoke:electron:screen:dip-to-screen-rect')
|
||||
const screenToDipPoint = defineInvokeEventa<ReturnType<typeof electronScreen.screenToDipPoint>, Parameters<typeof electronScreen.screenToDipPoint>[0]>('eventa:invoke:electron:screen:screen-to-dip-point')
|
||||
const screenToDipRect = defineInvokeEventa<ReturnType<typeof electronScreen.screenToDipRect>, Parameters<typeof electronScreen.screenToDipRect>[1]>('eventa:invoke:electron:screen:screen-to-dip-rect')
|
||||
|
||||
export const screen = {
|
||||
getAllDisplays,
|
||||
getPrimaryDisplay,
|
||||
getCursorScreenPoint,
|
||||
dipToScreenPoint,
|
||||
dipToScreenRect,
|
||||
screenToDipPoint,
|
||||
screenToDipRect,
|
||||
}
|
||||
@@ -1,21 +1,12 @@
|
||||
import { defineEventa, defineInvokeEventa } from '@unbird/eventa'
|
||||
import type { Point } from 'electron'
|
||||
|
||||
// TODO: currently, if we use `/shared` path, both web & node tsconfig.json
|
||||
// will include, while web gets higher priority in including files, this results
|
||||
// in type error for `electron` module, even for type only import, here the
|
||||
// `Point` interface cannot be imported directly due to this reason.
|
||||
//
|
||||
// We have to find a better way (better without sub-package) to share code between
|
||||
// main & preload & renderer process.
|
||||
interface Point {
|
||||
// Docs: https://electronjs.org/docs/api/structures/point
|
||||
x: number
|
||||
y: number
|
||||
}
|
||||
import { defineEventa, defineInvokeEventa } from '@unbird/eventa'
|
||||
|
||||
export const electronMousePosition = defineEventa<Point>('electron:eventa:event:mouse-position')
|
||||
export const electronStartTrackMousePosition = defineInvokeEventa('electron:eventa:invoke:start-tracking-mouse-position')
|
||||
export const electronStartDraggingWindow = defineInvokeEventa<void, void>('electron:eventa:invoke:start-dragging-window')
|
||||
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')
|
||||
export const electronStartDraggingWindow = defineInvokeEventa('electron:eventa:invoke:start-dragging-window')
|
||||
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')
|
||||
|
||||
export { electron } from './electron'
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
"unplugin-vue-router/client",
|
||||
"@types/audioworklet",
|
||||
"unplugin-info/client",
|
||||
"./src/renderer/electron.d.ts"
|
||||
"./src/renderer/electron-renderer.d.ts"
|
||||
],
|
||||
"allowJs": true,
|
||||
"strict": true,
|
||||
|
||||
Reference in New Issue
Block a user