[folding] optimize mouse click listening

This commit is contained in:
Martin Aeschlimann
2017-11-08 12:02:08 +01:00
parent 48d98cdf07
commit 2a8142f7b4
2 changed files with 30 additions and 25 deletions
@@ -32,6 +32,10 @@ export interface IMarginData {
offsetX: number;
}
export interface IEmptyContentData {
isAfterLines: boolean;
}
interface IETextRange {
boundingHeight: number;
boundingLeft: number;
@@ -397,6 +401,9 @@ class HitTestRequest extends BareHitTestRequest {
}
}
const EMPTY_CONTENT_AFTER_LINES: IEmptyContentData = { isAfterLines: true };
const EMPTY_CONTENT_IN_LINES: IEmptyContentData = { isAfterLines: false };
export class MouseTargetFactory {
private _context: ViewContext;
@@ -608,7 +615,7 @@ export class MouseTargetFactory {
// This most likely indicates it happened after the last view-line
const lineCount = ctx.model.getLineCount();
const maxLineColumn = ctx.model.getLineMaxColumn(lineCount);
return request.fulfill(MouseTargetType.CONTENT_EMPTY, new Position(lineCount, maxLineColumn));
return request.fulfill(MouseTargetType.CONTENT_EMPTY, new Position(lineCount, maxLineColumn), void 0, EMPTY_CONTENT_AFTER_LINES);
}
if (domHitTestExecuted) {
@@ -682,9 +689,9 @@ export class MouseTargetFactory {
if (request.mouseContentHorizontalOffset > lineWidth) {
if (browser.isEdge && pos.column === 1) {
// See https://github.com/Microsoft/vscode/issues/10875
return request.fulfill(MouseTargetType.CONTENT_EMPTY, new Position(lineNumber, ctx.model.getLineMaxColumn(lineNumber)));
return request.fulfill(MouseTargetType.CONTENT_EMPTY, new Position(lineNumber, ctx.model.getLineMaxColumn(lineNumber)), void 0, EMPTY_CONTENT_IN_LINES);
}
return request.fulfill(MouseTargetType.CONTENT_EMPTY, pos);
return request.fulfill(MouseTargetType.CONTENT_EMPTY, pos, void 0, EMPTY_CONTENT_IN_LINES);
}
let visibleRange = ctx.visibleRangeForPosition2(lineNumber, column);
+20 -22
View File
@@ -8,7 +8,6 @@
import * as nls from 'vs/nls';
import * as types from 'vs/base/common/types';
import * as dom from 'vs/base/browser/dom';
import { RunOnceScheduler, Delayer } from 'vs/base/common/async';
import { KeyCode, KeyMod, KeyChord } from 'vs/base/common/keyCodes';
import { IDisposable, dispose } from 'vs/base/common/lifecycle';
@@ -21,7 +20,7 @@ import { FoldingModel, setCollapseStateAtLevel, CollapseMemento, setCollapseStat
import { FoldingDecorationProvider } from './foldingDecorations';
import { EditorContextKeys } from 'vs/editor/common/editorContextKeys';
import { IConfigurationChangedEvent } from 'vs/editor/common/config/editorOptions';
import { IMarginData } from 'vs/editor/browser/controller/mouseTarget';
import { IMarginData, IEmptyContentData } from 'vs/editor/browser/controller/mouseTarget';
import { HiddenRangeModel } from 'vs/editor/contrib/folding/hiddenRangeModel';
import { IRange } from 'vs/editor/common/core/range';
@@ -184,11 +183,11 @@ export class FoldingController {
private onHiddenRangesChanges(hiddenRanges: IRange[]) {
if (hiddenRanges.length) {
let selections = this.editor.getSelections();
let selections = this.editor.getSelections();
if (selections) {
if (this.hiddenRangeModel.adjustSelections(selections)) {
this.editor.setSelections(selections);
}
if (this.hiddenRangeModel.adjustSelections(selections)) {
this.editor.setSelections(selections);
}
}
}
this.editor.setHiddenAreas(hiddenRanges);
@@ -205,15 +204,15 @@ export class FoldingController {
if (foldingModel) {
let selections = this.editor.getSelections();
if (selections) {
for (let selection of selections) {
let lineNumber = selection.selectionStartLineNumber;
if (this.hiddenRangeModel.isHidden(lineNumber)) {
let toToggle = foldingModel.getAllRegionsAtLine(lineNumber, r => r.isCollapsed && lineNumber > r.startLineNumber);
foldingModel.toggleCollapseState(toToggle);
for (let selection of selections) {
let lineNumber = selection.selectionStartLineNumber;
if (this.hiddenRangeModel.isHidden(lineNumber)) {
let toToggle = foldingModel.getAllRegionsAtLine(lineNumber, r => r.isCollapsed && lineNumber > r.startLineNumber);
foldingModel.toggleCollapseState(toToggle);
}
}
}
}
}
});
}
@@ -244,21 +243,20 @@ export class FoldingController {
iconClicked = true;
break;
case MouseTargetType.CONTENT_EMPTY: {
let model = this.editor.getModel();
if (range.startColumn === model.getLineMaxColumn(range.startLineNumber)) {
let editorCoords = dom.getDomNodePagePosition(this.editor.getDomNode());
let pos = this.editor.getScrolledVisiblePosition(range.getEndPosition());
if (e.event.posy > editorCoords.top + pos.top + pos.height) {
return;
if (this.hiddenRangeModel.hasRanges()) {
const data = e.target.detail as IEmptyContentData;
if (!data.isAfterLines) {
break;
}
break;
}
return;
}
case MouseTargetType.CONTENT_TEXT: {
let model = this.editor.getModel();
if (range.startColumn === model.getLineMaxColumn(range.startLineNumber)) {
break;
if (this.hiddenRangeModel.hasRanges()) {
let model = this.editor.getModel();
if (range.startColumn === model.getLineMaxColumn(range.startLineNumber)) {
break;
}
}
return;
}