mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-14 18:46:34 -05:00
Merge from vscode 8a997f7321ae6612fc0e6eb3eac4f358a6233bfb
This commit is contained in:
@@ -8,7 +8,7 @@ import * as nls from 'vs/nls';
|
||||
import * as dom from 'vs/base/browser/dom';
|
||||
import { FastDomNode, createFastDomNode } from 'vs/base/browser/fastDomNode';
|
||||
import { ISashEvent, IVerticalSashLayoutProvider, Sash, SashState } from 'vs/base/browser/ui/sash/sash';
|
||||
import { RunOnceScheduler, IntervalTimer } from 'vs/base/common/async';
|
||||
import { RunOnceScheduler } from 'vs/base/common/async';
|
||||
import { Color } from 'vs/base/common/color';
|
||||
import { Emitter, Event } from 'vs/base/common/event';
|
||||
import { Disposable } from 'vs/base/common/lifecycle';
|
||||
@@ -48,6 +48,7 @@ import { Constants } from 'vs/base/common/uint';
|
||||
import { EditorExtensionsRegistry, IDiffEditorContributionDescription } from 'vs/editor/browser/editorExtensions';
|
||||
import { onUnexpectedError } from 'vs/base/common/errors';
|
||||
import { IEditorProgressService, IProgressRunner } from 'vs/platform/progress/common/progress';
|
||||
import { ElementSizeObserver } from 'vs/editor/browser/config/elementSizeObserver';
|
||||
|
||||
interface IEditorDiffDecorations {
|
||||
decorations: IModelDeltaDecoration[];
|
||||
@@ -179,10 +180,7 @@ export class DiffEditorWidget extends Disposable implements editorBrowser.IDiffE
|
||||
private readonly _overviewDomElement: HTMLElement;
|
||||
private readonly _overviewViewportDomElement: FastDomNode<HTMLElement>;
|
||||
|
||||
private _width: number;
|
||||
private _height: number;
|
||||
private _reviewHeight: number;
|
||||
private readonly _measureDomElementToken: IntervalTimer | null;
|
||||
private readonly _elementSizeObserver: ElementSizeObserver;
|
||||
|
||||
private readonly originalEditor: CodeEditorWidget;
|
||||
private readonly _originalDomNode: HTMLElement;
|
||||
@@ -329,9 +327,10 @@ export class DiffEditorWidget extends Disposable implements editorBrowser.IDiffE
|
||||
this._isVisible = true;
|
||||
this._isHandlingScrollEvent = false;
|
||||
|
||||
this._width = 0;
|
||||
this._height = 0;
|
||||
this._reviewHeight = 0;
|
||||
this._elementSizeObserver = this._register(new ElementSizeObserver(this._containerDomElement, undefined, () => this._onDidContainerSizeChanged()));
|
||||
if (options.automaticLayout) {
|
||||
this._elementSizeObserver.startObserving();
|
||||
}
|
||||
|
||||
this._diffComputationResult = null;
|
||||
|
||||
@@ -360,12 +359,7 @@ export class DiffEditorWidget extends Disposable implements editorBrowser.IDiffE
|
||||
this._containerDomElement.appendChild(this._reviewPane.shadow.domNode);
|
||||
this._containerDomElement.appendChild(this._reviewPane.actionBarContainer.domNode);
|
||||
|
||||
if (options.automaticLayout) {
|
||||
this._measureDomElementToken = new IntervalTimer();
|
||||
this._measureDomElementToken.cancelAndSet(() => this._measureDomElement(false), 100);
|
||||
} else {
|
||||
this._measureDomElementToken = null;
|
||||
}
|
||||
|
||||
|
||||
// enableSplitViewResizing
|
||||
this._enableSplitViewResizing = true;
|
||||
@@ -563,10 +557,6 @@ export class DiffEditorWidget extends Disposable implements editorBrowser.IDiffE
|
||||
this._beginUpdateDecorationsTimeout = -1;
|
||||
}
|
||||
|
||||
if (this._measureDomElementToken) {
|
||||
this._measureDomElementToken.dispose();
|
||||
}
|
||||
|
||||
this._cleanViewZonesAndDecorations();
|
||||
|
||||
if (this._originalOverviewRuler) {
|
||||
@@ -866,7 +856,7 @@ export class DiffEditorWidget extends Disposable implements editorBrowser.IDiffE
|
||||
}
|
||||
|
||||
public layout(dimension?: editorCommon.IDimension): void {
|
||||
this._measureDomElement(false, dimension);
|
||||
this._elementSizeObserver.observe(dimension);
|
||||
}
|
||||
|
||||
public focus(): void {
|
||||
@@ -907,35 +897,21 @@ export class DiffEditorWidget extends Disposable implements editorBrowser.IDiffE
|
||||
|
||||
//------------ begin layouting methods
|
||||
|
||||
private _measureDomElement(forceDoLayoutCall: boolean, dimensions?: editorCommon.IDimension): void {
|
||||
dimensions = dimensions || {
|
||||
width: this._containerDomElement.clientWidth,
|
||||
height: this._containerDomElement.clientHeight
|
||||
};
|
||||
|
||||
if (dimensions.width <= 0) {
|
||||
this._width = 0;
|
||||
this._height = 0;
|
||||
this._reviewHeight = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
if (!forceDoLayoutCall && dimensions.width === this._width && dimensions.height === this._height) {
|
||||
// Nothing has changed
|
||||
return;
|
||||
}
|
||||
|
||||
this._width = dimensions.width;
|
||||
this._height = dimensions.height;
|
||||
this._reviewHeight = this._reviewPane.isVisible() ? this._height : 0;
|
||||
|
||||
private _onDidContainerSizeChanged(): void {
|
||||
this._doLayout();
|
||||
}
|
||||
|
||||
private _getReviewHeight(): number {
|
||||
return this._reviewPane.isVisible() ? this._elementSizeObserver.getHeight() : 0;
|
||||
}
|
||||
|
||||
private _layoutOverviewRulers(): void {
|
||||
if (!this._originalOverviewRuler || !this._modifiedOverviewRuler) {
|
||||
return;
|
||||
}
|
||||
const height = this._elementSizeObserver.getHeight();
|
||||
const reviewHeight = this._getReviewHeight();
|
||||
|
||||
let freeSpace = DiffEditorWidget.ENTIRE_DIFF_OVERVIEW_WIDTH - 2 * DiffEditorWidget.ONE_OVERVIEW_WIDTH;
|
||||
let layoutInfo = this.modifiedEditor.getLayoutInfo();
|
||||
if (layoutInfo) {
|
||||
@@ -943,13 +919,13 @@ export class DiffEditorWidget extends Disposable implements editorBrowser.IDiffE
|
||||
top: 0,
|
||||
width: DiffEditorWidget.ONE_OVERVIEW_WIDTH,
|
||||
right: freeSpace + DiffEditorWidget.ONE_OVERVIEW_WIDTH,
|
||||
height: (this._height - this._reviewHeight)
|
||||
height: (height - reviewHeight)
|
||||
});
|
||||
this._modifiedOverviewRuler.setLayout({
|
||||
top: 0,
|
||||
right: 0,
|
||||
width: DiffEditorWidget.ONE_OVERVIEW_WIDTH,
|
||||
height: (this._height - this._reviewHeight)
|
||||
height: (height - reviewHeight)
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -1095,33 +1071,38 @@ export class DiffEditorWidget extends Disposable implements editorBrowser.IDiffE
|
||||
}
|
||||
|
||||
public doLayout(): void {
|
||||
this._measureDomElement(true);
|
||||
this._elementSizeObserver.observe();
|
||||
this._doLayout();
|
||||
}
|
||||
|
||||
private _doLayout(): void {
|
||||
const width = this._elementSizeObserver.getWidth();
|
||||
const height = this._elementSizeObserver.getHeight();
|
||||
const reviewHeight = this._getReviewHeight();
|
||||
|
||||
let splitPoint = this._strategy.layout();
|
||||
|
||||
this._originalDomNode.style.width = splitPoint + 'px';
|
||||
this._originalDomNode.style.left = '0px';
|
||||
|
||||
this._modifiedDomNode.style.width = (this._width - splitPoint) + 'px';
|
||||
this._modifiedDomNode.style.width = (width - splitPoint) + 'px';
|
||||
this._modifiedDomNode.style.left = splitPoint + 'px';
|
||||
|
||||
this._overviewDomElement.style.top = '0px';
|
||||
this._overviewDomElement.style.height = (this._height - this._reviewHeight) + 'px';
|
||||
this._overviewDomElement.style.height = (height - reviewHeight) + 'px';
|
||||
this._overviewDomElement.style.width = DiffEditorWidget.ENTIRE_DIFF_OVERVIEW_WIDTH + 'px';
|
||||
this._overviewDomElement.style.left = (this._width - DiffEditorWidget.ENTIRE_DIFF_OVERVIEW_WIDTH) + 'px';
|
||||
this._overviewDomElement.style.left = (width - DiffEditorWidget.ENTIRE_DIFF_OVERVIEW_WIDTH) + 'px';
|
||||
this._overviewViewportDomElement.setWidth(DiffEditorWidget.ENTIRE_DIFF_OVERVIEW_WIDTH);
|
||||
this._overviewViewportDomElement.setHeight(30);
|
||||
|
||||
this.originalEditor.layout({ width: splitPoint, height: (this._height - this._reviewHeight) });
|
||||
this.modifiedEditor.layout({ width: this._width - splitPoint - DiffEditorWidget.ENTIRE_DIFF_OVERVIEW_WIDTH, height: (this._height - this._reviewHeight) });
|
||||
this.originalEditor.layout({ width: splitPoint, height: (height - reviewHeight) });
|
||||
this.modifiedEditor.layout({ width: width - splitPoint - DiffEditorWidget.ENTIRE_DIFF_OVERVIEW_WIDTH, height: (height - reviewHeight) });
|
||||
|
||||
if (this._originalOverviewRuler || this._modifiedOverviewRuler) {
|
||||
this._layoutOverviewRulers();
|
||||
}
|
||||
|
||||
this._reviewPane.layout(this._height - this._reviewHeight, this._width, this._reviewHeight);
|
||||
this._reviewPane.layout(height - reviewHeight, width, reviewHeight);
|
||||
|
||||
this._layoutOverviewViewport();
|
||||
}
|
||||
@@ -1162,11 +1143,11 @@ export class DiffEditorWidget extends Disposable implements editorBrowser.IDiffE
|
||||
private _createDataSource(): IDataSource {
|
||||
return {
|
||||
getWidth: () => {
|
||||
return this._width;
|
||||
return this._elementSizeObserver.getWidth();
|
||||
},
|
||||
|
||||
getHeight: () => {
|
||||
return (this._height - this._reviewHeight);
|
||||
return (this._elementSizeObserver.getHeight() - this._getReviewHeight());
|
||||
},
|
||||
|
||||
getContainerDomNode: () => {
|
||||
@@ -1200,7 +1181,7 @@ export class DiffEditorWidget extends Disposable implements editorBrowser.IDiffE
|
||||
}
|
||||
|
||||
// Just do a layout, the strategy might need it
|
||||
this._measureDomElement(true);
|
||||
this._doLayout();
|
||||
}
|
||||
|
||||
private _getLineChangeAtOrBeforeLineNumber(lineNumber: number, startLineNumberExtractor: (lineChange: editorCommon.ILineChange) => number): editorCommon.ILineChange | null {
|
||||
@@ -2181,6 +2162,7 @@ class InlineViewZonesComputer extends ViewZonesComputer {
|
||||
0,
|
||||
fontInfo.spaceWidth,
|
||||
fontInfo.middotWidth,
|
||||
fontInfo.wsmiddotWidth,
|
||||
options.get(EditorOption.stopRenderingLineAfter),
|
||||
options.get(EditorOption.renderWhitespace),
|
||||
options.get(EditorOption.renderControlCharacters),
|
||||
|
||||
Reference in New Issue
Block a user