@@ -495,6 +495,16 @@ export class MouseTargetFactory {
495495 const request = new HitTestRequest ( ctx , editorPos , pos , relativePos , target ) ;
496496 try {
497497 const r = MouseTargetFactory . _createMouseTarget ( ctx , request , false ) ;
498+
499+ if ( r . type === MouseTargetType . CONTENT_TEXT ) {
500+ // Snap to the nearest soft tab boundary if atomic soft tabs are enabled.
501+ if ( ctx . stickyTabStops && r . position !== null ) {
502+ const position = MouseTargetFactory . _snapToSoftTabBoundary ( r . position , ctx . viewModel ) ;
503+ const range = EditorRange . fromPositions ( position , position ) . plusRange ( r . range ) ;
504+ return request . fulfillContentText ( position , range , r . detail ) ;
505+ }
506+ }
507+
498508 // console.log(MouseTarget.toString(r));
499509 return r ;
500510 } catch ( err ) {
@@ -789,7 +799,7 @@ export class MouseTargetFactory {
789799
790800 const columnHorizontalOffset = visibleRange . left ;
791801
792- if ( request . mouseContentHorizontalOffset === columnHorizontalOffset ) {
802+ if ( Math . abs ( request . mouseContentHorizontalOffset - columnHorizontalOffset ) < 1 ) {
793803 return request . fulfillContentText ( pos , null , { mightBeForeignElement : ! ! injectedText , injectedText } ) ;
794804 }
795805
@@ -818,11 +828,13 @@ export class MouseTargetFactory {
818828 const spanNodeClientRect = spanNode . getBoundingClientRect ( ) ;
819829 const mouseIsOverSpanNode = ( spanNodeClientRect . left <= mouseCoordinates . clientX && mouseCoordinates . clientX <= spanNodeClientRect . right ) ;
820830
831+ let rng : EditorRange | null = null ;
832+
821833 for ( let i = 1 ; i < points . length ; i ++ ) {
822834 const prev = points [ i - 1 ] ;
823835 const curr = points [ i ] ;
824836 if ( prev . offset <= request . mouseContentHorizontalOffset && request . mouseContentHorizontalOffset <= curr . offset ) {
825- const rng = new EditorRange ( lineNumber , prev . column , lineNumber , curr . column ) ;
837+ rng = new EditorRange ( lineNumber , prev . column , lineNumber , curr . column ) ;
826838
827839 // See https://github.com/microsoft/vscode/issues/152819
828840 // Due to the use of zwj, the browser's hit test result is skewed towards the left
@@ -831,16 +843,17 @@ export class MouseTargetFactory {
831843 const prevDelta = Math . abs ( prev . offset - request . mouseContentHorizontalOffset ) ;
832844 const nextDelta = Math . abs ( curr . offset - request . mouseContentHorizontalOffset ) ;
833845
834- const resultPos = (
846+ pos = (
835847 prevDelta < nextDelta
836848 ? new Position ( lineNumber , prev . column )
837849 : new Position ( lineNumber , curr . column )
838850 ) ;
839851
840- return request . fulfillContentText ( resultPos , rng , { mightBeForeignElement : ! mouseIsOverSpanNode || ! ! injectedText , injectedText } ) ;
852+ break ;
841853 }
842854 }
843- return request . fulfillContentText ( pos , null , { mightBeForeignElement : ! mouseIsOverSpanNode || ! ! injectedText , injectedText } ) ;
855+
856+ return request . fulfillContentText ( pos , rng , { mightBeForeignElement : ! mouseIsOverSpanNode || ! ! injectedText , injectedText } ) ;
844857 }
845858
846859 /**
@@ -999,10 +1012,6 @@ export class MouseTargetFactory {
9991012 result = new ContentHitTestResult ( normalizedPosition , result . spanNode , injectedText ) ;
10001013 }
10011014 }
1002- // Snap to the nearest soft tab boundary if atomic soft tabs are enabled.
1003- if ( result . type === HitTestResultType . Content && ctx . stickyTabStops ) {
1004- result = new ContentHitTestResult ( this . _snapToSoftTabBoundary ( result . position , ctx . viewModel ) , result . spanNode , result . injectedText ) ;
1005- }
10061015 return result ;
10071016 }
10081017}
0 commit comments