You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

164 lines
4.9 KiB

import { BrowserWindow, Rectangle, screen } from 'electron';
import { ICON, WEB_URL, WIN_CONFIG, preload, url } from '../main/constant';
import {
closeClipScreenWin,
getBoundsClipScreenWin,
showClipScreenWin,
minimizeClipScreenWin,
} from './clipScreenWin';
let recorderScreenWin: BrowserWindow | null = null;
function createRecorderScreenWin(search?: any): BrowserWindow {
const { x, y, width, height } = getBoundsClipScreenWin() as Rectangle;
// let recorderScreenWinX = x + (width - WIN_CONFIG.recorderScreen.width) / 2;
let recorderScreenWinX = x + width + 4 - WIN_CONFIG.recorderScreen.width;
let recorderScreenWinY = y + height;
recorderScreenWin = new BrowserWindow({
title: '录屏',
icon: ICON,
x: recorderScreenWinX,
y: recorderScreenWinY,
width: WIN_CONFIG.recorderScreen.width,
height: WIN_CONFIG.recorderScreen.height,
autoHideMenuBar: WIN_CONFIG.recorderScreen.autoHideMenuBar, // 自动隐藏菜单栏
maximizable: WIN_CONFIG.recorderScreen.maximizable,
hasShadow: WIN_CONFIG.recorderScreen.hasShadow, // 窗口是否有阴影
fullscreenable: WIN_CONFIG.recorderScreen.fullscreenable, // 窗口是否可以进入全屏状态
alwaysOnTop: WIN_CONFIG.recorderScreen.alwaysOnTop, // 窗口是否永远在别的窗口的上面
// skipTaskbar: WIN_CONFIG.recorderScreen.skipTaskbar,
// resizable: WIN_CONFIG.recorderScreen.resizable,
webPreferences: {
preload,
},
});
// recorderScreenWin.webContents.openDevTools();
if (url) {
recorderScreenWin.loadURL(WEB_URL + `recorderScreen.html?type=${search?.type || ''}`);
} else {
recorderScreenWin.loadFile(WIN_CONFIG.recorderScreen.html, {
search: `?type=${search?.type || ''}`,
});
}
// recorderScreenWin.on('move', () => {
// const recorderScreenWinBounds = getBoundsRecorderScreenWin() as Rectangle;
// const clipScreenWinBounds = getBoundsClipScreenWin() as Rectangle;
// setBoundsClipScreenWin({
// x: recorderScreenWinBounds.x,
// y: recorderScreenWinBounds.y - clipScreenWinBounds.height,
// width: clipScreenWinBounds.width,
// height: clipScreenWinBounds.height,
// });
// });
recorderScreenWin.on('restore', () => {
showClipScreenWin();
});
recorderScreenWin.on('minimize', () => {
minimizeClipScreenWin();
});
recorderScreenWin.on('close', () => {
closeClipScreenWin();
});
return recorderScreenWin;
}
// 打开关闭录屏窗口
function closeRecorderScreenWin() {
recorderScreenWin?.isDestroyed() || recorderScreenWin?.close();
recorderScreenWin = null;
}
function openRecorderScreenWin(search?: any) {
if (!recorderScreenWin || recorderScreenWin?.isDestroyed()) {
recorderScreenWin = createRecorderScreenWin(search);
}
recorderScreenWin?.show();
}
function hideRecorderScreenWin() {
recorderScreenWin?.hide();
}
function showRecorderScreenWin() {
recorderScreenWin?.show();
}
function minimizeRecorderScreenWin() {
recorderScreenWin?.minimize();
}
function setSizeRecorderScreenWin(width: number, height: number) {
// recorderScreenWin?.setResizable(true);
// recorderScreenWin?.setSize(width, height);
// recorderScreenWin?.setResizable(false);
}
function getBoundsRecorderScreenWin() {
return recorderScreenWin?.getBounds();
}
function setMovableRecorderScreenWin(movable: boolean) {
recorderScreenWin?.setMovable(movable);
}
function setResizableRecorderScreenWin(resizable: boolean) {
recorderScreenWin?.setResizable(resizable);
}
function setAlwaysOnTopRecorderScreenWin(isAlwaysOnTop: boolean) {
recorderScreenWin?.setAlwaysOnTop(isAlwaysOnTop);
}
function isFocusedRecorderScreenWin() {
return recorderScreenWin?.isFocused();
}
function focusRecorderScreenWin() {
recorderScreenWin?.focus();
}
function getCursorScreenPointRecorderScreenWin() {
return screen.getCursorScreenPoint();
}
function setBoundsRecorderScreenWin(clipScreenWinBounds: any) {
let { x, y, width, height } = clipScreenWinBounds;
let recorderScreenWinX = x;
let recorderScreenWinY = y + height;
recorderScreenWin?.setBounds({
x: recorderScreenWinX,
y: recorderScreenWinY,
width: width,
});
recorderScreenWin?.webContents.send('rs:get-size-clip-win', clipScreenWinBounds);
}
function setIgnoreMouseEventsRecorderScreenWin(event: any, ignore: boolean, options: any) {
const win = BrowserWindow.fromWebContents(event.sender);
win?.setIgnoreMouseEvents(ignore, options);
}
export {
closeRecorderScreenWin,
createRecorderScreenWin,
focusRecorderScreenWin,
getBoundsRecorderScreenWin,
getCursorScreenPointRecorderScreenWin,
hideRecorderScreenWin,
isFocusedRecorderScreenWin,
minimizeRecorderScreenWin,
openRecorderScreenWin,
setAlwaysOnTopRecorderScreenWin,
setBoundsRecorderScreenWin,
setIgnoreMouseEventsRecorderScreenWin,
setMovableRecorderScreenWin,
setResizableRecorderScreenWin,
setSizeRecorderScreenWin,
showRecorderScreenWin,
};