未验证 提交 3f315eda 编写于 作者: A Alex Dima

Deliver events only if sampled lines are affected

上级 4e268350
...@@ -562,15 +562,12 @@ export class Minimap extends ViewPart implements IMinimapModel { ...@@ -562,15 +562,12 @@ export class Minimap extends ViewPart implements IMinimapModel {
} }
public onLinesChanged(e: viewEvents.ViewLinesChangedEvent): boolean { public onLinesChanged(e: viewEvents.ViewLinesChangedEvent): boolean {
if (this._isSampling) { if (this._isSampling) {
let fromLineIndex = this._modelLineToMinimapLine(e.fromLineNumber) - 1; const minimapLineRange = this._modelLineRangeToMinimapLineRange(e.fromLineNumber, e.toLineNumber);
while (fromLineIndex > 0 && this._minimapLines[fromLineIndex - 1] >= e.fromLineNumber) { if (minimapLineRange) {
fromLineIndex--; return this._actual.onLinesChanged(minimapLineRange[0], minimapLineRange[1]);
} } else {
let toLineIndex = this._modelLineToMinimapLine(e.toLineNumber) - 1; return false;
while (toLineIndex + 1 < this._minimapLines.length && this._minimapLines[toLineIndex + 1] <= e.toLineNumber) {
toLineIndex++;
} }
return this._actual.onLinesChanged(fromLineIndex + 1, toLineIndex + 1);
} else { } else {
return this._actual.onLinesChanged(e.fromLineNumber, e.toLineNumber); return this._actual.onLinesChanged(e.fromLineNumber, e.toLineNumber);
} }
...@@ -630,12 +627,16 @@ export class Minimap extends ViewPart implements IMinimapModel { ...@@ -630,12 +627,16 @@ export class Minimap extends ViewPart implements IMinimapModel {
if (this._isSampling) { if (this._isSampling) {
let ranges: { fromLineNumber: number; toLineNumber: number; }[] = []; let ranges: { fromLineNumber: number; toLineNumber: number; }[] = [];
for (const range of e.ranges) { for (const range of e.ranges) {
ranges.push({ const minimapLineRange = this._modelLineRangeToMinimapLineRange(range.fromLineNumber, range.toLineNumber);
fromLineNumber: this._modelLineToMinimapLine(range.fromLineNumber), if (minimapLineRange) {
toLineNumber: this._modelLineToMinimapLine(range.toLineNumber) ranges.push({ fromLineNumber: minimapLineRange[0], toLineNumber: minimapLineRange[1] });
}); }
}
if (ranges.length) {
return this._actual.onTokensChanged(ranges);
} else {
return false;
} }
return this._actual.onTokensChanged(ranges);
} else { } else {
return this._actual.onTokensChanged(e.ranges); return this._actual.onTokensChanged(e.ranges);
} }
...@@ -715,6 +716,28 @@ export class Minimap extends ViewPart implements IMinimapModel { ...@@ -715,6 +716,28 @@ export class Minimap extends ViewPart implements IMinimapModel {
return Math.min(this._minimapLines.length, Math.max(1, Math.round(lineNumber / this._samplingRatio))); return Math.min(this._minimapLines.length, Math.max(1, Math.round(lineNumber / this._samplingRatio)));
} }
/**
* Will return null if the model line ranges are not intersecting with a sampled model line.
*/
private _modelLineRangeToMinimapLineRange(fromLineNumber: number, toLineNumber: number): [number, number] | null {
let fromLineIndex = this._modelLineToMinimapLine(fromLineNumber) - 1;
while (fromLineIndex > 0 && this._minimapLines[fromLineIndex - 1] >= fromLineNumber) {
fromLineIndex--;
}
let toLineIndex = this._modelLineToMinimapLine(toLineNumber) - 1;
while (toLineIndex + 1 < this._minimapLines.length && this._minimapLines[toLineIndex + 1] <= toLineNumber) {
toLineIndex++;
}
if (fromLineIndex === toLineIndex) {
const sampledLineNumber = this._minimapLines[fromLineIndex];
if (sampledLineNumber < fromLineNumber || sampledLineNumber > toLineNumber) {
// This line is not part of the sampled lines ==> nothing to do
return null;
}
}
return [fromLineIndex + 1, toLineIndex + 1];
}
private _recomputeMinimapSelections(): void { private _recomputeMinimapSelections(): void {
this._minimapSelections = []; this._minimapSelections = [];
for (const selection of this._selections) { for (const selection of this._selections) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册