Skip to content

Commit 56e7997

Browse files
authored
Taking into account view data when getting line height (microsoft#248712)
* wip * wip * using position
1 parent b2feb82 commit 56e7997

File tree

8 files changed

+18
-12
lines changed

8 files changed

+18
-12
lines changed

src/vs/editor/browser/editorBrowser.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1078,7 +1078,7 @@ export interface ICodeEditor extends editorCommon.IEditor {
10781078
/**
10791079
* Get the line height for the line number.
10801080
*/
1081-
getLineHeightForLineNumber(lineNumber: number): number;
1081+
getLineHeightForPosition(position: IPosition): number;
10821082

10831083
/**
10841084
* Set the model ranges that will be hidden in the view.

src/vs/editor/browser/widget/codeEditor/codeEditorWidget.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -597,12 +597,15 @@ export class CodeEditorWidget extends Disposable implements editorBrowser.ICodeE
597597
return CodeEditorWidget._getVerticalOffsetAfterPosition(this._modelData, lineNumber, maxCol, includeViewZones);
598598
}
599599

600-
public getLineHeightForLineNumber(lineNumber: number): number {
600+
public getLineHeightForPosition(position: IPosition): number {
601601
if (!this._modelData) {
602602
return -1;
603603
}
604-
const viewPosition = this._modelData.viewModel.coordinatesConverter.convertModelPositionToViewPosition(new Position(lineNumber, 1));
605-
return this._modelData.viewModel.viewLayout.getLineHeightForLineNumber(viewPosition.lineNumber);
604+
const viewModel = this._modelData.viewModel;
605+
if (viewModel.coordinatesConverter.modelPositionIsVisible(Position.lift(position))) {
606+
return viewModel.viewLayout.getLineHeightForLineNumber(position.lineNumber);
607+
}
608+
return 0;
606609
}
607610

608611
public setHiddenAreas(ranges: IRange[], source?: unknown, forceUpdate?: boolean): void {
@@ -1609,7 +1612,7 @@ export class CodeEditorWidget extends Disposable implements editorBrowser.ICodeE
16091612

16101613
const top = CodeEditorWidget._getVerticalOffsetForPosition(this._modelData, position.lineNumber, position.column) - this.getScrollTop();
16111614
const left = this._modelData.view.getOffsetForColumn(position.lineNumber, position.column) + layoutInfo.glyphMarginWidth + layoutInfo.lineNumbersWidth + layoutInfo.decorationsWidth - this.getScrollLeft();
1612-
const height = this.getLineHeightForLineNumber(position.lineNumber);
1615+
const height = this.getLineHeightForPosition(position);
16131616
return {
16141617
top: top,
16151618
left: left,

src/vs/editor/common/viewLayout/viewLayout.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -405,7 +405,7 @@ export class ViewLayout extends Disposable implements IViewLayout {
405405
public isInTopPadding(verticalOffset: number): boolean {
406406
return this._linesLayout.isInTopPadding(verticalOffset);
407407
}
408-
isInBottomPadding(verticalOffset: number): boolean {
408+
public isInBottomPadding(verticalOffset: number): boolean {
409409
return this._linesLayout.isInBottomPadding(verticalOffset);
410410
}
411411

src/vs/editor/contrib/stickyScroll/browser/stickyScrollProvider.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import { Event, Emitter } from '../../../../base/common/event.js';
1515
import { ILanguageConfigurationService } from '../../../common/languages/languageConfigurationRegistry.js';
1616
import { StickyModelProvider, IStickyModelProvider } from './stickyScrollModelProvider.js';
1717
import { StickyElement, StickyModel, StickyRange } from './stickyScrollElement.js';
18+
import { Position } from '../../../common/core/position.js';
1819

1920
export class StickyLineCandidate {
2021
constructor(
@@ -175,7 +176,7 @@ export class StickyLineCandidateProvider extends Disposable implements IStickyLi
175176
const childEndLine = childRange.endLineNumber;
176177
if (range.startLineNumber <= childEndLine + 1 && childStartLine - 1 <= range.endLineNumber && childStartLine !== lastLine) {
177178
lastLine = childStartLine;
178-
const lineHeight = this._editor.getLineHeightForLineNumber(childStartLine);
179+
const lineHeight = this._editor.getLineHeightForPosition(new Position(childStartLine, 1));
179180
result.push(new StickyLineCandidate(childStartLine, childEndLine - 1, top, lineHeight));
180181
this.getCandidateStickyLinesIntersectingFromStickyModel(range, child, result, depth + 1, top + lineHeight, childStartLine);
181182
}

src/vs/editor/contrib/stickyScroll/browser/stickyScrollWidget.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,7 @@ export class StickyScrollWidget extends Disposable implements IOverlayWidget {
263263
private _getHeightOfLines(lineNumbers: number[], lastLineRelativePosition: number): number {
264264
let totalHeight = 0;
265265
for (let i = 0; i < lineNumbers.length; i++) {
266-
totalHeight += this._editor.getLineHeightForLineNumber(lineNumbers[i]);
266+
totalHeight += this._editor.getLineHeightForPosition(new Position(lineNumbers[i], 1));
267267
}
268268
return totalHeight + lastLineRelativePosition;
269269
}
@@ -318,7 +318,7 @@ export class StickyScrollWidget extends Disposable implements IOverlayWidget {
318318
actualInlineDecorations = [];
319319
}
320320

321-
const lineHeight = this._editor.getLineHeightForLineNumber(line);
321+
const lineHeight = this._editor.getLineHeightForPosition(new Position(line, 1));
322322
const renderLineInput: RenderLineInput = new RenderLineInput(true, true, lineRenderingData.content,
323323
lineRenderingData.continuesWithWrappedLine,
324324
lineRenderingData.isBasicASCII, lineRenderingData.containsRTL, 0,

src/vs/monaco.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6118,7 +6118,7 @@ declare namespace monaco.editor {
61186118
/**
61196119
* Get the line height for the line number.
61206120
*/
6121-
getLineHeightForLineNumber(lineNumber: number): number;
6121+
getLineHeightForPosition(position: IPosition): number;
61226122
/**
61236123
* Write the screen reader content to be the current selection
61246124
*/

src/vs/workbench/contrib/codeEditor/browser/emptyTextEditorHint/emptyTextEditorHint.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import { IContextMenuService } from '../../../../../platform/contextview/browser
3333
import { StandardMouseEvent } from '../../../../../base/browser/mouseEvent.js';
3434
import { ChatAgentLocation } from '../../../chat/common/constants.js';
3535
import { IInstantiationService } from '../../../../../platform/instantiation/common/instantiation.js';
36+
import { Position } from '../../../../../editor/common/core/position.js';
3637

3738
export const emptyTextEditorHintSetting = 'workbench.editor.empty.hint';
3839
export class EmptyTextEditorHintContribution extends Disposable implements IEditorContribution {
@@ -319,7 +320,7 @@ class EmptyTextEditorHintContentWidget extends Disposable implements IContentWid
319320
}));
320321

