6
6
import * as dom from 'vs/base/browser/dom' ;
7
7
import { StandardMouseEvent } from 'vs/base/browser/mouseEvent' ;
8
8
import { createTrustedTypesPolicy } from 'vs/base/browser/trustedTypes' ;
9
+ import { equals } from 'vs/base/common/arrays' ;
9
10
import { Disposable , DisposableStore } from 'vs/base/common/lifecycle' ;
10
11
import 'vs/css!./stickyScroll' ;
11
12
import { ICodeEditor , IOverlayWidget , IOverlayWidgetPosition } from 'vs/editor/browser/editorBrowser' ;
@@ -21,6 +22,10 @@ export class StickyScrollWidgetState {
21
22
readonly lineNumbers : number [ ] ,
22
23
readonly lastLineRelativePosition : number
23
24
) { }
25
+
26
+ public equals ( other : StickyScrollWidgetState | undefined ) : boolean {
27
+ return ! ! other && this . lastLineRelativePosition === other . lastLineRelativePosition && equals ( this . lineNumbers , other . lineNumbers ) ;
28
+ }
24
29
}
25
30
26
31
const _ttPolicy = createTrustedTypesPolicy ( 'stickyScrollViewLayer' , { createHTML : value => value } ) ;
@@ -35,6 +40,7 @@ export class StickyScrollWidget extends Disposable implements IOverlayWidget {
35
40
private _lastLineRelativePosition : number = 0 ;
36
41
private _hoverOnLine : number = - 1 ;
37
42
private _hoverOnColumn : number = - 1 ;
43
+ private _state : StickyScrollWidgetState | undefined ;
38
44
39
45
constructor (
40
46
private readonly _editor : ICodeEditor
@@ -68,6 +74,10 @@ export class StickyScrollWidget extends Disposable implements IOverlayWidget {
68
74
}
69
75
70
76
setState ( state : StickyScrollWidgetState ) : void {
77
+ if ( state . equals ( this . _state ) ) {
78
+ return ;
79
+ }
80
+ this . _state = state ;
71
81
dom . clearNode ( this . _rootDomNode ) ;
72
82
this . _disposableStore . clear ( ) ;
73
83
this . _lineNumbers . length = 0 ;
0 commit comments