11import { ipcMain } from "electron" ;
2+ import { store } from "@main/store" ;
23import {
34 toggleDesktopLyricWindow ,
45 closeDesktopLyricWindow ,
@@ -7,6 +8,13 @@ import {
78 applyDesktopLyricMouseIgnore ,
89 moveDesktopLyricWindow ,
910 saveDesktopLyricState ,
11+ toggleDynamicIslandWindow ,
12+ closeDynamicIslandWindow ,
13+ getDynamicIslandWindow ,
14+ moveDynamicIslandWindow ,
15+ saveDynamicIslandState ,
16+ applyDynamicIslandWidth ,
17+ applyDynamicIslandHeight ,
1018} from "@main/window" ;
1119
1220/** 窗口管理 IPC */
@@ -39,4 +47,39 @@ export const registerWindowIpc = (): void => {
3947 ipcMain . on ( "desktopLyric:saveState" , ( ) => {
4048 saveDesktopLyricState ( ) ;
4149 } ) ;
50+
51+ // 切换灵动岛窗口
52+ ipcMain . handle ( "window:toggleDynamicIsland" , ( ) => toggleDynamicIslandWindow ( ) ) ;
53+
54+ // 关闭灵动岛窗口
55+ ipcMain . handle ( "window:closeDynamicIsland" , ( ) => closeDynamicIslandWindow ( ) ) ;
56+
57+ // 查询灵动岛窗口是否打开
58+ ipcMain . handle ( "window:isDynamicIslandOpen" , ( ) => ! ! getDynamicIslandWindow ( ) ) ;
59+
60+ // 灵动岛拖拽移动
61+ ipcMain . on ( "dynamicIsland:move" , ( _event , x : number , y : number ) => {
62+ moveDynamicIslandWindow ( x , y ) ;
63+ } ) ;
64+
65+ // 灵动岛拖拽结束:主进程判定吸附并持久化
66+ ipcMain . on ( "dynamicIsland:saveState" , ( ) => {
67+ saveDynamicIslandState ( ) ;
68+ } ) ;
69+
70+ // 灵动岛宽度变化:渲染端上报目标宽度
71+ ipcMain . on ( "dynamicIsland:resize" , ( _event , width : number ) => {
72+ applyDynamicIslandWidth ( width ) ;
73+ } ) ;
74+
75+ // 灵动岛高度变化
76+ ipcMain . on ( "dynamicIsland:setHeight" , ( _event , height : number ) => {
77+ applyDynamicIslandHeight ( height ) ;
78+ } ) ;
79+
80+ // 灵动岛查询当前吸附模式(HMR 后渲染端主动拉取)
81+ ipcMain . handle ( "dynamicIsland:getMode" , ( ) => {
82+ const saved = store . get ( "windowStates.dynamicIsland" ) ;
83+ return saved . mode === "floating" ? "floating" : "snapped" ;
84+ } ) ;
4285} ;
0 commit comments