@@ -14,7 +14,7 @@ import { Position } from 'vs/editor/common/core/position';
1414import { Range } from 'vs/editor/common/core/range' ;
1515import { Selection } from 'vs/editor/common/core/selection' ;
1616import { ScrollType } from 'vs/editor/common/editorCommon' ;
17- import { HorizontalRange , IViewLines , LineVisibleRanges } from 'vs/editor/common/view/renderingContext' ;
17+ import { IViewLines , LineVisibleRanges , VisibleRanges , HorizontalPosition } from 'vs/editor/common/view/renderingContext' ;
1818import { ViewContext } from 'vs/editor/common/view/viewContext' ;
1919import * as viewEvents from 'vs/editor/common/view/viewEvents' ;
2020import { ViewportData } from 'vs/editor/common/viewLayout/viewLinesViewportData' ;
@@ -390,7 +390,7 @@ export class ViewLines extends ViewPart implements IVisibleLinesHost<ViewLine>,
390390 const endColumn = lineNumber === range . endLineNumber ? range . endColumn : this . _context . model . getLineMaxColumn ( lineNumber ) ;
391391 const visibleRangesForLine = this . _visibleLines . getVisibleLine ( lineNumber ) . getVisibleRangesForRange ( startColumn , endColumn , domReadingContext ) ;
392392
393- if ( ! visibleRangesForLine || visibleRangesForLine . length === 0 ) {
393+ if ( ! visibleRangesForLine ) {
394394 continue ;
395395 }
396396
@@ -399,11 +399,11 @@ export class ViewLines extends ViewPart implements IVisibleLinesHost<ViewLine>,
399399 nextLineModelLineNumber = this . _context . model . coordinatesConverter . convertViewPositionToModelPosition ( new Position ( lineNumber + 1 , 1 ) ) . lineNumber ;
400400
401401 if ( currentLineModelLineNumber !== nextLineModelLineNumber ) {
402- visibleRangesForLine [ visibleRangesForLine . length - 1 ] . width += this . _typicalHalfwidthCharacterWidth ;
402+ visibleRangesForLine . ranges [ visibleRangesForLine . ranges . length - 1 ] . width += this . _typicalHalfwidthCharacterWidth ;
403403 }
404404 }
405405
406- visibleRanges [ visibleRangesLen ++ ] = new LineVisibleRanges ( lineNumber , visibleRangesForLine ) ;
406+ visibleRanges [ visibleRangesLen ++ ] = new LineVisibleRanges ( visibleRangesForLine . outsideRenderedLine , lineNumber , visibleRangesForLine . ranges ) ;
407407 }
408408
409409 if ( visibleRangesLen === 0 ) {
@@ -413,54 +413,26 @@ export class ViewLines extends ViewPart implements IVisibleLinesHost<ViewLine>,
413413 return visibleRanges ;
414414 }
415415
416- private visibleRangesForRange2 ( _range : Range ) : HorizontalRange [ ] | null {
417-
416+ private _visibleRangesForLineRange ( lineNumber : number , startColumn : number , endColumn : number ) : VisibleRanges | null {
418417 if ( this . shouldRender ( ) ) {
419418 // Cannot read from the DOM because it is dirty
420419 // i.e. the model & the dom are out of sync, so I'd be reading something stale
421420 return null ;
422421 }
423422
424- const range = Range . intersectRanges ( _range , this . _lastRenderedData . getCurrentVisibleRange ( ) ) ;
425- if ( ! range ) {
426- return null ;
427- }
428-
429- let result : HorizontalRange [ ] = [ ] ;
430- const domReadingContext = new DomReadingContext ( this . domNode . domNode , this . _textRangeRestingSpot ) ;
431-
432- const rendStartLineNumber = this . _visibleLines . getStartLineNumber ( ) ;
433- const rendEndLineNumber = this . _visibleLines . getEndLineNumber ( ) ;
434- for ( let lineNumber = range . startLineNumber ; lineNumber <= range . endLineNumber ; lineNumber ++ ) {
435-
436- if ( lineNumber < rendStartLineNumber || lineNumber > rendEndLineNumber ) {
437- continue ;
438- }
439-
440- const startColumn = lineNumber === range . startLineNumber ? range . startColumn : 1 ;
441- const endColumn = lineNumber === range . endLineNumber ? range . endColumn : this . _context . model . getLineMaxColumn ( lineNumber ) ;
442- const visibleRangesForLine = this . _visibleLines . getVisibleLine ( lineNumber ) . getVisibleRangesForRange ( startColumn , endColumn , domReadingContext ) ;
443-
444- if ( ! visibleRangesForLine || visibleRangesForLine . length === 0 ) {
445- continue ;
446- }
447-
448- result = result . concat ( visibleRangesForLine ) ;
449- }
450-
451- if ( result . length === 0 ) {
423+ if ( lineNumber < this . _visibleLines . getStartLineNumber ( ) || lineNumber > this . _visibleLines . getEndLineNumber ( ) ) {
452424 return null ;
453425 }
454426
455- return result ;
427+ return this . _visibleLines . getVisibleLine ( lineNumber ) . getVisibleRangesForRange ( startColumn , endColumn , new DomReadingContext ( this . domNode . domNode , this . _textRangeRestingSpot ) ) ;
456428 }
457429
458- public visibleRangeForPosition ( position : Position ) : HorizontalRange | null {
459- const visibleRanges = this . visibleRangesForRange2 ( new Range ( position . lineNumber , position . column , position . lineNumber , position . column ) ) ;
430+ public visibleRangeForPosition ( position : Position ) : HorizontalPosition | null {
431+ const visibleRanges = this . _visibleRangesForLineRange ( position . lineNumber , position . column , position . column ) ;
460432 if ( ! visibleRanges ) {
461433 return null ;
462434 }
463- return visibleRanges [ 0 ] ;
435+ return new HorizontalPosition ( visibleRanges . outsideRenderedLine , visibleRanges . ranges [ 0 ] . left ) ;
464436 }
465437
466438 // --- implementation
@@ -641,7 +613,7 @@ export class ViewLines extends ViewPart implements IVisibleLinesHost<ViewLine>,
641613 const viewportStartX = viewport . left ;
642614 const viewportEndX = viewportStartX + viewport . width ;
643615
644- const visibleRanges = this . visibleRangesForRange2 ( new Range ( lineNumber , startColumn , lineNumber , endColumn ) ) ;
616+ const visibleRanges = this . _visibleRangesForLineRange ( lineNumber , startColumn , endColumn ) ;
645617 let boxStartX = Constants . MAX_SAFE_SMALL_INTEGER ;
646618 let boxEndX = 0 ;
647619
@@ -653,7 +625,7 @@ export class ViewLines extends ViewPart implements IVisibleLinesHost<ViewLine>,
653625 } ;
654626 }
655627
656- for ( const visibleRange of visibleRanges ) {
628+ for ( const visibleRange of visibleRanges . ranges ) {
657629 if ( visibleRange . left < boxStartX ) {
658630 boxStartX = visibleRange . left ;
659631 }
0 commit comments