@@ -851,22 +851,31 @@ export class MouseTargetFactory {
851
851
// In Chrome, especially on Linux it is possible to click between lines,
852
852
// so try to adjust the `hity` below so that it lands in the center of a line
853
853
const lineNumber = ctx . getLineNumberAtVerticalOffset ( request . mouseVerticalOffset ) ;
854
- const lineVerticalOffset = ctx . getVerticalOffsetForLineNumber ( lineNumber ) ;
855
- const lineCenteredVerticalOffset = lineVerticalOffset + Math . floor ( ctx . lineHeight / 2 ) ;
856
- let adjustedPageY = request . pos . y + ( lineCenteredVerticalOffset - request . mouseVerticalOffset ) ;
854
+ const lineStartVerticalOffset = ctx . getVerticalOffsetForLineNumber ( lineNumber ) ;
855
+ const lineEndVerticalOffset = lineStartVerticalOffset + ctx . lineHeight ;
857
856
858
- if ( adjustedPageY <= request . editorPos . y ) {
859
- adjustedPageY = request . editorPos . y + 1 ;
860
- }
861
- if ( adjustedPageY >= request . editorPos . y + request . editorPos . height ) {
862
- adjustedPageY = request . editorPos . y + request . editorPos . height - 1 ;
863
- }
857
+ const isBelowLastLine = (
858
+ lineNumber === ctx . viewModel . getLineCount ( )
859
+ && request . mouseVerticalOffset > lineEndVerticalOffset
860
+ ) ;
864
861
865
- const adjustedPage = new PageCoordinates ( request . pos . x , adjustedPageY ) ;
862
+ if ( ! isBelowLastLine ) {
863
+ const lineCenteredVerticalOffset = Math . floor ( ( lineStartVerticalOffset + lineEndVerticalOffset ) / 2 ) ;
864
+ let adjustedPageY = request . pos . y + ( lineCenteredVerticalOffset - request . mouseVerticalOffset ) ;
866
865
867
- const r = this . _actualDoHitTestWithCaretRangeFromPoint ( ctx , adjustedPage . toClientCoordinates ( ) ) ;
868
- if ( r . type === HitTestResultType . Content ) {
869
- return r ;
866
+ if ( adjustedPageY <= request . editorPos . y ) {
867
+ adjustedPageY = request . editorPos . y + 1 ;
868
+ }
869
+ if ( adjustedPageY >= request . editorPos . y + request . editorPos . height ) {
870
+ adjustedPageY = request . editorPos . y + request . editorPos . height - 1 ;
871
+ }
872
+
873
+ const adjustedPage = new PageCoordinates ( request . pos . x , adjustedPageY ) ;
874
+
875
+ const r = this . _actualDoHitTestWithCaretRangeFromPoint ( ctx , adjustedPage . toClientCoordinates ( ) ) ;
876
+ if ( r . type === HitTestResultType . Content ) {
877
+ return r ;
878
+ }
870
879
}
871
880
872
881
// Also try to hit test without the adjustment (for the edge cases that we are near the top or bottom)
0 commit comments