Respect editor.wrappingAlgorithm

上级 53125e31
......@@ -3730,7 +3730,8 @@ export const EditorOptions = {
)),
wrappingAlgorithm: register(new EditorStringEnumOption(
EditorOption.wrappingAlgorithm, 'wrappingAlgorithm',
'monospace', ['monospace', 'dom'],
'monospace' as 'monospace' | 'dom',
['monospace', 'dom'] as const,
{
enumDescriptions: [
nls.localize('wrappingAlgorithm.monospace', "Assumes that all characters are of the same width. This is a fast algorithm."),
......
......@@ -109,7 +109,7 @@ export interface ISplitLine {
export interface IViewModelLinesCollection extends IDisposable {
createCoordinatesConverter(): ICoordinatesConverter;
setWrappingSettings(fontInfo: FontInfo, wrappingColumn: number, wrappingIndent: WrappingIndent): boolean;
setWrappingSettings(fontInfo: FontInfo, wrappingAlgorithm: 'monospace' | 'dom', wrappingColumn: number, wrappingIndent: WrappingIndent): boolean;
setTabSize(newTabSize: number): boolean;
getHiddenAreas(): Range[];
setHiddenAreas(_ranges: Range[]): boolean;
......@@ -265,8 +265,6 @@ class LineNumberMapper {
}
}
const usDOMLineBreaksComputerFactory = false;
export class SplitLinesCollection implements IViewModelLinesCollection {
private readonly model: ITextModel;
......@@ -279,6 +277,7 @@ export class SplitLinesCollection implements IViewModelLinesCollection {
private tabSize: number;
private wrappingColumn: number;
private wrappingIndent: WrappingIndent;
private wrappingAlgorithm: 'monospace' | 'dom';
private lines!: ISplitLine[];
private prefixSumComputer!: LineNumberMapper;
......@@ -291,8 +290,9 @@ export class SplitLinesCollection implements IViewModelLinesCollection {
monospaceLineBreaksComputerFactory: ILineBreaksComputerFactory,
fontInfo: FontInfo,
tabSize: number,
wrappingAlgorithm: 'monospace' | 'dom',
wrappingColumn: number,
wrappingIndent: WrappingIndent
wrappingIndent: WrappingIndent,
) {
this.model = model;
this._validModelVersionId = -1;
......@@ -300,6 +300,7 @@ export class SplitLinesCollection implements IViewModelLinesCollection {
this._monospaceLineBreaksComputerFactory = monospaceLineBreaksComputerFactory;
this.fontInfo = fontInfo;
this.tabSize = tabSize;
this.wrappingAlgorithm = wrappingAlgorithm;
this.wrappingColumn = wrappingColumn;
this.wrappingIndent = wrappingIndent;
......@@ -483,17 +484,19 @@ export class SplitLinesCollection implements IViewModelLinesCollection {
return true;
}
public setWrappingSettings(fontInfo: FontInfo, wrappingColumn: number, wrappingIndent: WrappingIndent): boolean {
public setWrappingSettings(fontInfo: FontInfo, wrappingAlgorithm: 'monospace' | 'dom', wrappingColumn: number, wrappingIndent: WrappingIndent): boolean {
const equalFontInfo = this.fontInfo.equals(fontInfo);
const equalWrappingAlgorithm = (this.wrappingAlgorithm === wrappingAlgorithm);
const equalWrappingColumn = (this.wrappingColumn === wrappingColumn);
const equalWrappingIndent = (this.wrappingIndent === wrappingIndent);
if (equalFontInfo && equalWrappingColumn && equalWrappingIndent) {
if (equalFontInfo && equalWrappingAlgorithm && equalWrappingColumn && equalWrappingIndent) {
return false;
}
const onlyWrappingColumnChanged = (equalFontInfo && !equalWrappingColumn && equalWrappingIndent);
const onlyWrappingColumnChanged = (equalFontInfo && equalWrappingAlgorithm && !equalWrappingColumn && equalWrappingIndent);
this.fontInfo = fontInfo;
this.wrappingAlgorithm = wrappingAlgorithm;
this.wrappingColumn = wrappingColumn;
this.wrappingIndent = wrappingIndent;
......@@ -512,7 +515,7 @@ export class SplitLinesCollection implements IViewModelLinesCollection {
public createLineBreaksComputer(): ILineBreaksComputer {
const lineBreaksComputerFactory = (
usDOMLineBreaksComputerFactory
this.wrappingAlgorithm === 'dom'
? this._domLineBreaksComputerFactory
: this._monospaceLineBreaksComputerFactory
);
......@@ -1457,7 +1460,7 @@ export class IdentityLinesCollection implements IViewModelLinesCollection {
return false;
}
public setWrappingSettings(_fontInfo: FontInfo, _wrappingColumn: number, _wrappingIndent: WrappingIndent): boolean {
public setWrappingSettings(_fontInfo: FontInfo, _wrappingAlgorithm: 'monospace' | 'dom', _wrappingColumn: number, _wrappingIndent: WrappingIndent): boolean {
return false;
}
......
......@@ -67,8 +67,9 @@ export class ViewModel extends viewEvents.ViewEventEmitter implements IViewModel
} else {
const options = this.configuration.options;
const wrappingInfo = options.get(EditorOption.wrappingInfo);
const fontInfo = options.get(EditorOption.fontInfo);
const wrappingAlgorithm = options.get(EditorOption.wrappingAlgorithm);
const wrappingInfo = options.get(EditorOption.wrappingInfo);
const wrappingIndent = options.get(EditorOption.wrappingIndent);
this.lines = new SplitLinesCollection(
......@@ -77,6 +78,7 @@ export class ViewModel extends viewEvents.ViewEventEmitter implements IViewModel
monospaceLineBreaksComputerFactory,
fontInfo,
this.model.getOptions().tabSize,
wrappingAlgorithm,
wrappingInfo.wrappingColumn,
wrappingIndent
);
......@@ -153,11 +155,12 @@ export class ViewModel extends viewEvents.ViewEventEmitter implements IViewModel
let restorePreviousViewportStart = false;
const options = this.configuration.options;
const wrappingInfo = options.get(EditorOption.wrappingInfo);
const fontInfo = options.get(EditorOption.fontInfo);
const wrappingAlgorithm = options.get(EditorOption.wrappingAlgorithm);
const wrappingInfo = options.get(EditorOption.wrappingInfo);
const wrappingIndent = options.get(EditorOption.wrappingIndent);
if (this.lines.setWrappingSettings(fontInfo, wrappingInfo.wrappingColumn, wrappingIndent)) {
if (this.lines.setWrappingSettings(fontInfo, wrappingAlgorithm, wrappingInfo.wrappingColumn, wrappingIndent)) {
eventsCollector.emit(new viewEvents.ViewFlushedEvent());
eventsCollector.emit(new viewEvents.ViewLineMappingChangedEvent());
eventsCollector.emit(new viewEvents.ViewDecorationsChangedEvent());
......
......@@ -111,6 +111,7 @@ suite('Editor ViewModel - SplitLinesCollection', () => {
lineBreaksComputerFactory,
fontInfo,
model.getOptions().tabSize,
'monospace',
wrappingInfo.wrappingColumn,
wrappingIndent
);
......@@ -752,6 +753,7 @@ suite('SplitLinesCollection', () => {
lineBreaksComputerFactory,
fontInfo,
model.getOptions().tabSize,
'monospace',
wrappingInfo.wrappingColumn,
wrappingIndent
);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册