提交 45b6708c 编写于 作者: A Alex Dima

Use directly lineNumbersDigitCount, ensure view layout gets events before any...

Use directly lineNumbersDigitCount, ensure view layout gets events before any other view event handler
上级 f7498f0b
......@@ -112,6 +112,9 @@ export class View extends ViewEventHandler implements editorBrowser.IView, IDisp
// The event dispatcher will always go through _renderOnce before dispatching any events
this.eventDispatcher = new ViewEventDispatcher((callback: () => void) => this._renderOnce(callback));
// Ensure the view is the first event handler in order to update the layout
this.eventDispatcher.addEventHandler(this);
// The layout provider has such responsibilities as:
// - scrolling (i.e. viewport / full size) & co.
// - whitespaces (a.k.a. view zones) management & co.
......@@ -134,7 +137,6 @@ export class View extends ViewEventHandler implements editorBrowser.IView, IDisp
this.hasFocus = false;
this.codeEditorHelper = null;
this.eventDispatcher.addEventHandler(this);
// The view lines rendering calls model.getLineTokens() that might emit events that its tokens have changed.
// This delayed processing of incoming model events acts as a guard against undesired/unexpected recursion.
......
......@@ -109,7 +109,7 @@ class InternalEditorOptionsHelper {
fontInfo: FontInfo,
editorClassName: string,
isDominatedByLongLines: boolean,
maxLineNumber: number,
lineNumbersDigitCount: number,
canUseTranslate3d: boolean,
pixelRatio: number
): editorCommon.InternalEditorOptions {
......@@ -180,7 +180,7 @@ class InternalEditorOptionsHelper {
lineHeight: fontInfo.lineHeight,
showLineNumbers: renderLineNumbers,
lineNumbersMinChars: lineNumbersMinChars,
maxLineNumber: maxLineNumber,
lineNumbersDigitCount: lineNumbersDigitCount,
lineDecorationsWidth: lineDecorationsWidth,
typicalHalfwidthCharacterWidth: fontInfo.typicalHalfwidthCharacterWidth,
maxDigitWidth: fontInfo.maxDigitWidth,
......@@ -475,7 +475,7 @@ export abstract class CommonEditorConfiguration extends Disposable implements ed
protected _configWithDefaults: ConfigurationWithDefaults;
protected _elementSizeObserver: IElementSizeObserver;
private _isDominatedByLongLines: boolean;
private _maxLineNumber: number;
private _lineNumbersDigitCount: number;
private _onDidChange = this._register(new Emitter<editorCommon.IConfigurationChangedEvent>());
public onDidChange: Event<editorCommon.IConfigurationChangedEvent> = this._onDidChange.event;
......@@ -485,7 +485,7 @@ export abstract class CommonEditorConfiguration extends Disposable implements ed
this._configWithDefaults = new ConfigurationWithDefaults(options);
this._elementSizeObserver = elementSizeObserver;
this._isDominatedByLongLines = false;
this._maxLineNumber = 1;
this._lineNumbersDigitCount = 1;
this.editor = this._computeInternalOptions();
this.editorClone = this.editor.clone();
this._register(EditorZoom.onDidChangeZoomLevel(_ => this._recomputeOptions()));
......@@ -535,7 +535,7 @@ export abstract class CommonEditorConfiguration extends Disposable implements ed
this.readConfiguration(bareFontInfo),
editorClassName,
this._isDominatedByLongLines,
this._maxLineNumber,
this._lineNumbersDigitCount,
canUseTranslate3d,
this._getPixelRatio()
);
......@@ -552,13 +552,23 @@ export abstract class CommonEditorConfiguration extends Disposable implements ed
}
public setMaxLineNumber(maxLineNumber: number): void {
if (this._maxLineNumber === maxLineNumber) {
let digitCount = CommonEditorConfiguration.digitCount(maxLineNumber);
if (this._lineNumbersDigitCount === digitCount) {
return;
}
this._maxLineNumber = maxLineNumber;
this._lineNumbersDigitCount = digitCount;
this._recomputeOptions();
}
private static digitCount(n: number): number {
var r = 0;
while (n) {
n = Math.floor(n / 10);
r++;
}
return r ? r : 1;
}
protected abstract _getEditorClassName(theme: string, fontLigatures: boolean): string;
protected abstract getOuterWidth(): number;
......
......@@ -15,7 +15,7 @@ export interface IEditorLayoutProviderOpts {
showLineNumbers: boolean;
lineNumbersMinChars: number;
maxLineNumber: number;
lineNumbersDigitCount: number;
lineDecorationsWidth: number;
......@@ -39,7 +39,7 @@ export class EditorLayoutProvider {
const lineHeight = _opts.lineHeight | 0;
const showLineNumbers = Boolean(_opts.showLineNumbers);
const lineNumbersMinChars = _opts.lineNumbersMinChars | 0;
const maxLineNumber = _opts.maxLineNumber | 0;
const lineNumbersDigitCount = _opts.lineNumbersDigitCount | 0;
const lineDecorationsWidth = _opts.lineDecorationsWidth | 0;
const typicalHalfwidthCharacterWidth = Number(_opts.typicalHalfwidthCharacterWidth);
const maxDigitWidth = Number(_opts.maxDigitWidth);
......@@ -52,7 +52,7 @@ export class EditorLayoutProvider {
let lineNumbersWidth = 0;
if (showLineNumbers) {
let digitCount = Math.max(this.digitCount(maxLineNumber), lineNumbersMinChars);
let digitCount = Math.max(lineNumbersDigitCount, lineNumbersMinChars);
lineNumbersWidth = Math.round(digitCount * maxDigitWidth);
}
......@@ -142,12 +142,5 @@ export class EditorLayoutProvider {
});
}
private static digitCount(n: number): number {
var r = 0;
while (n) {
n = Math.floor(n / 10);
r++;
}
return r ? r : 1;
}
}
......@@ -23,7 +23,7 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => {
lineHeight: 16,
showLineNumbers: false,
lineNumbersMinChars: 0,
maxLineNumber: 1,
lineNumbersDigitCount: 1,
lineDecorationsWidth: 10,
typicalHalfwidthCharacterWidth: 10,
maxDigitWidth: 10,
......@@ -77,7 +77,7 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => {
lineHeight: 16,
showLineNumbers: false,
lineNumbersMinChars: 0,
maxLineNumber: 1,
lineNumbersDigitCount: 1,
lineDecorationsWidth: 10,
typicalHalfwidthCharacterWidth: 10,
maxDigitWidth: 10,
......@@ -131,7 +131,7 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => {
lineHeight: 16,
showLineNumbers: false,
lineNumbersMinChars: 0,
maxLineNumber: 1,
lineNumbersDigitCount: 1,
lineDecorationsWidth: 10,
typicalHalfwidthCharacterWidth: 10,
maxDigitWidth: 10,
......@@ -185,7 +185,7 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => {
lineHeight: 16,
showLineNumbers: false,
lineNumbersMinChars: 0,
maxLineNumber: 1,
lineNumbersDigitCount: 1,
lineDecorationsWidth: 10,
typicalHalfwidthCharacterWidth: 10,
maxDigitWidth: 10,
......@@ -239,7 +239,7 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => {
lineHeight: 16,
showLineNumbers: false,
lineNumbersMinChars: 5,
maxLineNumber: 1,
lineNumbersDigitCount: 1,
lineDecorationsWidth: 10,
typicalHalfwidthCharacterWidth: 10,
maxDigitWidth: 10,
......@@ -293,7 +293,7 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => {
lineHeight: 16,
showLineNumbers: true,
lineNumbersMinChars: 5,
maxLineNumber: 1,
lineNumbersDigitCount: 1,
lineDecorationsWidth: 10,
typicalHalfwidthCharacterWidth: 10,
maxDigitWidth: 10,
......@@ -347,7 +347,7 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => {
lineHeight: 16,
showLineNumbers: true,
lineNumbersMinChars: 5,
maxLineNumber: 99999,
lineNumbersDigitCount: 5,
lineDecorationsWidth: 10,
typicalHalfwidthCharacterWidth: 10,
maxDigitWidth: 10,
......@@ -401,7 +401,7 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => {
lineHeight: 16,
showLineNumbers: true,
lineNumbersMinChars: 5,
maxLineNumber: 100000,
lineNumbersDigitCount: 6,
lineDecorationsWidth: 10,
typicalHalfwidthCharacterWidth: 10,
maxDigitWidth: 10,
......@@ -455,7 +455,7 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => {
lineHeight: 16,
showLineNumbers: true,
lineNumbersMinChars: 5,
maxLineNumber: 100000,
lineNumbersDigitCount: 6,
lineDecorationsWidth: 10,
typicalHalfwidthCharacterWidth: 5,
maxDigitWidth: 5,
......@@ -509,7 +509,7 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => {
lineHeight: 16,
showLineNumbers: true,
lineNumbersMinChars: 5,
maxLineNumber: 100000,
lineNumbersDigitCount: 6,
lineDecorationsWidth: 10,
typicalHalfwidthCharacterWidth: 5.05,
maxDigitWidth: 5.05,
......@@ -563,7 +563,7 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => {
lineHeight: 16,
showLineNumbers: false,
lineNumbersMinChars: 0,
maxLineNumber: 1,
lineNumbersDigitCount: 1,
lineDecorationsWidth: 10,
typicalHalfwidthCharacterWidth: 10,
maxDigitWidth: 10,
......@@ -617,7 +617,7 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => {
lineHeight: 16,
showLineNumbers: false,
lineNumbersMinChars: 0,
maxLineNumber: 1,
lineNumbersDigitCount: 1,
lineDecorationsWidth: 10,
typicalHalfwidthCharacterWidth: 10,
maxDigitWidth: 10,
......@@ -671,7 +671,7 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => {
lineHeight: 16,
showLineNumbers: false,
lineNumbersMinChars: 0,
maxLineNumber: 1,
lineNumbersDigitCount: 1,
lineDecorationsWidth: 10,
typicalHalfwidthCharacterWidth: 10,
maxDigitWidth: 10,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册