@@ -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 */
17651769export 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 {
32343300class 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