Skip to content

Commit 4e26835

Browse files
committed
Adjust sampled lines with model events
1 parent 60294bf commit 4e26835

1 file changed

Lines changed: 68 additions & 15 deletions

File tree

src/vs/editor/browser/viewParts/minimap/minimap.ts

Lines changed: 68 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -399,14 +399,14 @@ class RenderData {
399399
};
400400
}
401401

402-
public onLinesChanged(e: viewEvents.ViewLinesChangedEvent): boolean {
403-
return this._renderedLines.onLinesChanged(e.fromLineNumber, e.toLineNumber);
402+
public onLinesChanged(changeFromLineNumber: number, changeToLineNumber: number): boolean {
403+
return this._renderedLines.onLinesChanged(changeFromLineNumber, changeToLineNumber);
404404
}
405-
public onLinesDeleted(e: viewEvents.ViewLinesDeletedEvent): void {
406-
this._renderedLines.onLinesDeleted(e.fromLineNumber, e.toLineNumber);
405+
public onLinesDeleted(deleteFromLineNumber: number, deleteToLineNumber: number): void {
406+
this._renderedLines.onLinesDeleted(deleteFromLineNumber, deleteToLineNumber);
407407
}
408-
public onLinesInserted(e: viewEvents.ViewLinesInsertedEvent): void {
409-
this._renderedLines.onLinesInserted(e.fromLineNumber, e.toLineNumber);
408+
public onLinesInserted(insertFromLineNumber: number, insertToLineNumber: number): void {
409+
this._renderedLines.onLinesInserted(insertFromLineNumber, insertToLineNumber);
410410
}
411411
public onTokensChanged(ranges: { fromLineNumber: number; toLineNumber: number; }[]): boolean {
412412
return this._renderedLines.onTokensChanged(ranges);
@@ -561,13 +561,61 @@ export class Minimap extends ViewPart implements IMinimapModel {
561561
return this._actual.onFlushed();
562562
}
563563
public onLinesChanged(e: viewEvents.ViewLinesChangedEvent): boolean {
564-
return this._actual.onLinesChanged(e); // TODO
564+
if (this._isSampling) {
565+
let fromLineIndex = this._modelLineToMinimapLine(e.fromLineNumber) - 1;
566+
while (fromLineIndex > 0 && this._minimapLines[fromLineIndex - 1] >= e.fromLineNumber) {
567+
fromLineIndex--;
568+
}
569+
let toLineIndex = this._modelLineToMinimapLine(e.toLineNumber) - 1;
570+
while (toLineIndex + 1 < this._minimapLines.length && this._minimapLines[toLineIndex + 1] <= e.toLineNumber) {
571+
toLineIndex++;
572+
}
573+
return this._actual.onLinesChanged(fromLineIndex + 1, toLineIndex + 1);
574+
} else {
575+
return this._actual.onLinesChanged(e.fromLineNumber, e.toLineNumber);
576+
}
565577
}
566578
public onLinesDeleted(e: viewEvents.ViewLinesDeletedEvent): boolean {
567-
return this._actual.onLinesDeleted(e); // TODO
579+
if (this._isSampling) {
580+
// have the mapping be sticky
581+
const deletedLineCount = e.toLineNumber - e.fromLineNumber + 1;
582+
let changeStartIndex = this._minimapLines.length;
583+
let changeEndIndex = 0;
584+
for (let i = this._minimapLines.length - 1; i >= 0; i--) {
585+
if (this._minimapLines[i] < e.fromLineNumber) {
586+
break;
587+
}
588+
if (this._minimapLines[i] <= e.toLineNumber) {
589+
// this line got deleted => move to previous available
590+
this._minimapLines[i] = Math.max(1, e.fromLineNumber - 1);
591+
changeStartIndex = Math.min(changeStartIndex, i);
592+
changeEndIndex = Math.max(changeEndIndex, i);
593+
} else {
594+
this._minimapLines[i] -= deletedLineCount;
595+
}
596+
}
597+
if (changeStartIndex <= changeEndIndex) {
598+
this._actual.onLinesChanged(changeStartIndex + 1, changeEndIndex + 1);
599+
}
600+
return this._checkMapping();
601+
} else {
602+
return this._actual.onLinesDeleted(e.fromLineNumber, e.toLineNumber);
603+
}
568604
}
569605
public onLinesInserted(e: viewEvents.ViewLinesInsertedEvent): boolean {
570-
return this._actual.onLinesInserted(e); // TODO
606+
if (this._isSampling) {
607+
// have the mapping be sticky
608+
const insertedLineCount = e.toLineNumber - e.fromLineNumber + 1;
609+
for (let i = this._minimapLines.length - 1; i >= 0; i--) {
610+
if (this._minimapLines[i] < e.fromLineNumber) {
611+
break;
612+
}
613+
this._minimapLines[i] += insertedLineCount;
614+
}
615+
return this._checkMapping();
616+
} else {
617+
return this._actual.onLinesInserted(e.fromLineNumber, e.toLineNumber);
618+
}
571619
}
572620
public onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean {
573621
return this._actual.onScrollChanged();
@@ -635,6 +683,11 @@ export class Minimap extends ViewPart implements IMinimapModel {
635683

636684
//#region IMinimapModel
637685

686+
private _checkMapping(): boolean {
687+
// console.log(`TODO: I SHOULD ADJUST THE MAPPING!!!`, this._minimapLines);
688+
return false;
689+
}
690+
638691
private _recreateLineMapping(): void {
639692
const options = this._context.configuration.options;
640693
const layoutInfo = options.get(EditorOption.layoutInfo);
@@ -1010,21 +1063,21 @@ class InnerMinimap extends Disposable {
10101063
this._lastRenderData = null;
10111064
return true;
10121065
}
1013-
public onLinesChanged(e: viewEvents.ViewLinesChangedEvent): boolean {
1066+
public onLinesChanged(changeFromLineNumber: number, changeToLineNumber: number): boolean {
10141067
if (this._lastRenderData) {
1015-
return this._lastRenderData.onLinesChanged(e);
1068+
return this._lastRenderData.onLinesChanged(changeFromLineNumber, changeToLineNumber);
10161069
}
10171070
return false;
10181071
}
1019-
public onLinesDeleted(e: viewEvents.ViewLinesDeletedEvent): boolean {
1072+
public onLinesDeleted(deleteFromLineNumber: number, deleteToLineNumber: number): boolean {
10201073
if (this._lastRenderData) {
1021-
this._lastRenderData.onLinesDeleted(e);
1074+
this._lastRenderData.onLinesDeleted(deleteFromLineNumber, deleteToLineNumber);
10221075
}
10231076
return true;
10241077
}
1025-
public onLinesInserted(e: viewEvents.ViewLinesInsertedEvent): boolean {
1078+
public onLinesInserted(insertFromLineNumber: number, insertToLineNumber: number): boolean {
10261079
if (this._lastRenderData) {
1027-
this._lastRenderData.onLinesInserted(e);
1080+
this._lastRenderData.onLinesInserted(insertFromLineNumber, insertToLineNumber);
10281081
}
10291082
return true;
10301083
}

0 commit comments

Comments
 (0)