优化
This commit is contained in:
@@ -5,95 +5,68 @@ import DesktopComponent from '@/core/desktop/ui/DesktopComponent.vue'
|
||||
import { naiveUi } from '@/core/common/naive-ui/components.ts'
|
||||
import { debounce } from 'lodash'
|
||||
import type { IProcessInfo } from '@/core/process/IProcessInfo.ts'
|
||||
import { eventManager } from '@/core/events/EventManager.ts'
|
||||
import { processManager } from '@/core/process/ProcessManager.ts'
|
||||
import './ui/DesktopElement.ts'
|
||||
import { ObservableImpl } from '@/core/state/impl/ObservableImpl.ts'
|
||||
|
||||
interface IDesktopDataState {
|
||||
/** 显示器宽度 */
|
||||
monitorWidth: number;
|
||||
/** 显示器高度 */
|
||||
monitorHeight: number;
|
||||
}
|
||||
|
||||
export class DesktopProcess extends ProcessImpl {
|
||||
private _desktopRootDom: HTMLElement;
|
||||
private _isMounted: boolean = false;
|
||||
private _width: number = 0;
|
||||
private _height: number = 0;
|
||||
private _pendingResize: boolean = false;
|
||||
/** 桌面根dom,类似显示器 */
|
||||
private readonly _monitorDom: HTMLElement
|
||||
private _isMounted: boolean = false
|
||||
private _data = new ObservableImpl<IDesktopDataState>({
|
||||
monitorWidth: 0,
|
||||
monitorHeight: 0,
|
||||
})
|
||||
|
||||
public get desktopRootDom() {
|
||||
return this._desktopRootDom;
|
||||
public get monitorDom() {
|
||||
return this._monitorDom
|
||||
}
|
||||
public get isMounted() {
|
||||
return this._isMounted;
|
||||
return this._isMounted
|
||||
}
|
||||
public get basicSystemProcess() {
|
||||
return processManager.findProcessByName<BasicSystemProcess>('basic-system')
|
||||
}
|
||||
|
||||
public get width() {
|
||||
return this._width;
|
||||
}
|
||||
public set width(value: number) {
|
||||
if (this._height === value) return;
|
||||
if (!this._isMounted) return;
|
||||
this._width = value;
|
||||
this._desktopRootDom.style.width = value >= 0 ? `${value}px` : '100%';
|
||||
|
||||
this.scheduleResizeEvent()
|
||||
}
|
||||
public get height() {
|
||||
return this._height;
|
||||
}
|
||||
public set height(value: number) {
|
||||
if (this._height === value) return;
|
||||
if (!this._isMounted) return;
|
||||
this._height = value;
|
||||
this._desktopRootDom.style.height = value >= 0 ? `${value}px` : '100%';
|
||||
|
||||
this.scheduleResizeEvent()
|
||||
get data() {
|
||||
return this._data
|
||||
}
|
||||
|
||||
private scheduleResizeEvent() {
|
||||
if (this._pendingResize) return;
|
||||
|
||||
this._pendingResize = true;
|
||||
|
||||
Promise.resolve().then(() => {
|
||||
if (this._pendingResize) {
|
||||
this._pendingResize = false;
|
||||
console.log('onDesktopRootDomResize')
|
||||
eventManager.notifyEvent('onDesktopRootDomResize', this._width, this._height);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
constructor(info: IProcessInfo) {
|
||||
constructor(info: IProcessInfo, dom: HTMLDivElement) {
|
||||
super(info)
|
||||
console.log('DesktopProcess')
|
||||
}
|
||||
|
||||
public mount(dom: HTMLDivElement) {
|
||||
console.log('DesktopProcess: start mount')
|
||||
if (this._isMounted) return
|
||||
this._width = window.innerWidth
|
||||
this._height = window.innerHeight
|
||||
window.addEventListener(
|
||||
'resize',
|
||||
debounce(() => {
|
||||
this.width = window.innerWidth
|
||||
this.height = window.innerHeight
|
||||
}, 300)
|
||||
)
|
||||
|
||||
dom.style.zIndex = '0';
|
||||
dom.style.width = `${this._width}px`
|
||||
dom.style.height = `${this._height}px`
|
||||
dom.style.position = 'relative'
|
||||
dom.style.overflow = 'hidden'
|
||||
this._desktopRootDom = dom
|
||||
dom.style.width = `${window.innerWidth}px`
|
||||
dom.style.height = `${window.innerHeight}px`
|
||||
|
||||
this._monitorDom = dom
|
||||
this._data.state.monitorWidth = window.innerWidth
|
||||
this._data.state.monitorHeight = window.innerHeight
|
||||
window.addEventListener('resize', this.onResize)
|
||||
|
||||
this.createDesktopUI()
|
||||
}
|
||||
|
||||
private onResize = debounce(() => {
|
||||
this._monitorDom.style.width = `${window.innerWidth}px`
|
||||
this._monitorDom.style.height = `${window.innerHeight}px`
|
||||
this._data.state.monitorWidth = window.innerWidth
|
||||
this._data.state.monitorHeight = window.innerHeight
|
||||
}, 300)
|
||||
|
||||
private createDesktopUI() {
|
||||
if (this._isMounted) return
|
||||
const app = createApp(DesktopComponent, { process: this })
|
||||
app.use(naiveUi)
|
||||
app.mount(dom)
|
||||
|
||||
// this.initDesktop(dom)
|
||||
|
||||
app.mount(this._monitorDom)
|
||||
this._isMounted = true
|
||||
}
|
||||
|
||||
@@ -101,4 +74,9 @@ export class DesktopProcess extends ProcessImpl {
|
||||
const d = document.createElement('desktop-element')
|
||||
dom.appendChild(d)
|
||||
}
|
||||
|
||||
override destroy() {
|
||||
super.destroy()
|
||||
window.removeEventListener('resize', this.onResize)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user