@@ -496,6 +496,14 @@ export class MouseTargetFactory {
496
496
try {
497
497
const r = MouseTargetFactory . _createMouseTarget ( ctx , request , false ) ;
498
498
// console.log(MouseTarget.toString(r));
499
+
500
+ if ( r . type === MouseTargetType . CONTENT_TEXT ) {
501
+ // Snap to the nearest soft tab boundary if atomic soft tabs are enabled.
502
+ if ( ctx . stickyTabStops && r . position !== null ) {
503
+ const position = MouseTargetFactory . _snapToSoftTabBoundary ( r . position , ctx . viewModel ) ;
504
+ return request . fulfillContentText ( position , r . range , r . detail ) ;
505
+ }
506
+ }
499
507
return r ;
500
508
} catch ( err ) {
501
509
// console.log(err);
@@ -774,10 +782,12 @@ export class MouseTargetFactory {
774
782
const lineNumber = pos . lineNumber ;
775
783
const column = pos . column ;
776
784
785
+ const mouseContentHorizontalOffset = Math . floor ( request . mouseContentHorizontalOffset ) ;
786
+
777
787
const lineWidth = ctx . getLineWidth ( lineNumber ) ;
778
788
779
- if ( request . mouseContentHorizontalOffset > lineWidth ) {
780
- const detail = createEmptyContentDataInLines ( request . mouseContentHorizontalOffset - lineWidth ) ;
789
+ if ( mouseContentHorizontalOffset > lineWidth ) {
790
+ const detail = createEmptyContentDataInLines ( mouseContentHorizontalOffset - lineWidth ) ;
781
791
return request . fulfillContentEmpty ( pos , detail ) ;
782
792
}
783
793
@@ -789,7 +799,7 @@ export class MouseTargetFactory {
789
799
790
800
const columnHorizontalOffset = visibleRange . left ;
791
801
792
- if ( request . mouseContentHorizontalOffset === columnHorizontalOffset ) {
802
+ if ( mouseContentHorizontalOffset === columnHorizontalOffset ) {
793
803
return request . fulfillContentText ( pos , null , { mightBeForeignElement : ! ! injectedText , injectedText } ) ;
794
804
}
795
805
@@ -818,29 +828,32 @@ export class MouseTargetFactory {
818
828
const spanNodeClientRect = spanNode . getBoundingClientRect ( ) ;
819
829
const mouseIsOverSpanNode = ( spanNodeClientRect . left <= mouseCoordinates . clientX && mouseCoordinates . clientX <= spanNodeClientRect . right ) ;
820
830
831
+ let rng : EditorRange | null = null ;
832
+
821
833
for ( let i = 1 ; i < points . length ; i ++ ) {
822
834
const prev = points [ i - 1 ] ;
823
835
const curr = points [ i ] ;
824
- if ( prev . offset <= request . mouseContentHorizontalOffset && request . mouseContentHorizontalOffset <= curr . offset ) {
825
- const rng = new EditorRange ( lineNumber , prev . column , lineNumber , curr . column ) ;
836
+ if ( prev . offset <= mouseContentHorizontalOffset && mouseContentHorizontalOffset <= curr . offset ) {
837
+ rng = new EditorRange ( lineNumber , prev . column , lineNumber , curr . column ) ;
826
838
827
839
// See https://github.com/microsoft/vscode/issues/152819
828
840
// Due to the use of zwj, the browser's hit test result is skewed towards the left
829
841
// Here we try to correct that if the mouse horizontal offset is closer to the right than the left
830
842
831
- const prevDelta = Math . abs ( prev . offset - request . mouseContentHorizontalOffset ) ;
832
- const nextDelta = Math . abs ( curr . offset - request . mouseContentHorizontalOffset ) ;
843
+ const prevDelta = Math . abs ( prev . offset - mouseContentHorizontalOffset ) ;
844
+ const nextDelta = Math . abs ( curr . offset - mouseContentHorizontalOffset ) ;
833
845
834
- const resultPos = (
846
+ pos = (
835
847
prevDelta < nextDelta
836
848
? new Position ( lineNumber , prev . column )
837
849
: new Position ( lineNumber , curr . column )
838
850
) ;
839
851
840
- return request . fulfillContentText ( resultPos , rng , { mightBeForeignElement : ! mouseIsOverSpanNode || ! ! injectedText , injectedText } ) ;
852
+ break ;
841
853
}
842
854
}
843
- return request . fulfillContentText ( pos , null , { mightBeForeignElement : ! mouseIsOverSpanNode || ! ! injectedText , injectedText } ) ;
855
+
856
+ return request . fulfillContentText ( pos , rng , { mightBeForeignElement : ! mouseIsOverSpanNode || ! ! injectedText , injectedText } ) ;
844
857
}
845
858
846
859
/**
@@ -990,10 +1003,6 @@ export class MouseTargetFactory {
990
1003
result = new ContentHitTestResult ( normalizedPosition , result . spanNode , injectedText ) ;
991
1004
}
992
1005
}
993
- // Snap to the nearest soft tab boundary if atomic soft tabs are enabled.
994
- if ( result . type === HitTestResultType . Content && ctx . stickyTabStops ) {
995
- result = new ContentHitTestResult ( this . _snapToSoftTabBoundary ( result . position , ctx . viewModel ) , result . spanNode , result . injectedText ) ;
996
- }
997
1006
return result ;
998
1007
}
999
1008
}
0 commit comments