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
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, |
|
};
|
|
|