diff --git a/src/vs/editor/browser/controller/mouseTarget.ts b/src/vs/editor/browser/controller/mouseTarget.ts index ff6bc23c170..0e21b9588b5 100644 --- a/src/vs/editor/browser/controller/mouseTarget.ts +++ b/src/vs/editor/browser/controller/mouseTarget.ts @@ -694,7 +694,7 @@ export class MouseTargetFactory { return request.fulfill(MouseTargetType.CONTENT_EMPTY, pos, void 0, EMPTY_CONTENT_IN_LINES); } - let visibleRange = ctx.visibleRangeForPosition2(lineNumber, column); + const visibleRange = ctx.visibleRangeForPosition2(lineNumber, column); if (!visibleRange) { return request.fulfill(MouseTargetType.UNKNOWN, pos); @@ -706,33 +706,35 @@ export class MouseTargetFactory { return request.fulfill(MouseTargetType.CONTENT_TEXT, pos); } - let mouseIsBetween: boolean; + // Let's define a, b, c and check if the offset is in between them... + interface OffsetColumn { offset: number; column: number; } + + let points: OffsetColumn[] = []; + points.push({ offset: visibleRange.left, column: column }); if (column > 1) { - let prevColumnHorizontalOffset = visibleRange.left; - mouseIsBetween = false; - mouseIsBetween = mouseIsBetween || (prevColumnHorizontalOffset < request.mouseContentHorizontalOffset && request.mouseContentHorizontalOffset < columnHorizontalOffset); // LTR case - mouseIsBetween = mouseIsBetween || (columnHorizontalOffset < request.mouseContentHorizontalOffset && request.mouseContentHorizontalOffset < prevColumnHorizontalOffset); // RTL case - if (mouseIsBetween) { - let rng = new EditorRange(lineNumber, column, lineNumber, column - 1); + const visibleRange = ctx.visibleRangeForPosition2(lineNumber, column - 1); + if (visibleRange) { + points.push({ offset: visibleRange.left, column: column - 1 }); + } + } + const lineMaxColumn = ctx.model.getLineMaxColumn(lineNumber); + if (column < lineMaxColumn) { + const visibleRange = ctx.visibleRangeForPosition2(lineNumber, column + 1); + if (visibleRange) { + points.push({ offset: visibleRange.left, column: column + 1 }); + } + } + + points.sort((a, b) => a.offset - b.offset); + + for (let i = 1; i < points.length; i++) { + const prev = points[i - 1]; + const curr = points[i]; + if (prev.offset <= request.mouseContentHorizontalOffset && request.mouseContentHorizontalOffset <= curr.offset) { + const rng = new EditorRange(lineNumber, prev.column, lineNumber, curr.column); return request.fulfill(MouseTargetType.CONTENT_TEXT, pos, rng); } } - - let lineMaxColumn = ctx.model.getLineMaxColumn(lineNumber); - if (column < lineMaxColumn) { - let nextColumnVisibleRange = ctx.visibleRangeForPosition2(lineNumber, column + 1); - if (nextColumnVisibleRange) { - let nextColumnHorizontalOffset = nextColumnVisibleRange.left; - mouseIsBetween = false; - mouseIsBetween = mouseIsBetween || (columnHorizontalOffset < request.mouseContentHorizontalOffset && request.mouseContentHorizontalOffset < nextColumnHorizontalOffset); // LTR case - mouseIsBetween = mouseIsBetween || (nextColumnHorizontalOffset < request.mouseContentHorizontalOffset && request.mouseContentHorizontalOffset < columnHorizontalOffset); // RTL case - if (mouseIsBetween) { - let rng = new EditorRange(lineNumber, column, lineNumber, column + 1); - return request.fulfill(MouseTargetType.CONTENT_TEXT, pos, rng); - } - } - } - return request.fulfill(MouseTargetType.CONTENT_TEXT, pos); } @@ -940,4 +942,4 @@ export class MouseTargetFactory { hitTarget: null }; } -} \ No newline at end of file +} diff --git a/src/vs/editor/common/view/overviewZoneManager.ts b/src/vs/editor/common/view/overviewZoneManager.ts index 92759f72bbe..bb624485513 100644 --- a/src/vs/editor/common/view/overviewZoneManager.ts +++ b/src/vs/editor/common/view/overviewZoneManager.ts @@ -180,6 +180,7 @@ export class OverviewZoneManager { const totalHeight = Math.floor(this.getCanvasHeight()); // @perf const outerHeight = Math.floor(this._outerHeight); // @perf const heightRatio = totalHeight / outerHeight; + const halfMinimumHeight = Math.floor(Constants.MINIMUM_HEIGHT * this._pixelRatio / 2); let allColorZones: ColorZone[] = []; for (let i = 0, len = this._zones.length; i < len; i++) { @@ -199,8 +200,8 @@ export class OverviewZoneManager { let ycenter = Math.floor((y1 + y2) / 2); let halfHeight = (y2 - ycenter); - if (halfHeight < Constants.MINIMUM_HEIGHT / 2) { - halfHeight = Constants.MINIMUM_HEIGHT / 2; + if (halfHeight < halfMinimumHeight) { + halfHeight = halfMinimumHeight; } if (ycenter - halfHeight < 0) {