Skip to content

Commit af4b129

Browse files
committed
Move word wrapping options logic to the EditorLayoutInfoComputer
1 parent 9ecc810 commit af4b129

3 files changed

Lines changed: 165 additions & 64 deletions

File tree

src/vs/editor/common/config/editorOptions.ts

Lines changed: 80 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -1744,6 +1744,10 @@ export interface EditorLayoutInfo {
17441744
*/
17451745
readonly viewportColumn: number;
17461746

1747+
readonly isWordWrapMinified: boolean;
1748+
readonly isViewportWrapping: boolean;
1749+
readonly wrappingColumn: number;
1750+
17471751
/**
17481752
* The width of the vertical scrollbar.
17491753
*/
@@ -1763,15 +1767,16 @@ export interface EditorLayoutInfo {
17631767
* @internal
17641768
*/
17651769
export interface EditorLayoutInfoComputerEnv {
1766-
memory: IComputeOptionsMemory | null;
1767-
outerWidth: number;
1768-
outerHeight: number;
1769-
lineHeight: number;
1770-
viewLineCount: number;
1771-
lineNumbersDigitCount: number;
1772-
typicalHalfwidthCharacterWidth: number;
1773-
maxDigitWidth: number;
1774-
pixelRatio: number;
1770+
readonly memory: IComputeOptionsMemory | null;
1771+
readonly outerWidth: number;
1772+
readonly outerHeight: number;
1773+
readonly isDominatedByLongLines: boolean
1774+
readonly lineHeight: number;
1775+
readonly viewLineCount: number;
1776+
readonly lineNumbersDigitCount: number;
1777+
readonly typicalHalfwidthCharacterWidth: number;
1778+
readonly maxDigitWidth: number;
1779+
readonly pixelRatio: number;
17751780
}
17761781

17771782
/**
@@ -1782,7 +1787,12 @@ export class EditorLayoutInfoComputer extends ComputedEditorOption<EditorOption.
17821787
constructor() {
17831788
super(
17841789
EditorOption.layoutInfo,
1785-
[EditorOption.glyphMargin, EditorOption.lineDecorationsWidth, EditorOption.folding, EditorOption.minimap, EditorOption.scrollbar, EditorOption.lineNumbers]
1790+
[
1791+
EditorOption.glyphMargin, EditorOption.lineDecorationsWidth, EditorOption.folding,
1792+
EditorOption.minimap, EditorOption.scrollbar, EditorOption.lineNumbers,
1793+
EditorOption.wordWrap, EditorOption.wordWrapColumn, EditorOption.wordWrapMinified,
1794+
EditorOption.accessibilitySupport
1795+
]
17861796
);
17871797
}
17881798

@@ -1791,6 +1801,7 @@ export class EditorLayoutInfoComputer extends ComputedEditorOption<EditorOption.
17911801
memory: env.memory,
17921802
outerWidth: env.outerWidth,
17931803
outerHeight: env.outerHeight,
1804+
isDominatedByLongLines: env.isDominatedByLongLines,
17941805
lineHeight: env.fontInfo.lineHeight,
17951806
viewLineCount: env.viewLineCount,
17961807
lineNumbersDigitCount: env.lineNumbersDigitCount,
@@ -1823,6 +1834,11 @@ export class EditorLayoutInfoComputer extends ComputedEditorOption<EditorOption.
18231834
const maxDigitWidth = env.maxDigitWidth;
18241835
const pixelRatio = env.pixelRatio;
18251836

1837+
const wordWrap = options.get(EditorOption.wordWrap);
1838+
const wordWrapColumn = options.get(EditorOption.wordWrapColumn);
1839+
const wordWrapMinified = options.get(EditorOption.wordWrapMinified);
1840+
const accessibilitySupport = options.get(EditorOption.accessibilitySupport);
1841+
18261842
const showGlyphMargin = options.get(EditorOption.glyphMargin);
18271843
const showLineNumbers = (options.get(EditorOption.lineNumbers).renderType !== RenderLineNumbersType.Off);
18281844
const lineNumbersMinChars = options.get(EditorOption.lineNumbersMinChars) | 0;
@@ -1974,6 +1990,52 @@ export class EditorLayoutInfoComputer extends ComputedEditorOption<EditorOption.
19741990

19751991
const verticalArrowSize = (verticalScrollbarHasArrows ? scrollbarArrowSize : 0);
19761992

1993+
let bareWrappingInfo: { isWordWrapMinified: boolean; isViewportWrapping: boolean; wrappingColumn: number; } | null = null;
1994+
{
1995+
if (accessibilitySupport === AccessibilitySupport.Enabled) {
1996+
// See https://github.com/Microsoft/vscode/issues/27766
1997+
// Never enable wrapping when a screen reader is attached
1998+
// because arrow down etc. will not move the cursor in the way
1999+
// a screen reader expects.
2000+
bareWrappingInfo = {
2001+
isWordWrapMinified: false,
2002+
isViewportWrapping: false,
2003+
wrappingColumn: -1
2004+
};
2005+
} else if (wordWrapMinified && env.isDominatedByLongLines) {
2006+
// Force viewport width wrapping if model is dominated by long lines
2007+
bareWrappingInfo = {
2008+
isWordWrapMinified: true,
2009+
isViewportWrapping: true,
2010+
wrappingColumn: Math.max(1, viewportColumn)
2011+
};
2012+
} else if (wordWrap === 'on') {
2013+
bareWrappingInfo = {
2014+
isWordWrapMinified: false,
2015+
isViewportWrapping: true,
2016+
wrappingColumn: Math.max(1, viewportColumn)
2017+
};
2018+
} else if (wordWrap === 'bounded') {
2019+
bareWrappingInfo = {
2020+
isWordWrapMinified: false,
2021+
isViewportWrapping: true,
2022+
wrappingColumn: Math.min(Math.max(1, viewportColumn), wordWrapColumn)
2023+
};
2024+
} else if (wordWrap === 'wordWrapColumn') {
2025+
bareWrappingInfo = {
2026+
isWordWrapMinified: false,
2027+
isViewportWrapping: false,
2028+
wrappingColumn: wordWrapColumn
2029+
};
2030+
} else {
2031+
bareWrappingInfo = {
2032+
isWordWrapMinified: false,
2033+
isViewportWrapping: false,
2034+
wrappingColumn: -1
2035+
};
2036+
}
2037+
}
2038+
19772039
return {
19782040
width: outerWidth,
19792041
height: outerHeight,
@@ -2004,6 +2066,10 @@ export class EditorLayoutInfoComputer extends ComputedEditorOption<EditorOption.
20042066

20052067
viewportColumn: viewportColumn,
20062068

2069+
isWordWrapMinified: bareWrappingInfo.isWordWrapMinified,
2070+
isViewportWrapping: bareWrappingInfo.isViewportWrapping,
2071+
wrappingColumn: bareWrappingInfo.wrappingColumn,
2072+
20072073
verticalScrollbarWidth: verticalScrollbarWidth,
20082074
horizontalScrollbarHeight: horizontalScrollbarHeight,
20092075

@@ -3234,67 +3300,17 @@ export interface EditorWrappingInfo {
32343300
class EditorWrappingInfoComputer extends ComputedEditorOption<EditorOption.wrappingInfo, EditorWrappingInfo> {
32353301

32363302
constructor() {
3237-
super(EditorOption.wrappingInfo, [EditorOption.wordWrap, EditorOption.wordWrapColumn, EditorOption.wordWrapMinified, EditorOption.layoutInfo, EditorOption.accessibilitySupport]);
3303+
super(EditorOption.wrappingInfo, [EditorOption.layoutInfo]);
32383304
}
32393305

32403306
public compute(env: IEnvironmentalOptions, options: IComputedEditorOptions, _: EditorWrappingInfo): EditorWrappingInfo {
3241-
const wordWrap = options.get(EditorOption.wordWrap);
3242-
const wordWrapColumn = options.get(EditorOption.wordWrapColumn);
3243-
const wordWrapMinified = options.get(EditorOption.wordWrapMinified);
32443307
const layoutInfo = options.get(EditorOption.layoutInfo);
3245-
const accessibilitySupport = options.get(EditorOption.accessibilitySupport);
3246-
3247-
let bareWrappingInfo: { isWordWrapMinified: boolean; isViewportWrapping: boolean; wrappingColumn: number; } | null = null;
3248-
{
3249-
if (accessibilitySupport === AccessibilitySupport.Enabled) {
3250-
// See https://github.com/Microsoft/vscode/issues/27766
3251-
// Never enable wrapping when a screen reader is attached
3252-
// because arrow down etc. will not move the cursor in the way
3253-
// a screen reader expects.
3254-
bareWrappingInfo = {
3255-
isWordWrapMinified: false,
3256-
isViewportWrapping: false,
3257-
wrappingColumn: -1
3258-
};
3259-
} else if (wordWrapMinified && env.isDominatedByLongLines) {
3260-
// Force viewport width wrapping if model is dominated by long lines
3261-
bareWrappingInfo = {
3262-
isWordWrapMinified: true,
3263-
isViewportWrapping: true,
3264-
wrappingColumn: Math.max(1, layoutInfo.viewportColumn)
3265-
};
3266-
} else if (wordWrap === 'on') {
3267-
bareWrappingInfo = {
3268-
isWordWrapMinified: false,
3269-
isViewportWrapping: true,
3270-
wrappingColumn: Math.max(1, layoutInfo.viewportColumn)
3271-
};
3272-
} else if (wordWrap === 'bounded') {
3273-
bareWrappingInfo = {
3274-
isWordWrapMinified: false,
3275-
isViewportWrapping: true,
3276-
wrappingColumn: Math.min(Math.max(1, layoutInfo.viewportColumn), wordWrapColumn)
3277-
};
3278-
} else if (wordWrap === 'wordWrapColumn') {
3279-
bareWrappingInfo = {
3280-
isWordWrapMinified: false,
3281-
isViewportWrapping: false,
3282-
wrappingColumn: wordWrapColumn
3283-
};
3284-
} else {
3285-
bareWrappingInfo = {
3286-
isWordWrapMinified: false,
3287-
isViewportWrapping: false,
3288-
wrappingColumn: -1
3289-
};
3290-
}
3291-
}
32923308

32933309
return {
32943310
isDominatedByLongLines: env.isDominatedByLongLines,
3295-
isWordWrapMinified: bareWrappingInfo.isWordWrapMinified,
3296-
isViewportWrapping: bareWrappingInfo.isViewportWrapping,
3297-
wrappingColumn: bareWrappingInfo.wrappingColumn,
3311+
isWordWrapMinified: layoutInfo.isWordWrapMinified,
3312+
isViewportWrapping: layoutInfo.isViewportWrapping,
3313+
wrappingColumn: layoutInfo.wrappingColumn,
32983314
};
32993315
}
33003316
}

0 commit comments

Comments
 (0)