Skip to content

Commit

Permalink
fix: use view range for glyph margin widgets (microsoft#198733)
Browse files Browse the repository at this point in the history
  • Loading branch information
joyceerhl committed Nov 21, 2023
1 parent 2e5e076 commit 266cccf
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 2 deletions.
5 changes: 3 additions & 2 deletions src/vs/editor/browser/viewParts/glyphMargin/glyphMargin.ts
Original file line number Diff line number Diff line change
Expand Up @@ -275,13 +275,14 @@ export class GlyphMarginWidgets extends ViewPart {

for (const widget of Object.values(this._widgets)) {
const range = widget.preference.range;
if (range.endLineNumber < visibleStartLineNumber || range.startLineNumber > visibleEndLineNumber) {
const { startLineNumber, endLineNumber } = this._context.viewModel.coordinatesConverter.convertModelRangeToViewRange(Range.lift(range));
if (!startLineNumber || !endLineNumber || endLineNumber < visibleStartLineNumber || startLineNumber > visibleEndLineNumber) {
// The widget is not in the viewport
continue;
}

// The widget is in the viewport, find a good line for it
const widgetLineNumber = Math.max(range.startLineNumber, visibleStartLineNumber);
const widgetLineNumber = Math.max(startLineNumber, visibleStartLineNumber);
const lane = Math.min(widget.preference.lane, this._glyphMarginDecorationLaneCount);
requests.push(new WidgetBasedGlyphRenderRequest(widgetLineNumber, lane, widget.preference.zIndex, widget));
}
Expand Down
13 changes: 13 additions & 0 deletions src/vs/editor/common/viewModel/viewModelLines.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1308,6 +1308,19 @@ class IdentityCoordinatesConverter implements ICoordinatesConverter {
return true;
}

public modelRangeIsVisible(modelRange: Range): boolean {
const lineCount = this._lines.model.getLineCount();
if (modelRange.startLineNumber < 1 || modelRange.startLineNumber > lineCount) {
// invalid arguments
return false;
}
if (modelRange.endLineNumber < 1 || modelRange.endLineNumber > lineCount) {
// invalid arguments
return false;
}
return true;
}

public getModelLineViewLineCount(modelLineNumber: number): number {
return 1;
}
Expand Down

0 comments on commit 266cccf

Please sign in to comment.