@@ -140,6 +140,7 @@ export class ViewLines extends ViewLayer {
140140 public onLayoutChanged ( layoutInfo :editorCommon . IEditorLayoutInfo ) : boolean {
141141 var shouldRender = super . onLayoutChanged ( layoutInfo ) ;
142142 this . _maxLineWidth = 0 ;
143+ this . _lastRenderedData . resetDomNodeClientRectLeft ( ) ;
143144 return shouldRender ;
144145 }
145146
@@ -379,39 +380,50 @@ export class ViewLines extends ViewLayer {
379380 throw new Error ( 'I did not ask to render!' ) ;
380381 }
381382
383+ // (1) render lines - ensures lines are in the DOM
382384 super . _renderLines ( linesViewportData ) ;
383- this . onDidRender ( ) ;
384-
385385 this . _lastRenderedData . setBigNumbersDelta ( linesViewportData . bigNumbersDelta ) ;
386386 this . _lastRenderedData . setCurrentVisibleRange ( linesViewportData . visibleRange ) ;
387- this . _lastRenderedData . resetDomNodeClientRectLeft ( ) ;
387+ this . domNode . setWidth ( this . _layoutProvider . getScrollWidth ( ) ) ;
388+ this . domNode . setHeight ( Math . min ( this . _layoutProvider . getTotalHeight ( ) , 1000000 ) ) ;
388389
390+ // (2) compute horizontal scroll position:
391+ // - this must happen after the lines are in the DOM since it might need a line that rendered just now
392+ // - it might change `scrollWidth` and `scrollLeft`
389393 if ( this . _lastCursorRevealRangeHorizontallyEvent ) {
390- var newScrollLeft = this . _computeScrollLeftToRevealRange ( this . _lastCursorRevealRangeHorizontallyEvent . range ) ;
394+ let revealHorizontalRange = this . _lastCursorRevealRangeHorizontallyEvent . range ;
391395 this . _lastCursorRevealRangeHorizontallyEvent = null ;
392396
397+ // allow `visibleRangesForRange2` to work
398+ this . onDidRender ( ) ;
399+
400+ // compute new scroll position
401+ var newScrollLeft = this . _computeScrollLeftToRevealRange ( revealHorizontalRange ) ;
402+
393403 var isViewportWrapping = this . _isViewportWrapping ;
394404 if ( ! isViewportWrapping ) {
405+ // ensure `scrollWidth` is large enough
395406 this . _ensureMaxLineWidth ( newScrollLeft . maxHorizontalOffset ) ;
396407 }
397408
409+ // set `scrollLeft`
398410 this . _layoutProvider . setScrollLeft ( newScrollLeft . scrollLeft ) ;
399411 }
400412
401- // Update max line width (not so important, it is just so the horizontal scrollbar doesn't get too small)
402- this . _asyncUpdateLineWidths . schedule ( ) ;
403-
413+ let somethingChanged = false ;
404414 if ( browser . canUseTranslate3d ) {
405415 var transform = 'translate3d(' + - this . _layoutProvider . getScrollLeft ( ) + 'px, ' + linesViewportData . visibleRangesDeltaTop + 'px, 0px)' ;
406- StyleMutator . setTransform ( < HTMLElement > this . domNode . domNode . parentNode , transform ) ; // TODO@Alex
416+ somethingChanged = StyleMutator . setTransform ( < HTMLElement > this . domNode . domNode . parentNode , transform ) || somethingChanged ; // TODO@Alex
407417 } else {
408- StyleMutator . setTop ( < HTMLElement > this . domNode . domNode . parentNode , linesViewportData . visibleRangesDeltaTop ) ; // TODO@Alex
409- StyleMutator . setLeft ( < HTMLElement > this . domNode . domNode . parentNode , - this . _layoutProvider . getScrollLeft ( ) ) ; // TODO@Alex
418+ somethingChanged = StyleMutator . setTop ( < HTMLElement > this . domNode . domNode . parentNode , linesViewportData . visibleRangesDeltaTop ) || somethingChanged ; // TODO@Alex
419+ somethingChanged = StyleMutator . setLeft ( < HTMLElement > this . domNode . domNode . parentNode , - this . _layoutProvider . getScrollLeft ( ) ) || somethingChanged ; // TODO@Alex
420+ }
421+ if ( somethingChanged ) {
422+ this . _lastRenderedData . resetDomNodeClientRectLeft ( ) ;
410423 }
411- this . _lastRenderedData . resetDomNodeClientRectLeft ( ) ;
412424
413- this . domNode . setWidth ( this . _layoutProvider . getScrollWidth ( ) ) ;
414- this . domNode . setHeight ( Math . min ( this . _layoutProvider . getTotalHeight ( ) , 1000000 ) ) ;
425+ // Update max line width (not so important, it is just so the horizontal scrollbar doesn't get too small)
426+ this . _asyncUpdateLineWidths . schedule ( ) ;
415427 }
416428
417429 // --- width
0 commit comments