提交 5c5e503c 编写于 作者: A Alex Dima

Fixes #55640

上级 9fa82e01
......@@ -8,7 +8,7 @@ import { onUnexpectedError } from 'vs/base/common/errors';
import { IDisposable } from 'vs/base/common/lifecycle';
import * as dom from 'vs/base/browser/dom';
import { FastDomNode, createFastDomNode } from 'vs/base/browser/fastDomNode';
import { Range } from 'vs/editor/common/core/range';
import { Position } from 'vs/editor/common/core/position';
import { ViewEventHandler } from 'vs/editor/common/viewModel/viewEventHandler';
import { IConfiguration } from 'vs/editor/common/editorCommon';
import { TextAreaHandler, ITextAreaHandlerHelper } from 'vs/editor/browser/controller/textAreaHandler';
......@@ -263,11 +263,7 @@ export class View extends ViewEventHandler {
visibleRangeForPosition2: (lineNumber: number, column: number) => {
this._flushAccumulatedAndRenderNow();
let visibleRanges = this.viewLines.visibleRangesForRange2(new Range(lineNumber, column, lineNumber, column));
if (!visibleRanges) {
return null;
}
return visibleRanges[0];
return this.viewLines.visibleRangeForPosition(new Position(lineNumber, column));
},
getLineWidth: (lineNumber: number) => {
......@@ -281,11 +277,7 @@ export class View extends ViewEventHandler {
return {
visibleRangeForPositionRelativeToEditor: (lineNumber: number, column: number) => {
this._flushAccumulatedAndRenderNow();
let visibleRanges = this.viewLines.visibleRangesForRange2(new Range(lineNumber, column, lineNumber, column));
if (!visibleRanges) {
return null;
}
return visibleRanges[0];
return this.viewLines.visibleRangeForPosition(new Position(lineNumber, column));
}
};
}
......@@ -464,11 +456,11 @@ export class View extends ViewEventHandler {
});
let viewPosition = this._context.model.coordinatesConverter.convertModelPositionToViewPosition(modelPosition);
this._flushAccumulatedAndRenderNow();
let visibleRanges = this.viewLines.visibleRangesForRange2(new Range(viewPosition.lineNumber, viewPosition.column, viewPosition.lineNumber, viewPosition.column));
if (!visibleRanges) {
const visibleRange = this.viewLines.visibleRangeForPosition(new Position(viewPosition.lineNumber, viewPosition.column));
if (!visibleRange) {
return -1;
}
return visibleRanges[0].left;
return visibleRange.left;
}
public getTargetAtClientPoint(clientX: number, clientY: number): editorBrowser.IMouseTarget {
......
......@@ -412,7 +412,7 @@ export class ViewLines extends ViewPart implements IVisibleLinesHost<ViewLine>,
return visibleRanges;
}
public visibleRangesForRange2(range: Range): HorizontalRange[] {
private visibleRangesForRange2(range: Range): HorizontalRange[] {
if (this.shouldRender()) {
// Cannot read from the DOM because it is dirty
......@@ -454,6 +454,14 @@ export class ViewLines extends ViewPart implements IVisibleLinesHost<ViewLine>,
return result;
}
public visibleRangeForPosition(position: Position): HorizontalRange {
const visibleRanges = this.visibleRangesForRange2(new Range(position.lineNumber, position.column, position.lineNumber, position.column));
if (!visibleRanges) {
return null;
}
return visibleRanges[0];
}
// --- implementation
public updateLineWidths(): void {
......
......@@ -138,8 +138,13 @@ export class ViewCursor {
} else {
width = dom.computeScreenAwareSize(1);
}
let left = visibleRange.left;
if (width >= 2) {
// try to center cursor
left -= 1;
}
const top = ctx.getVerticalOffsetForLineNumber(this._position.lineNumber) - ctx.bigNumbersDelta;
return new ViewCursorRenderData(top, visibleRange.left, width, this._lineHeight, textContent, textContentClassName);
return new ViewCursorRenderData(top, left, width, this._lineHeight, textContent, textContentClassName);
}
const visibleRangeForCharacter = ctx.linesVisibleRangesForRange(new Range(this._position.lineNumber, this._position.column, this._position.lineNumber, this._position.column + 1), false);
......
......@@ -11,7 +11,7 @@ import { Position } from 'vs/editor/common/core/position';
export interface IViewLines {
linesVisibleRangesForRange(range: Range, includeNewLines: boolean): LineVisibleRanges[];
visibleRangesForRange2(range: Range): HorizontalRange[];
visibleRangeForPosition(position: Position): HorizontalRange;
}
export abstract class RestrictedRenderingContext {
......@@ -79,13 +79,7 @@ export class RenderingContext extends RestrictedRenderingContext {
}
public visibleRangeForPosition(position: Position): HorizontalRange {
const visibleRanges = this._viewLines.visibleRangesForRange2(
new Range(position.lineNumber, position.column, position.lineNumber, position.column)
);
if (!visibleRanges) {
return null;
}
return visibleRanges[0];
return this._viewLines.visibleRangeForPosition(position);
}
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册