diff --git a/src/vs/editor/common/config/editorOptions.ts b/src/vs/editor/common/config/editorOptions.ts index 913ac0ecb955f4330bbc760d3792d4860605505e..45b988b37f4f8725f7ae3e63e9206142993f8e7d 100644 --- a/src/vs/editor/common/config/editorOptions.ts +++ b/src/vs/editor/common/config/editorOptions.ts @@ -1744,6 +1744,10 @@ export interface EditorLayoutInfo { */ readonly viewportColumn: number; + readonly isWordWrapMinified: boolean; + readonly isViewportWrapping: boolean; + readonly wrappingColumn: number; + /** * The width of the vertical scrollbar. */ @@ -1763,15 +1767,16 @@ export interface EditorLayoutInfo { * @internal */ export interface EditorLayoutInfoComputerEnv { - memory: IComputeOptionsMemory | null; - outerWidth: number; - outerHeight: number; - lineHeight: number; - viewLineCount: number; - lineNumbersDigitCount: number; - typicalHalfwidthCharacterWidth: number; - maxDigitWidth: number; - pixelRatio: number; + readonly memory: IComputeOptionsMemory | null; + readonly outerWidth: number; + readonly outerHeight: number; + readonly isDominatedByLongLines: boolean + readonly lineHeight: number; + readonly viewLineCount: number; + readonly lineNumbersDigitCount: number; + readonly typicalHalfwidthCharacterWidth: number; + readonly maxDigitWidth: number; + readonly pixelRatio: number; } /** @@ -1782,7 +1787,12 @@ export class EditorLayoutInfoComputer extends ComputedEditorOption { constructor() { - super(EditorOption.wrappingInfo, [EditorOption.wordWrap, EditorOption.wordWrapColumn, EditorOption.wordWrapMinified, EditorOption.layoutInfo, EditorOption.accessibilitySupport]); + super(EditorOption.wrappingInfo, [EditorOption.layoutInfo]); } public compute(env: IEnvironmentalOptions, options: IComputedEditorOptions, _: EditorWrappingInfo): EditorWrappingInfo { - const wordWrap = options.get(EditorOption.wordWrap); - const wordWrapColumn = options.get(EditorOption.wordWrapColumn); - const wordWrapMinified = options.get(EditorOption.wordWrapMinified); const layoutInfo = options.get(EditorOption.layoutInfo); - const accessibilitySupport = options.get(EditorOption.accessibilitySupport); - - let bareWrappingInfo: { isWordWrapMinified: boolean; isViewportWrapping: boolean; wrappingColumn: number; } | null = null; - { - if (accessibilitySupport === AccessibilitySupport.Enabled) { - // See https://github.com/Microsoft/vscode/issues/27766 - // Never enable wrapping when a screen reader is attached - // because arrow down etc. will not move the cursor in the way - // a screen reader expects. - bareWrappingInfo = { - isWordWrapMinified: false, - isViewportWrapping: false, - wrappingColumn: -1 - }; - } else if (wordWrapMinified && env.isDominatedByLongLines) { - // Force viewport width wrapping if model is dominated by long lines - bareWrappingInfo = { - isWordWrapMinified: true, - isViewportWrapping: true, - wrappingColumn: Math.max(1, layoutInfo.viewportColumn) - }; - } else if (wordWrap === 'on') { - bareWrappingInfo = { - isWordWrapMinified: false, - isViewportWrapping: true, - wrappingColumn: Math.max(1, layoutInfo.viewportColumn) - }; - } else if (wordWrap === 'bounded') { - bareWrappingInfo = { - isWordWrapMinified: false, - isViewportWrapping: true, - wrappingColumn: Math.min(Math.max(1, layoutInfo.viewportColumn), wordWrapColumn) - }; - } else if (wordWrap === 'wordWrapColumn') { - bareWrappingInfo = { - isWordWrapMinified: false, - isViewportWrapping: false, - wrappingColumn: wordWrapColumn - }; - } else { - bareWrappingInfo = { - isWordWrapMinified: false, - isViewportWrapping: false, - wrappingColumn: -1 - }; - } - } return { isDominatedByLongLines: env.isDominatedByLongLines, - isWordWrapMinified: bareWrappingInfo.isWordWrapMinified, - isViewportWrapping: bareWrappingInfo.isViewportWrapping, - wrappingColumn: bareWrappingInfo.wrappingColumn, + isWordWrapMinified: layoutInfo.isWordWrapMinified, + isViewportWrapping: layoutInfo.isViewportWrapping, + wrappingColumn: layoutInfo.wrappingColumn, }; } } diff --git a/src/vs/editor/test/common/viewLayout/editorLayoutProvider.test.ts b/src/vs/editor/test/common/viewLayout/editorLayoutProvider.test.ts index 1e17e608fa92d3c0d5a1e6afee262e2553ce53fd..71542313fa0f869c796c56dbfb0beab0d9b5d7db 100644 --- a/src/vs/editor/test/common/viewLayout/editorLayoutProvider.test.ts +++ b/src/vs/editor/test/common/viewLayout/editorLayoutProvider.test.ts @@ -76,10 +76,16 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => { }; options._write(EditorOption.lineNumbers, lineNumbersOptions); + options._write(EditorOption.wordWrap, 'off'); + options._write(EditorOption.wordWrapColumn, 80); + options._write(EditorOption.wordWrapMinified, true); + options._write(EditorOption.accessibilitySupport, 'auto'); + const actual = EditorLayoutInfoComputer.computeLayout(options, { memory: null, outerWidth: input.outerWidth, outerHeight: input.outerHeight, + isDominatedByLongLines: false, lineHeight: input.lineHeight, viewLineCount: input.maxLineNumber || Math.pow(10, input.lineNumbersDigitCount) - 1, lineNumbersDigitCount: input.lineNumbersDigitCount, @@ -138,7 +144,11 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => { minimapCanvasInnerHeight: 800, minimapCanvasOuterWidth: 0, minimapCanvasOuterHeight: 800, + viewportColumn: 98, + isWordWrapMinified: false, + isViewportWrapping: false, + wrappingColumn: -1, verticalScrollbarWidth: 0, horizontalScrollbarHeight: 0, @@ -200,7 +210,11 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => { minimapCanvasInnerHeight: 800, minimapCanvasOuterWidth: 0, minimapCanvasOuterHeight: 800, + viewportColumn: 97, + isWordWrapMinified: false, + isViewportWrapping: false, + wrappingColumn: -1, verticalScrollbarWidth: 11, horizontalScrollbarHeight: 12, @@ -262,7 +276,11 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => { minimapCanvasInnerHeight: 800, minimapCanvasOuterWidth: 0, minimapCanvasOuterHeight: 800, + viewportColumn: 88, + isWordWrapMinified: false, + isViewportWrapping: false, + wrappingColumn: -1, verticalScrollbarWidth: 0, horizontalScrollbarHeight: 0, @@ -324,7 +342,11 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => { minimapCanvasInnerHeight: 900, minimapCanvasOuterWidth: 0, minimapCanvasOuterHeight: 900, + viewportColumn: 88, + isWordWrapMinified: false, + isViewportWrapping: false, + wrappingColumn: -1, verticalScrollbarWidth: 0, horizontalScrollbarHeight: 0, @@ -386,7 +408,11 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => { minimapCanvasInnerHeight: 900, minimapCanvasOuterWidth: 0, minimapCanvasOuterHeight: 900, + viewportColumn: 88, + isWordWrapMinified: false, + isViewportWrapping: false, + wrappingColumn: -1, verticalScrollbarWidth: 0, horizontalScrollbarHeight: 0, @@ -448,7 +474,11 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => { minimapCanvasInnerHeight: 900, minimapCanvasOuterWidth: 0, minimapCanvasOuterHeight: 900, + viewportColumn: 83, + isWordWrapMinified: false, + isViewportWrapping: false, + wrappingColumn: -1, verticalScrollbarWidth: 0, horizontalScrollbarHeight: 0, @@ -510,7 +540,11 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => { minimapCanvasInnerHeight: 900, minimapCanvasOuterWidth: 0, minimapCanvasOuterHeight: 900, + viewportColumn: 83, + isWordWrapMinified: false, + isViewportWrapping: false, + wrappingColumn: -1, verticalScrollbarWidth: 0, horizontalScrollbarHeight: 0, @@ -572,7 +606,11 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => { minimapCanvasInnerHeight: 900, minimapCanvasOuterWidth: 0, minimapCanvasOuterHeight: 900, + viewportColumn: 82, + isWordWrapMinified: false, + isViewportWrapping: false, + wrappingColumn: -1, verticalScrollbarWidth: 0, horizontalScrollbarHeight: 0, @@ -634,7 +672,11 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => { minimapCanvasInnerHeight: 900, minimapCanvasOuterWidth: 0, minimapCanvasOuterHeight: 900, + viewportColumn: 171, + isWordWrapMinified: false, + isViewportWrapping: false, + wrappingColumn: -1, verticalScrollbarWidth: 0, horizontalScrollbarHeight: 0, @@ -696,7 +738,11 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => { minimapCanvasInnerHeight: 900, minimapCanvasOuterWidth: 0, minimapCanvasOuterHeight: 900, + viewportColumn: 169, + isWordWrapMinified: false, + isViewportWrapping: false, + wrappingColumn: -1, verticalScrollbarWidth: 0, horizontalScrollbarHeight: 0, @@ -758,7 +804,11 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => { minimapCanvasInnerHeight: 800, minimapCanvasOuterWidth: 97, minimapCanvasOuterHeight: 800, + viewportColumn: 89, + isWordWrapMinified: false, + isViewportWrapping: false, + wrappingColumn: -1, verticalScrollbarWidth: 0, horizontalScrollbarHeight: 0, @@ -820,7 +870,11 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => { minimapCanvasInnerHeight: 1600, minimapCanvasOuterWidth: 97, minimapCanvasOuterHeight: 800, + viewportColumn: 89, + isWordWrapMinified: false, + isViewportWrapping: false, + wrappingColumn: -1, verticalScrollbarWidth: 0, horizontalScrollbarHeight: 0, @@ -882,7 +936,11 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => { minimapCanvasInnerHeight: 3200, minimapCanvasOuterWidth: 55, minimapCanvasOuterHeight: 800, + viewportColumn: 93, + isWordWrapMinified: false, + isViewportWrapping: false, + wrappingColumn: -1, verticalScrollbarWidth: 0, horizontalScrollbarHeight: 0, @@ -944,7 +1002,11 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => { minimapCanvasInnerHeight: 3200, minimapCanvasOuterWidth: 55, minimapCanvasOuterHeight: 800, + viewportColumn: 93, + isWordWrapMinified: false, + isViewportWrapping: false, + wrappingColumn: -1, verticalScrollbarWidth: 0, horizontalScrollbarHeight: 0, @@ -1008,7 +1070,11 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => { minimapCanvasInnerHeight: 1560, minimapCanvasOuterWidth: 97, minimapCanvasOuterHeight: 800, + viewportColumn: 89, + isWordWrapMinified: false, + isViewportWrapping: false, + wrappingColumn: -1, verticalScrollbarWidth: 0, horizontalScrollbarHeight: 0, @@ -1072,7 +1138,11 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => { minimapCanvasInnerHeight: 1600, minimapCanvasOuterWidth: 55, minimapCanvasOuterHeight: 800, + viewportColumn: 93, + isWordWrapMinified: false, + isViewportWrapping: false, + wrappingColumn: -1, verticalScrollbarWidth: 0, horizontalScrollbarHeight: 0, @@ -1136,7 +1206,11 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => { minimapCanvasInnerHeight: 1600, minimapCanvasOuterWidth: 97, minimapCanvasOuterHeight: 800, + viewportColumn: 89, + isWordWrapMinified: false, + isViewportWrapping: false, + wrappingColumn: -1, verticalScrollbarWidth: 0, horizontalScrollbarHeight: 0, @@ -1200,7 +1274,11 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => { minimapCanvasInnerHeight: 1600, minimapCanvasOuterWidth: 55, minimapCanvasOuterHeight: 800, + viewportColumn: 93, + isWordWrapMinified: false, + isViewportWrapping: false, + wrappingColumn: -1, verticalScrollbarWidth: 0, horizontalScrollbarHeight: 0, @@ -1262,7 +1340,11 @@ suite('Editor ViewLayout - EditorLayoutProvider', () => { minimapCanvasInnerHeight: 844, minimapCanvasOuterWidth: 91, minimapCanvasOuterHeight: 422, + viewportColumn: 83, + isWordWrapMinified: false, + isViewportWrapping: false, + wrappingColumn: -1, verticalScrollbarWidth: 14, horizontalScrollbarHeight: 10, diff --git a/src/vs/monaco.d.ts b/src/vs/monaco.d.ts index 470d73c55b22a93e18de61d12aa44e435468457d..c400f52823da0e61216054f1232235b8269e3ef6 100644 --- a/src/vs/monaco.d.ts +++ b/src/vs/monaco.d.ts @@ -3423,6 +3423,9 @@ declare namespace monaco.editor { * The number of columns (of typical characters) fitting on a viewport line. */ readonly viewportColumn: number; + readonly isWordWrapMinified: boolean; + readonly isViewportWrapping: boolean; + readonly wrappingColumn: number; /** * The width of the vertical scrollbar. */