321322
this.editor.applyFontInfo(this.domNode);
322-
const lineHeight = this.editor.getLineHeightForLineNumber(1);
323+
const lineHeight = this.editor.getLineHeightForPosition(new Position(1, 1));
323324
this.domNode.style.lineHeight = lineHeight + 'px';
324325
}
325326

src/vs/workbench/contrib/interactive/browser/replInputHintContentWidget.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import { Disposable } from '../../../../base/common/lifecycle.js';
1212
import { OS } from '../../../../base/common/platform.js';
1313
import { ContentWidgetPositionPreference, ICodeEditor, IContentWidget, IContentWidgetPosition } from '../../../../editor/browser/editorBrowser.js';
1414
import { ConfigurationChangedEvent, EditorOption } from '../../../../editor/common/config/editorOptions.js';
15+
import { Position } from '../../../../editor/common/core/position.js';
1516
import { localize } from '../../../../nls.js';
1617
import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js';
1718
import { IKeybindingService } from '../../../../platform/keybinding/common/keybinding.js';
@@ -77,7 +78,7 @@ export class ReplInputHintContentWidget extends Disposable implements IContentWi
7778
}));
7879

7980
this.editor.applyFontInfo(this.domNode);
80-
const lineHeight = this.editor.getLineHeightForLineNumber(1);
81+
const lineHeight = this.editor.getLineHeightForPosition(new Position(1, 1));
8182
this.domNode.style.lineHeight = lineHeight + 'px';
8283
}
8384

0 commit comments

Comments
 (0)