@@ -27,7 +27,6 @@ export class LineNumbersOverlay extends DynamicViewOverlay {
27
27
private _lineNumbersLeft ! : number ;
28
28
private _lineNumbersWidth ! : number ;
29
29
private _lastCursorModelPosition : Position ;
30
- private _lastCursorViewPosition : Position ;
31
30
private _renderResult : string [ ] | null ;
32
31
private _activeLineNumber : number ;
33
32
@@ -38,7 +37,6 @@ export class LineNumbersOverlay extends DynamicViewOverlay {
38
37
this . _readConfig ( ) ;
39
38
40
39
this . _lastCursorModelPosition = new Position ( 1 , 1 ) ;
41
- this . _lastCursorViewPosition = new Position ( 1 , 1 ) ;
42
40
this . _renderResult = null ;
43
41
this . _activeLineNumber = 1 ;
44
42
this . _context . addEventHandler ( this ) ;
@@ -70,7 +68,6 @@ export class LineNumbersOverlay extends DynamicViewOverlay {
70
68
}
71
69
public override onCursorStateChanged ( e : viewEvents . ViewCursorStateChangedEvent ) : boolean {
72
70
const primaryViewPosition = e . selections [ 0 ] . getPosition ( ) ;
73
- this . _lastCursorViewPosition = primaryViewPosition ;
74
71
this . _lastCursorModelPosition = this . _context . viewModel . coordinatesConverter . convertViewPositionToModelPosition ( primaryViewPosition ) ;
75
72
76
73
let shouldRender = false ;
@@ -115,6 +112,14 @@ export class LineNumbersOverlay extends DynamicViewOverlay {
115
112
return this . _renderCustomLineNumbers ( modelLineNumber ) ;
116
113
}
117
114
115
+ if ( this . _renderLineNumbers === RenderLineNumbersType . Relative ) {
116
+ const diff = Math . abs ( this . _lastCursorModelPosition . lineNumber - modelLineNumber ) ;
117
+ if ( diff === 0 ) {
118
+ return '<span class="relative-current-line-number">' + modelLineNumber + '</span>' ;
119
+ }
120
+ return String ( diff ) ;
121
+ }
122
+
118
123
if ( this . _renderLineNumbers === RenderLineNumbersType . Interval ) {
119
124
if ( this . _lastCursorModelPosition . lineNumber === modelLineNumber ) {
120
125
return String ( modelLineNumber ) ;
@@ -139,45 +144,6 @@ export class LineNumbersOverlay extends DynamicViewOverlay {
139
144
const visibleEndLineNumber = ctx . visibleRange . endLineNumber ;
140
145
const common = '<div class="' + LineNumbersOverlay . CLASS_NAME + lineHeightClassName + '" style="left:' + this . _lineNumbersLeft + 'px;width:' + this . _lineNumbersWidth + 'px;">' ;
141
146
142
- let relativeLineNumbers : number [ ] | null = null ;
143
- if ( this . _renderLineNumbers === RenderLineNumbersType . Relative ) {
144
- relativeLineNumbers = new Array ( visibleEndLineNumber - visibleStartLineNumber + 1 ) ;
145
-
146
- if ( this . _lastCursorViewPosition . lineNumber >= visibleStartLineNumber && this . _lastCursorViewPosition . lineNumber <= visibleEndLineNumber ) {
147
- relativeLineNumbers [ this . _lastCursorViewPosition . lineNumber - visibleStartLineNumber ] = this . _lastCursorModelPosition . lineNumber ;
148
- }
149
-
150
- // Iterate up to compute relative line numbers
151
- {
152
- let value = 0 ;
153
- for ( let lineNumber = this . _lastCursorViewPosition . lineNumber + 1 ; lineNumber <= visibleEndLineNumber ; lineNumber ++ ) {
154
- const modelPosition = this . _context . viewModel . coordinatesConverter . convertViewPositionToModelPosition ( new Position ( lineNumber , 1 ) ) ;
155
- const isWrappedLine = ( modelPosition . column !== 1 ) ;
156
- if ( ! isWrappedLine ) {
157
- value ++ ;
158
- }
159
- if ( lineNumber >= visibleStartLineNumber ) {
160
- relativeLineNumbers [ lineNumber - visibleStartLineNumber ] = isWrappedLine ? 0 : value ;
161
- }
162
- }
163
- }
164
-
165
- // Iterate down to compute relative line numbers
166
- {
167
- let value = 0 ;
168
- for ( let lineNumber = this . _lastCursorViewPosition . lineNumber - 1 ; lineNumber >= visibleStartLineNumber ; lineNumber -- ) {
169
- const modelPosition = this . _context . viewModel . coordinatesConverter . convertViewPositionToModelPosition ( new Position ( lineNumber , 1 ) ) ;
170
- const isWrappedLine = ( modelPosition . column !== 1 ) ;
171
- if ( ! isWrappedLine ) {
172
- value ++ ;
173
- }
174
- if ( lineNumber <= visibleEndLineNumber ) {
175
- relativeLineNumbers [ lineNumber - visibleStartLineNumber ] = isWrappedLine ? 0 : value ;
176
- }
177
- }
178
- }
179
- }
180
-
181
147
const lineCount = this . _context . viewModel . getLineCount ( ) ;
182
148
const output : string [ ] = [ ] ;
183
149
for ( let lineNumber = visibleStartLineNumber ; lineNumber <= visibleEndLineNumber ; lineNumber ++ ) {
@@ -191,20 +157,7 @@ export class LineNumbersOverlay extends DynamicViewOverlay {
191
157
}
192
158
}
193
159
194
- let renderLineNumber : string ;
195
- if ( relativeLineNumbers ) {
196
- const relativeLineNumber = relativeLineNumbers [ lineIndex ] ;
197
- if ( this . _lastCursorViewPosition . lineNumber === lineNumber ) {
198
- // current line!
199
- renderLineNumber = `<span class="relative-current-line-number">${ relativeLineNumber } </span>` ;
200
- } else if ( relativeLineNumber ) {
201
- renderLineNumber = String ( relativeLineNumber ) ;
202
- } else {
203
- renderLineNumber = '' ;
204
- }
205
- } else {
206
- renderLineNumber = this . _getLineRenderLineNumber ( lineNumber ) ;
207
- }
160
+ const renderLineNumber = this . _getLineRenderLineNumber ( lineNumber ) ;
208
161
209
162
if ( renderLineNumber ) {
210
163
if ( lineNumber === this . _activeLineNumber ) {
0 commit comments