提交 38a6e7fe 编写于 作者: E Eugene Pankov

work around win32 fluent background bugs - #949

上级 2ef3a81d
......@@ -22,11 +22,16 @@ export interface WindowOptions {
hidden?: boolean
}
abstract class GlasstronWindow extends BrowserWindow {
blurType: string
abstract setBlur (_: boolean)
}
export class Window {
ready: Promise<void>
private visible = new Subject<boolean>()
private closed = new Subject<void>()
private window: BrowserWindow
private window: GlasstronWindow
private windowConfig: ElectronConfig
private windowBounds: Rectangle
private closing = false
......@@ -84,7 +89,7 @@ export class Window {
}
}
this.window = new BrowserWindow(bwOptions)
this.window = new glasstron.BrowserWindow(bwOptions)
this.window.once('ready-to-show', () => {
if (process.platform === 'darwin') {
......@@ -129,21 +134,20 @@ export class Window {
})
}
setVibrancy (enabled: boolean, type?: string): void {
this.lastVibrancy = { enabled, type }
setVibrancy (enabled: boolean, type?: string, userRequested?: boolean): void {
if (userRequested ?? true) {
this.lastVibrancy = { enabled, type }
}
if (process.platform === 'win32') {
if (parseFloat(os.release()) >= 10) {
glasstron.update(this.window, {
windows: { blurType: enabled ? type === 'fluent' ? 'acrylic' : 'blurbehind' : null },
})
this.window.blurType = enabled ? type === 'fluent' ? 'acrylic' : 'blurbehind' : null
this.window.setBlur(enabled)
} else {
DwmEnableBlurBehindWindow(this.window, enabled)
}
} else if (process.platform === 'linux') {
glasstron.update(this.window, {
linux: { requestBlur: enabled },
})
this.window.setBackgroundColor(enabled ? '#00000000' : '#131d27')
this.window.setBlur(enabled)
} else {
this.window.setVibrancy(enabled ? 'dark' : null as any) // electron issue 20269
}
......@@ -360,24 +364,21 @@ export class Window {
this.disableVibrancyWhileDragging = value
})
this.window.on('will-move', () => {
let moveEndedTimeout: number|null = null
const onBoundsChange = () => {
if (!this.lastVibrancy?.enabled || !this.disableVibrancyWhileDragging) {
return
}
let timeout: number|null = null
const oldVibrancy = this.lastVibrancy
this.setVibrancy(false)
const onMove = () => {
if (timeout) {
clearTimeout(timeout)
}
timeout = setTimeout(() => {
this.window.off('move', onMove)
this.setVibrancy(oldVibrancy.enabled, oldVibrancy.type)
}, 500)
this.setVibrancy(false, undefined, false)
if (moveEndedTimeout) {
clearTimeout(moveEndedTimeout)
}
this.window.on('move', onMove)
})
moveEndedTimeout = setTimeout(() => {
this.setVibrancy(this.lastVibrancy.enabled, this.lastVibrancy.type)
}, 50)
}
this.window.on('move', onBoundsChange)
this.window.on('resize', onBoundsChange)
}
private destroy () {
......
......@@ -174,10 +174,7 @@ export class HostAppService {
this.configChangeBroadcast.next()
}))
if (
isWindowsBuild(WIN_BUILD_FLUENT_BG_SUPPORTED) &&
!isWindowsBuild(WIN_BUILD_FLUENT_BG_MOVE_BUG_FIXED)
) {
if (isWindowsBuild(WIN_BUILD_FLUENT_BG_SUPPORTED)) {
electron.ipcRenderer.send('window-set-disable-vibrancy-while-dragging', true)
}
}
......
......@@ -4,7 +4,6 @@ export const WIN_BUILD_CONPTY_SUPPORTED = 17692
export const WIN_BUILD_CONPTY_STABLE = 18309
export const WIN_BUILD_WSL_EXE_DISTRO_FLAG = 17763
export const WIN_BUILD_FLUENT_BG_SUPPORTED = 17063
export const WIN_BUILD_FLUENT_BG_MOVE_BUG_FIXED = 18917
export function isWindowsBuild (build: number): boolean {
return process.platform === 'win32' && parseFloat(os.release()) >= 10 && parseInt(os.release().split('.')[2]) >= build
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册