'use strict'; const { contextBridge, ipcRenderer } = require('electron'); // 只把需要的动作暴露出去,渲染进程拿不到 ipcRenderer 本体,也不开 nodeIntegration contextBridge.exposeInMainWorld('clockApi', { getState: () => ipcRenderer.invoke('state:get'), onState: (cb) => ipcRenderer.on('state', (_event, snapshot) => cb(snapshot)), setRate: (rate) => ipcRenderer.invoke('rate:set', rate), togglePause: () => ipcRenderer.invoke('pause:toggle'), fastForward: (deltaMs) => ipcRenderer.invoke('fast-forward', deltaMs), setTime: (h, m, s) => ipcRenderer.invoke('time:set', { h, m, s }), setStyle: (style) => ipcRenderer.invoke('style:set', style), setAlwaysOnTop: (target, value) => ipcRenderer.invoke('always-on-top:set', { target, value }), toggleClockWindow: () => ipcRenderer.invoke('clock-window:toggle'), closeClockWindow: () => ipcRenderer.invoke('clock-window:close'), closeControlWindow: () => ipcRenderer.invoke('control-window:close'), // 调整大小要在 mousedown 那一刻拿到精确的窗口位置,异步往返会让第一条 mousemove 用错基准 getBoundsSync: () => ipcRenderer.sendSync('bounds:get-sync'), setBounds: (bounds) => ipcRenderer.send('bounds:set', bounds) });