提交 9c617704 编写于 作者: A Alex Dima

Fixes #1263: send also the view selections in the cursor selection change...

Fixes #1263: send also the view selections in the cursor selection change event for correct rendering
上级 3392aa1a
......@@ -841,13 +841,19 @@ export class Cursor extends EventEmitter {
}
private emitCursorSelectionChanged(source:string, reason:string): void {
var selections = this.cursors.getSelections();
var primarySelection = selections[0];
var secondarySelections = selections.slice(1);
let selections = this.cursors.getSelections();
let primarySelection = selections[0];
let secondarySelections = selections.slice(1);
let viewSelections = this.cursors.getViewSelections();
let primaryViewSelection = viewSelections[0];
let secondaryViewSelections = viewSelections.slice(1);
var e:EditorCommon.ICursorSelectionChangedEvent = {
let e:EditorCommon.ICursorSelectionChangedEvent = {
selection: primarySelection,
viewSelection: primaryViewSelection,
secondarySelections: secondarySelections,
secondaryViewSelections: secondaryViewSelections,
source: source,
reason: reason
};
......
......@@ -2022,10 +2022,18 @@ export interface ICursorSelectionChangedEvent {
* The primary selection.
*/
selection:IEditorSelection;
/**
* The primary selection in view coordinates.
*/
viewSelection:IEditorSelection;
/**
* The secondary selections.
*/
secondarySelections:IEditorSelection[];
/**
* The secondary selections in view coordinates.
*/
secondaryViewSelections:IEditorSelection[];
/**
* Source of the call that caused the event.
*/
......
......@@ -334,6 +334,17 @@ export class ViewModel extends EventEmitter implements EditorCommon.IViewModel {
}
return this.convertModelPositionToViewPosition(modelPosition.lineNumber, modelPosition.column);
}
public validateViewSelection(viewSelection:EditorCommon.IEditorSelection, modelSelection:EditorCommon.IEditorSelection): EditorCommon.IEditorSelection {
let modelSelectionStart = new Position(modelSelection.selectionStartLineNumber, modelSelection.selectionStartColumn);
let modelPosition = new Position(modelSelection.positionLineNumber, modelSelection.positionColumn);
let viewSelectionStart = this.validateViewPosition(viewSelection.selectionStartLineNumber, viewSelection.selectionStartColumn, modelSelectionStart);
let viewPosition = this.validateViewPosition(viewSelection.positionLineNumber, viewSelection.positionColumn, modelPosition);
return new Selection(viewSelectionStart.lineNumber, viewSelectionStart.column, viewPosition.lineNumber, viewPosition.column);
}
private onCursorPositionChanged(e:EditorCommon.ICursorPositionChangedEvent): void {
this.cursors.onCursorPositionChanged(e, (eventType:string, payload:any) => this.emit(eventType, payload));
}
......
......@@ -10,6 +10,7 @@ import EditorCommon = require('vs/editor/common/editorCommon');
export interface IConverter {
validateViewPosition(viewLineNumber:number, viewColumn:number, modelPosition:EditorCommon.IEditorPosition): EditorCommon.IEditorPosition;
validateViewSelection(viewSelection:EditorCommon.IEditorSelection, modelSelection:EditorCommon.IEditorSelection): EditorCommon.IEditorSelection;
convertModelSelectionToViewSelection(modelSelection:EditorCommon.IEditorSelection): EditorCommon.IEditorSelection;
convertModelRangeToViewRange(modelRange:EditorCommon.IRange): EditorCommon.IEditorRange;
}
......@@ -74,13 +75,13 @@ export class ViewModelCursors {
public onCursorSelectionChanged(e:EditorCommon.ICursorSelectionChangedEvent, emit:(eventType:string, payload:any)=>void): void {
this.lastCursorSelectionChangedEvent = e;
var selection = this.converter.convertModelSelectionToViewSelection(e.selection);
var secondarySelections: EditorCommon.IEditorSelection[] = [];
for (var i = 0, len = e.secondarySelections.length; i < len; i++) {
secondarySelections[i] = this.converter.convertModelSelectionToViewSelection(e.secondarySelections[i]);
let selection = this.converter.validateViewSelection(e.viewSelection, e.selection);
let secondarySelections: EditorCommon.IEditorSelection[] = [];
for (let i = 0, len = e.secondarySelections.length; i < len; i++) {
secondarySelections[i] = this.converter.validateViewSelection(e.secondaryViewSelections[i], e.secondarySelections[i]);
}
var newEvent:EditorCommon.IViewCursorSelectionChangedEvent = {
let newEvent:EditorCommon.IViewCursorSelectionChangedEvent = {
selection: selection,
secondarySelections: secondarySelections
};
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册