Simplification in cursor eventing
This commit is contained in:
parent
9f896956eb
commit
94c647f246
|
@ -279,16 +279,17 @@ export abstract class CommonCodeEditor extends Disposable implements editorCommo
|
|||
}
|
||||
}
|
||||
|
||||
private _sendRevealRange(range: Range, verticalType: VerticalRevealType, revealHorizontal: boolean): void {
|
||||
private _sendRevealRange(modelRange: Range, verticalType: VerticalRevealType, revealHorizontal: boolean): void {
|
||||
if (!this.model || !this.cursor) {
|
||||
return;
|
||||
}
|
||||
if (!Range.isIRange(range)) {
|
||||
if (!Range.isIRange(modelRange)) {
|
||||
throw new Error('Invalid arguments');
|
||||
}
|
||||
let validatedRange = this.model.validateRange(range);
|
||||
const validatedModelRange = this.model.validateRange(modelRange);
|
||||
const viewRange = this.viewModel.coordinatesConverter.convertModelRangeToViewRange(validatedModelRange);
|
||||
|
||||
this.cursor.emitCursorRevealRange(validatedRange, null, verticalType, revealHorizontal);
|
||||
this.cursor.emitCursorRevealRange(viewRange, verticalType, revealHorizontal);
|
||||
}
|
||||
|
||||
public revealLine(lineNumber: number): void {
|
||||
|
|
|
@ -1405,7 +1405,9 @@ export namespace CoreNavigationCommands {
|
|||
}
|
||||
}
|
||||
|
||||
cursors.revealRange(false, range, null, revealAt);
|
||||
const viewRange = cursors.context.convertModelRangeToViewRange(range);
|
||||
|
||||
cursors.revealRange(false, viewRange, revealAt);
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
@ -204,8 +204,8 @@ export class Cursor extends viewEvents.ViewEventEmitter implements ICursors {
|
|||
this._revealRange(target, viewEvents.VerticalRevealType.Simple, horizontal);
|
||||
}
|
||||
|
||||
public revealRange(revealHorizontal: boolean, modelRange: Range, viewRange: Range, verticalType: viewEvents.VerticalRevealType) {
|
||||
this.emitCursorRevealRange(modelRange, viewRange, verticalType, revealHorizontal);
|
||||
public revealRange(revealHorizontal: boolean, viewRange: Range, verticalType: viewEvents.VerticalRevealType) {
|
||||
this.emitCursorRevealRange(viewRange, verticalType, revealHorizontal);
|
||||
}
|
||||
|
||||
public scrollTo(desiredScrollTop: number): void {
|
||||
|
@ -368,19 +368,11 @@ export class Cursor extends viewEvents.ViewEventEmitter implements ICursors {
|
|||
return false;
|
||||
}
|
||||
|
||||
this._emitStateChanged(source, reason);
|
||||
return true;
|
||||
}
|
||||
|
||||
private _emitStateChanged(source: string, reason: CursorChangeReason): void {
|
||||
source = source || 'keyboard';
|
||||
|
||||
const positions = this._cursors.getPositions();
|
||||
|
||||
let isInEditableRange: boolean = true;
|
||||
if (this._model.hasEditableRange()) {
|
||||
const editableRange = this._model.getEditableRange();
|
||||
if (!editableRange.containsPosition(positions[0])) {
|
||||
if (!editableRange.containsPosition(newState.cursorState[0].modelState.position)) {
|
||||
isInEditableRange = false;
|
||||
}
|
||||
}
|
||||
|
@ -392,47 +384,40 @@ export class Cursor extends viewEvents.ViewEventEmitter implements ICursors {
|
|||
this._emit([new viewEvents.ViewCursorStateChangedEvent(viewSelections, isInEditableRange)]);
|
||||
|
||||
// Only after the view has been notified, let the rest of the world know...
|
||||
this._onDidChange.fire(new CursorStateChangedEvent(selections, source, reason));
|
||||
this._onDidChange.fire(new CursorStateChangedEvent(selections, source || 'keyboard', reason));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private _revealRange(revealTarget: RevealTarget, verticalType: viewEvents.VerticalRevealType, revealHorizontal: boolean): void {
|
||||
const positions = this._cursors.getPositions();
|
||||
const viewPositions = this._cursors.getViewPositions();
|
||||
|
||||
let position = positions[0];
|
||||
let viewPosition = viewPositions[0];
|
||||
|
||||
if (revealTarget === RevealTarget.TopMost) {
|
||||
for (let i = 1; i < positions.length; i++) {
|
||||
if (positions[i].isBefore(position)) {
|
||||
position = positions[i];
|
||||
for (let i = 1; i < viewPositions.length; i++) {
|
||||
if (viewPositions[i].isBefore(viewPosition)) {
|
||||
viewPosition = viewPositions[i];
|
||||
}
|
||||
}
|
||||
} else if (revealTarget === RevealTarget.BottomMost) {
|
||||
for (let i = 1; i < positions.length; i++) {
|
||||
if (position.isBeforeOrEqual(positions[i])) {
|
||||
position = positions[i];
|
||||
for (let i = 1; i < viewPositions.length; i++) {
|
||||
if (viewPosition.isBeforeOrEqual(viewPositions[i])) {
|
||||
viewPosition = viewPositions[i];
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (positions.length > 1) {
|
||||
if (viewPositions.length > 1) {
|
||||
// no revealing!
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
const range = new Range(position.lineNumber, position.column, position.lineNumber, position.column);
|
||||
const viewRange = new Range(viewPosition.lineNumber, viewPosition.column, viewPosition.lineNumber, viewPosition.column);
|
||||
this.emitCursorRevealRange(range, viewRange, verticalType, revealHorizontal);
|
||||
this.emitCursorRevealRange(viewRange, verticalType, revealHorizontal);
|
||||
}
|
||||
|
||||
public emitCursorRevealRange(range: Range, viewRange: Range, verticalType: viewEvents.VerticalRevealType, revealHorizontal: boolean) {
|
||||
// Ensure event has viewRange
|
||||
if (!viewRange) {
|
||||
viewRange = this.context.convertModelRangeToViewRange(range);
|
||||
}
|
||||
public emitCursorRevealRange(viewRange: Range, verticalType: viewEvents.VerticalRevealType, revealHorizontal: boolean) {
|
||||
this._emit([new viewEvents.ViewRevealRangeRequestEvent(viewRange, verticalType, revealHorizontal)]);
|
||||
}
|
||||
|
||||
|
|
|
@ -60,15 +60,6 @@ export class CursorCollection {
|
|||
return result;
|
||||
}
|
||||
|
||||
public getPositions(): Position[] {
|
||||
let result: Position[] = [];
|
||||
result[0] = this.primaryCursor.modelState.position;
|
||||
for (let i = 0, len = this.secondaryCursors.length; i < len; i++) {
|
||||
result[i + 1] = this.secondaryCursors[i].modelState.position;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public getViewPositions(): Position[] {
|
||||
let result: Position[] = [];
|
||||
result[0] = this.primaryCursor.viewState.position;
|
||||
|
|
|
@ -42,7 +42,7 @@ export interface ICursors {
|
|||
|
||||
setStates(source: string, reason: CursorChangeReason, states: CursorState[]): void;
|
||||
reveal(horizontal: boolean, target: RevealTarget): void;
|
||||
revealRange(revealHorizontal: boolean, modelRange: Range, viewRange: Range, verticalType: VerticalRevealType): void;
|
||||
revealRange(revealHorizontal: boolean, viewRange: Range, verticalType: VerticalRevealType): void;
|
||||
|
||||
scrollTo(desiredScrollTop: number): void;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue