Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/microsoft/vscode.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/vs/workbench/contrib/mergeEditor/browser/view/editorGutter.ts')
-rw-r--r--src/vs/workbench/contrib/mergeEditor/browser/view/editorGutter.ts54
1 files changed, 19 insertions, 35 deletions
diff --git a/src/vs/workbench/contrib/mergeEditor/browser/view/editorGutter.ts b/src/vs/workbench/contrib/mergeEditor/browser/view/editorGutter.ts
index 2b208650738..7289cc61637 100644
--- a/src/vs/workbench/contrib/mergeEditor/browser/view/editorGutter.ts
+++ b/src/vs/workbench/contrib/mergeEditor/browser/view/editorGutter.ts
@@ -5,22 +5,23 @@
import { h } from 'vs/base/browser/dom';
import { Disposable, IDisposable } from 'vs/base/common/lifecycle';
+import { autorun, IReader, observableFromEvent, observableSignalFromEvent } from 'vs/base/common/observable';
import { CodeEditorWidget } from 'vs/editor/browser/widget/codeEditorWidget';
-import { EditorOption } from 'vs/editor/common/config/editorOptions';
-import { autorun, IReader, observableFromEvent, ObservableValue } from 'vs/workbench/contrib/audioCues/browser/observable';
import { LineRange } from 'vs/workbench/contrib/mergeEditor/browser/model/lineRange';
export class EditorGutter<T extends IGutterItemInfo = IGutterItemInfo> extends Disposable {
private readonly scrollTop = observableFromEvent(
this._editor.onDidScrollChange,
- (e) => this._editor.getScrollTop()
+ (e) => /** @description editor.onDidScrollChange */ this._editor.getScrollTop()
);
+ private readonly isScrollTopZero = this.scrollTop.map((scrollTop) => /** @description isScrollTopZero */ scrollTop === 0);
private readonly modelAttached = observableFromEvent(
this._editor.onDidChangeModel,
- (e) => this._editor.hasModel()
+ (e) => /** @description editor.onDidChangeModel */ this._editor.hasModel()
);
- private readonly changeCounter = new ObservableValue(0, 'counter');
+ private readonly editorOnDidChangeViewZones = observableSignalFromEvent('onDidChangeViewZones', this._editor.onDidChangeViewZones);
+ private readonly editorOnDidContentSizeChange = observableSignalFromEvent('onDidContentSizeChange', this._editor.onDidContentSizeChange);
constructor(
private readonly _editor: CodeEditorWidget,
@@ -34,20 +35,11 @@ export class EditorGutter<T extends IGutterItemInfo = IGutterItemInfo> extends D
.root
);
- this._register(autorun((reader) => {
- scrollDecoration.className = this.scrollTop.read(reader) === 0 ? '' : 'scroll-decoration';
- }, 'update scroll decoration'));
+ this._register(autorun('update scroll decoration', (reader) => {
+ scrollDecoration.className = this.isScrollTopZero.read(reader) ? '' : 'scroll-decoration';
+ }));
-
- this._register(autorun((reader) => this.render(reader), 'Render'));
-
- this._editor.onDidChangeViewZones(e => {
- this.changeCounter.set(this.changeCounter.get() + 1, undefined);
- });
-
- this._editor.onDidContentSizeChange(e => {
- this.changeCounter.set(this.changeCounter.get() + 1, undefined);
- });
+ this._register(autorun('EditorGutter.Render', (reader) => this.render(reader)));
}
private readonly views = new Map<string, ManagedGutterItemView>();
@@ -56,7 +48,10 @@ export class EditorGutter<T extends IGutterItemInfo = IGutterItemInfo> extends D
if (!this.modelAttached.read(reader)) {
return;
}
- this.changeCounter.read(reader);
+
+ this.editorOnDidChangeViewZones.read(reader);
+ this.editorOnDidContentSizeChange.read(reader);
+
const scrollTop = this.scrollTop.read(reader);
const visibleRanges = this._editor.getVisibleRanges();
@@ -68,15 +63,13 @@ export class EditorGutter<T extends IGutterItemInfo = IGutterItemInfo> extends D
const visibleRange2 = new LineRange(
visibleRange.startLineNumber,
visibleRange.endLineNumber - visibleRange.startLineNumber
- );
+ ).deltaEnd(1);
const gutterItems = this.itemProvider.getIntersectingGutterItems(
visibleRange2,
reader
);
- const lineHeight = this._editor.getOptions().get(EditorOption.lineHeight);
-
for (const gutterItem of gutterItems) {
if (!gutterItem.range.touches(visibleRange2)) {
continue;
@@ -99,19 +92,10 @@ export class EditorGutter<T extends IGutterItemInfo = IGutterItemInfo> extends D
}
const top =
- (gutterItem.range.startLineNumber === 1
- ? -lineHeight
- : this._editor.getTopForLineNumber(
- gutterItem.range.startLineNumber - 1
- )) -
- scrollTop +
- lineHeight;
-
- const bottom = (
- gutterItem.range.endLineNumberExclusive <= this._editor.getModel()!.getLineCount()
- ? this._editor.getTopForLineNumber(gutterItem.range.endLineNumberExclusive)
- : this._editor.getTopForLineNumber(gutterItem.range.endLineNumberExclusive - 1) + lineHeight
- ) - scrollTop;
+ gutterItem.range.startLineNumber <= this._editor.getModel()!.getLineCount()
+ ? this._editor.getTopForLineNumber(gutterItem.range.startLineNumber, true) - scrollTop
+ : this._editor.getBottomForLineNumber(gutterItem.range.startLineNumber - 1, false) - scrollTop;
+ const bottom = this._editor.getBottomForLineNumber(gutterItem.range.endLineNumberExclusive - 1, true) - scrollTop;
const height = bottom - top;