Merge branch 'master' of github.com:Eugeny/terminus

This commit is contained in:
Eugene Pankov
2020-12-27 18:51:14 +01:00
5 changed files with 29 additions and 31 deletions

View File

@@ -22,11 +22,16 @@ export interface WindowOptions {
hidden?: boolean hidden?: boolean
} }
abstract class GlasstronWindow extends BrowserWindow {
blurType: string
abstract setBlur (_: boolean)
}
export class Window { export class Window {
ready: Promise<void> ready: Promise<void>
private visible = new Subject<boolean>() private visible = new Subject<boolean>()
private closed = new Subject<void>() private closed = new Subject<void>()
private window: BrowserWindow private window: GlasstronWindow
private windowConfig: ElectronConfig private windowConfig: ElectronConfig
private windowBounds: Rectangle private windowBounds: Rectangle
private closing = false 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', () => { this.window.once('ready-to-show', () => {
if (process.platform === 'darwin') { if (process.platform === 'darwin') {
@@ -129,21 +134,20 @@ export class Window {
}) })
} }
setVibrancy (enabled: boolean, type?: string): void { setVibrancy (enabled: boolean, type?: string, userRequested?: boolean): void {
if (userRequested ?? true) {
this.lastVibrancy = { enabled, type } this.lastVibrancy = { enabled, type }
}
if (process.platform === 'win32') { if (process.platform === 'win32') {
if (parseFloat(os.release()) >= 10) { if (parseFloat(os.release()) >= 10) {
glasstron.update(this.window, { this.window.blurType = enabled ? type === 'fluent' ? 'acrylic' : 'blurbehind' : null
windows: { blurType: enabled ? type === 'fluent' ? 'acrylic' : 'blurbehind' : null }, this.window.setBlur(enabled)
})
} else { } else {
DwmEnableBlurBehindWindow(this.window, enabled) DwmEnableBlurBehindWindow(this.window, enabled)
} }
} else if (process.platform === 'linux') { } else if (process.platform === 'linux') {
glasstron.update(this.window, {
linux: { requestBlur: enabled },
})
this.window.setBackgroundColor(enabled ? '#00000000' : '#131d27') this.window.setBackgroundColor(enabled ? '#00000000' : '#131d27')
this.window.setBlur(enabled)
} else { } else {
this.window.setVibrancy(enabled ? 'dark' : null as any) // electron issue 20269 this.window.setVibrancy(enabled ? 'dark' : null as any) // electron issue 20269
} }
@@ -360,24 +364,21 @@ export class Window {
this.disableVibrancyWhileDragging = value this.disableVibrancyWhileDragging = value
}) })
this.window.on('will-move', () => { let moveEndedTimeout: number|null = null
const onBoundsChange = () => {
if (!this.lastVibrancy?.enabled || !this.disableVibrancyWhileDragging) { if (!this.lastVibrancy?.enabled || !this.disableVibrancyWhileDragging) {
return return
} }
let timeout: number|null = null this.setVibrancy(false, undefined, false)
const oldVibrancy = this.lastVibrancy if (moveEndedTimeout) {
this.setVibrancy(false) clearTimeout(moveEndedTimeout)
const onMove = () => {
if (timeout) {
clearTimeout(timeout)
} }
timeout = setTimeout(() => { moveEndedTimeout = setTimeout(() => {
this.window.off('move', onMove) this.setVibrancy(this.lastVibrancy.enabled, this.lastVibrancy.type)
this.setVibrancy(oldVibrancy.enabled, oldVibrancy.type) }, 50)
}, 500)
} }
this.window.on('move', onMove) this.window.on('move', onBoundsChange)
}) this.window.on('resize', onBoundsChange)
} }
private destroy () { private destroy () {

View File

@@ -28,6 +28,7 @@
"graceful-fs": "^4.2.4", "graceful-fs": "^4.2.4",
"html-loader": "0.5.5", "html-loader": "0.5.5",
"json-loader": "0.5.7", "json-loader": "0.5.7",
"lru-cache": "^6.0.0",
"node-abi": "^2.19.3", "node-abi": "^2.19.3",
"node-gyp": "^7.1.2", "node-gyp": "^7.1.2",
"node-sass": "^5.0.0", "node-sass": "^5.0.0",

View File

@@ -5,7 +5,7 @@ import { Observable, Subject } from 'rxjs'
import { Injectable, NgZone, EventEmitter } from '@angular/core' import { Injectable, NgZone, EventEmitter } from '@angular/core'
import { ElectronService } from './electron.service' import { ElectronService } from './electron.service'
import { Logger, LogService } from './log.service' import { Logger, LogService } from './log.service'
import { isWindowsBuild, WIN_BUILD_FLUENT_BG_MOVE_BUG_FIXED, WIN_BUILD_FLUENT_BG_SUPPORTED } from '../utils' import { isWindowsBuild, WIN_BUILD_FLUENT_BG_SUPPORTED } from '../utils'
export enum Platform { export enum Platform {
Linux = 'Linux', Linux = 'Linux',
@@ -176,10 +176,7 @@ export class HostAppService {
this.configChangeBroadcast.next() this.configChangeBroadcast.next()
})) }))
if ( if (isWindowsBuild(WIN_BUILD_FLUENT_BG_SUPPORTED)) {
isWindowsBuild(WIN_BUILD_FLUENT_BG_SUPPORTED) &&
!isWindowsBuild(WIN_BUILD_FLUENT_BG_MOVE_BUG_FIXED)
) {
electron.ipcRenderer.send('window-set-disable-vibrancy-while-dragging', true) electron.ipcRenderer.send('window-set-disable-vibrancy-while-dragging', true)
} }
} }

View File

@@ -4,7 +4,6 @@ export const WIN_BUILD_CONPTY_SUPPORTED = 17692
export const WIN_BUILD_CONPTY_STABLE = 18309 export const WIN_BUILD_CONPTY_STABLE = 18309
export const WIN_BUILD_WSL_EXE_DISTRO_FLAG = 17763 export const WIN_BUILD_WSL_EXE_DISTRO_FLAG = 17763
export const WIN_BUILD_FLUENT_BG_SUPPORTED = 17063 export const WIN_BUILD_FLUENT_BG_SUPPORTED = 17063
export const WIN_BUILD_FLUENT_BG_MOVE_BUG_FIXED = 18917
export function isWindowsBuild (build: number): boolean { export function isWindowsBuild (build: number): boolean {
return process.platform === 'win32' && parseFloat(os.release()) >= 10 && parseInt(os.release().split('.')[2]) >= build return process.platform === 'win32' && parseFloat(os.release()) >= 10 && parseInt(os.release().split('.')[2]) >= build

View File

@@ -4712,7 +4712,7 @@ lru-cache@^4.0.1:
lru-cache@^6.0.0: lru-cache@^6.0.0:
version "6.0.0" version "6.0.0"
resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
dependencies: dependencies:
yallist "^4.0.0" yallist "^4.0.0"