Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/editor/standalone/browser/standaloneLayoutService.ts
3294 views
1
/*---------------------------------------------------------------------------------------------
2
* Copyright (c) Microsoft Corporation. All rights reserved.
3
* Licensed under the MIT License. See License.txt in the project root for license information.
4
*--------------------------------------------------------------------------------------------*/
5
6
import * as dom from '../../../base/browser/dom.js';
7
import { mainWindow } from '../../../base/browser/window.js';
8
import { coalesce } from '../../../base/common/arrays.js';
9
import { Event } from '../../../base/common/event.js';
10
import { ICodeEditorService } from '../../browser/services/codeEditorService.js';
11
import { InstantiationType, registerSingleton } from '../../../platform/instantiation/common/extensions.js';
12
import { ILayoutOffsetInfo, ILayoutService } from '../../../platform/layout/browser/layoutService.js';
13
14
class StandaloneLayoutService implements ILayoutService {
15
declare readonly _serviceBrand: undefined;
16
17
readonly onDidLayoutMainContainer = Event.None;
18
readonly onDidLayoutActiveContainer = Event.None;
19
readonly onDidLayoutContainer = Event.None;
20
readonly onDidChangeActiveContainer = Event.None;
21
readonly onDidAddContainer = Event.None;
22
23
get mainContainer(): HTMLElement {
24
return this._codeEditorService.listCodeEditors().at(0)?.getContainerDomNode() ?? mainWindow.document.body;
25
}
26
27
get activeContainer(): HTMLElement {
28
const activeCodeEditor = this._codeEditorService.getFocusedCodeEditor() ?? this._codeEditorService.getActiveCodeEditor();
29
30
return activeCodeEditor?.getContainerDomNode() ?? this.mainContainer;
31
}
32
33
get mainContainerDimension(): dom.IDimension {
34
return dom.getClientArea(this.mainContainer);
35
}
36
37
get activeContainerDimension() {
38
return dom.getClientArea(this.activeContainer);
39
}
40
41
readonly mainContainerOffset: ILayoutOffsetInfo = { top: 0, quickPickTop: 0 };
42
readonly activeContainerOffset: ILayoutOffsetInfo = { top: 0, quickPickTop: 0 };
43
44
get containers(): Iterable<HTMLElement> {
45
return coalesce(this._codeEditorService.listCodeEditors().map(codeEditor => codeEditor.getContainerDomNode()));
46
}
47
48
getContainer() {
49
return this.activeContainer;
50
}
51
52
whenContainerStylesLoaded() { return undefined; }
53
54
focus(): void {
55
this._codeEditorService.getFocusedCodeEditor()?.focus();
56
}
57
58
constructor(
59
@ICodeEditorService private _codeEditorService: ICodeEditorService
60
) { }
61
62
}
63
64
export class EditorScopedLayoutService extends StandaloneLayoutService {
65
override get mainContainer(): HTMLElement {
66
return this._container;
67
}
68
constructor(
69
private _container: HTMLElement,
70
@ICodeEditorService codeEditorService: ICodeEditorService,
71
) {
72
super(codeEditorService);
73
}
74
}
75
76
registerSingleton(ILayoutService, StandaloneLayoutService, InstantiationType.Delayed);
77
78