mirror of
https://github.com/microsoft/vscode.git
synced 2026-05-24 17:31:37 +01:00
Use better check for equality that works with floats and make sure the position of a hit test result is always contained in the range
This commit is contained in:
@@ -495,15 +495,17 @@ export class MouseTargetFactory {
|
||||
const request = new HitTestRequest(ctx, editorPos, pos, relativePos, target);
|
||||
try {
|
||||
const r = MouseTargetFactory._createMouseTarget(ctx, request, false);
|
||||
// console.log(MouseTarget.toString(r));
|
||||
|
||||
if (r.type === MouseTargetType.CONTENT_TEXT) {
|
||||
// Snap to the nearest soft tab boundary if atomic soft tabs are enabled.
|
||||
if (ctx.stickyTabStops && r.position !== null) {
|
||||
const position = MouseTargetFactory._snapToSoftTabBoundary(r.position, ctx.viewModel);
|
||||
return request.fulfillContentText(position, r.range, r.detail);
|
||||
const range = EditorRange.fromPositions(position, position).plusRange(r.range);
|
||||
return request.fulfillContentText(position, range, r.detail);
|
||||
}
|
||||
}
|
||||
|
||||
// console.log(MouseTarget.toString(r));
|
||||
return r;
|
||||
} catch (err) {
|
||||
// console.log(err);
|
||||
@@ -782,12 +784,10 @@ export class MouseTargetFactory {
|
||||
const lineNumber = pos.lineNumber;
|
||||
const column = pos.column;
|
||||
|
||||
const mouseContentHorizontalOffset = Math.floor(request.mouseContentHorizontalOffset);
|
||||
|
||||
const lineWidth = ctx.getLineWidth(lineNumber);
|
||||
|
||||
if (mouseContentHorizontalOffset > lineWidth) {
|
||||
const detail = createEmptyContentDataInLines(mouseContentHorizontalOffset - lineWidth);
|
||||
if (request.mouseContentHorizontalOffset > lineWidth) {
|
||||
const detail = createEmptyContentDataInLines(request.mouseContentHorizontalOffset - lineWidth);
|
||||
return request.fulfillContentEmpty(pos, detail);
|
||||
}
|
||||
|
||||
@@ -799,7 +799,7 @@ export class MouseTargetFactory {
|
||||
|
||||
const columnHorizontalOffset = visibleRange.left;
|
||||
|
||||
if (mouseContentHorizontalOffset === columnHorizontalOffset) {
|
||||
if (Math.abs(request.mouseContentHorizontalOffset - columnHorizontalOffset) < 1) {
|
||||
return request.fulfillContentText(pos, null, { mightBeForeignElement: !!injectedText, injectedText });
|
||||
}
|
||||
|
||||
@@ -833,15 +833,15 @@ export class MouseTargetFactory {
|
||||
for (let i = 1; i < points.length; i++) {
|
||||
const prev = points[i - 1];
|
||||
const curr = points[i];
|
||||
if (prev.offset <= mouseContentHorizontalOffset && mouseContentHorizontalOffset <= curr.offset) {
|
||||
if (prev.offset <= request.mouseContentHorizontalOffset && request.mouseContentHorizontalOffset <= curr.offset) {
|
||||
rng = new EditorRange(lineNumber, prev.column, lineNumber, curr.column);
|
||||
|
||||
// See https://github.com/microsoft/vscode/issues/152819
|
||||
// Due to the use of zwj, the browser's hit test result is skewed towards the left
|
||||
// Here we try to correct that if the mouse horizontal offset is closer to the right than the left
|
||||
|
||||
const prevDelta = Math.abs(prev.offset - mouseContentHorizontalOffset);
|
||||
const nextDelta = Math.abs(curr.offset - mouseContentHorizontalOffset);
|
||||
const prevDelta = Math.abs(prev.offset - request.mouseContentHorizontalOffset);
|
||||
const nextDelta = Math.abs(curr.offset - request.mouseContentHorizontalOffset);
|
||||
|
||||
pos = (
|
||||
prevDelta < nextDelta
|
||||
|
||||
Reference in New Issue
Block a user