[folding] prevent visual decorator from going on multiple lines

This commit is contained in:
Martin Aeschlimann
2016-02-11 11:16:23 +01:00
parent 3e34d1e16b
commit d90d8b4a42
@@ -18,6 +18,9 @@ import {TPromise} from 'vs/base/common/winjs.base';
import foldStrategy = require('vs/editor/contrib/folding/common/indentFoldStrategy');
import {IFoldingRange, toString as rangeToString} from 'vs/editor/contrib/folding/common/foldingRange';
let log = function(msg: string) {
console.log(msg);
};
class CollapsableRegion {
@@ -57,37 +60,45 @@ class CollapsableRegion {
private getVisualDecorationOptions():EditorCommon.IModelDecorationOptions {
if (this._isCollapsed) {
return {
stickiness: EditorCommon.TrackedRangeStickiness.GrowsOnlyWhenTypingBefore,
inlineClassName: 'inline-folded',
linesDecorationsClassName: 'folding collapsed'
};
} else {
return {
stickiness: EditorCommon.TrackedRangeStickiness.GrowsOnlyWhenTypingBefore,
linesDecorationsClassName: 'folding'
};
}
}
public update(range:IFoldingRange, model:EditorCommon.IModel, changeAccessor:EditorCommon.IModelDecorationsChangeAccessor): void {
this._lastRange = range;
private getRangeDecorationOptions():EditorCommon.IModelDecorationOptions {
return {
stickiness: EditorCommon.TrackedRangeStickiness.GrowsOnlyWhenTypingBefore
}
}
public update(newRange:IFoldingRange, model:EditorCommon.IModel, changeAccessor:EditorCommon.IModelDecorationsChangeAccessor): void {
this._lastRange = newRange;
let newDecorations : EditorCommon.IModelDeltaDecoration[] = [];
var maxColumn = model.getLineMaxColumn(range.startLineNumber);
var maxColumn = model.getLineMaxColumn(newRange.startLineNumber);
var visualRng = {
startLineNumber: range.startLineNumber,
startLineNumber: newRange.startLineNumber,
startColumn: maxColumn - 1,
endLineNumber: range.startLineNumber,
endLineNumber: newRange.startLineNumber,
endColumn: maxColumn
};
newDecorations.push({ range: visualRng, options: this.getVisualDecorationOptions() });
var colRng = {
startLineNumber: range.startLineNumber,
startLineNumber: newRange.startLineNumber,
startColumn: 1,
endLineNumber: range.endLineNumber,
endColumn: model.getLineMaxColumn(range.endLineNumber)
endLineNumber: newRange.endLineNumber,
endColumn: model.getLineMaxColumn(newRange.endLineNumber)
};
newDecorations.push({ range: colRng, options: {} });
newDecorations.push({ range: colRng, options: this.getRangeDecorationOptions() });
this.decorationIds = changeAccessor.deltaDecorations(this.decorationIds, newDecorations);
}
@@ -142,8 +153,6 @@ export class Folding implements EditorCommon.IEditorContribution {
private onModelChanged(): void {
this.cleanState();
let log = console.log;
var model = this.editor.getModel();
if (!model) {
return;
@@ -185,12 +194,7 @@ export class Folding implements EditorCommon.IEditorContribution {
dec.dispose(changeAccessor);
i++;
} else if (decRange.startLineNumber === currRange.startLineNumber) {
if (decRange.endLineNumber !== currRange.endLineNumber) {
log('range update, from ' + rangeToString(decRange) + ' to ' + rangeToString(currRange));
dec.update(currRange, model, changeAccessor)
} else {
log('range unchanged: ' + rangeToString(currRange));
}
dec.update(currRange, model, changeAccessor);
newDecorations.push(dec);
i++;
k++;
@@ -213,7 +217,7 @@ export class Folding implements EditorCommon.IEditorContribution {
this.updateHiddenAreas();
});
}, 500);
}, 200);
this.localToDispose.push(this.updateScheduler);
this.localToDispose.push(this.editor.addListener2('change', () => this.updateScheduler.schedule()));