64 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import { contextBridge, ipcRenderer } from "electron";
 | |
| import { ISimulatorAPI } from "@Electron/SimulatorAPI"
 | |
| 
 | |
| const emitterMap: Array<[key: string, value: Function[]]> = [];
 | |
| const queryEmitter = (key: string) => {
 | |
| 	let res: (typeof emitterMap)[0] | undefined;
 | |
| 	emitterMap.forEach((item) => {
 | |
| 		if (item[0] === key) res = item;
 | |
| 	});
 | |
| 
 | |
| 	if (res) {
 | |
| 		if (Array.isArray(res[1])) return res[1];
 | |
| 		res[1] = [];
 | |
| 		return res[1];
 | |
| 	}
 | |
| 
 | |
| 	else {
 | |
| 		res = [key, []];
 | |
| 		emitterMap.push(res);
 | |
| 		return res[1];
 | |
| 	}
 | |
| }
 | |
| 
 | |
| const API: ISimulatorAPI = {
 | |
| 	
 | |
| 	close() {
 | |
| 		ipcRenderer.send("windows.close");
 | |
| 	},
 | |
| 
 | |
| 	maximize() {
 | |
| 		ipcRenderer.send("windows.maximize");
 | |
| 	},
 | |
| 
 | |
| 	unMaximize() {
 | |
| 		ipcRenderer.send("windows.unMaximize");
 | |
| 	},
 | |
| 
 | |
| 	isMaximized() {
 | |
| 		return ipcRenderer.sendSync("windows.isMaximized");
 | |
| 	},
 | |
| 
 | |
| 	minimize() {
 | |
| 		ipcRenderer.send("windows.minimize");
 | |
| 	},
 | |
| 
 | |
| 	all: new Map() as any,
 | |
| 
 | |
| 	resetAll: () => emitterMap.splice(0),
 | |
| 	reset: (type) => queryEmitter(type).splice(0),
 | |
| 	on: (type, handler) => queryEmitter(type).push(handler),
 | |
| 	off: (type, handler) => {
 | |
| 		const handlers = queryEmitter(type);
 | |
| 		handlers.splice(handlers.indexOf(handler!) >>> 0, 1);
 | |
| 	},
 | |
| 	emit: ((type: string, evt: any) => {
 | |
| 		queryEmitter(type).slice().map((handler: any) => { handler(evt) });
 | |
| 	}) as any,
 | |
| }
 | |
| 
 | |
| ipcRenderer.on("windows.windowsSizeStateChange", () => {
 | |
| 	API.emit("windowsSizeStateChange");
 | |
| });
 | |
| 
 | |
| contextBridge.exposeInMainWorld("API", API); |