@theia/scm 1.64.0-next.35 → 1.64.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/browser/merge-editor/view/merge-editor-scroll-sync.d.ts +2 -1
- package/lib/browser/merge-editor/view/merge-editor-scroll-sync.d.ts.map +1 -1
- package/lib/browser/merge-editor/view/merge-editor-scroll-sync.js +48 -21
- package/lib/browser/merge-editor/view/merge-editor-scroll-sync.js.map +1 -1
- package/package.json +7 -7
- package/src/browser/merge-editor/view/merge-editor-scroll-sync.ts +47 -21
|
@@ -5,6 +5,7 @@ import { DocumentLineRangeMap } from '../model/range-mapping';
|
|
|
5
5
|
export declare class MergeEditorScrollSync implements Disposable {
|
|
6
6
|
protected readonly mergeEditor: MergeEditor;
|
|
7
7
|
protected readonly toDispose: DisposableCollection;
|
|
8
|
+
protected isSyncing: boolean;
|
|
8
9
|
constructor(mergeEditor: MergeEditor);
|
|
9
10
|
dispose(): void;
|
|
10
11
|
storeScrollState(): unknown;
|
|
@@ -14,6 +15,6 @@ export declare class MergeEditorScrollSync implements Disposable {
|
|
|
14
15
|
protected handleSide2ScrollTopChanged(scrollTop: number): void;
|
|
15
16
|
protected handleResultScrollTopChanged(scrollTop: number): void;
|
|
16
17
|
protected handleBaseScrollTopChanged(scrollTop: number): void;
|
|
17
|
-
protected
|
|
18
|
+
protected computeTargetScrollTop(sourceEditor: MonacoEditor, targetEditor: MonacoEditor, lineRangeMap: DocumentLineRangeMap): number;
|
|
18
19
|
}
|
|
19
20
|
//# sourceMappingURL=merge-editor-scroll-sync.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merge-editor-scroll-sync.d.ts","sourceRoot":"","sources":["../../../../src/browser/merge-editor/view/merge-editor-scroll-sync.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,yCAAyC,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,qBAAa,qBAAsB,YAAW,UAAU;
|
|
1
|
+
{"version":3,"file":"merge-editor-scroll-sync.d.ts","sourceRoot":"","sources":["../../../../src/browser/merge-editor/view/merge-editor-scroll-sync.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,yCAAyC,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,qBAAa,qBAAsB,YAAW,UAAU;IAKxC,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW;IAHvD,SAAS,CAAC,QAAQ,CAAC,SAAS,uBAA8B;IAC1D,SAAS,CAAC,SAAS,UAAS;gBAEG,WAAW,EAAE,WAAW;IA4DvD,OAAO,IAAI,IAAI;IAIf,gBAAgB,IAAI,OAAO;IAI3B,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAWxC,MAAM,IAAI,IAAI;IAad,SAAS,CAAC,2BAA2B,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAoB9D,SAAS,CAAC,2BAA2B,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAoB9D,SAAS,CAAC,4BAA4B,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAqB/D,SAAS,CAAC,0BAA0B,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAqB7D,SAAS,CAAC,sBAAsB,CAAC,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,oBAAoB,GAAG,MAAM;CAmCvI"}
|
|
@@ -26,18 +26,18 @@ class MergeEditorScrollSync {
|
|
|
26
26
|
constructor(mergeEditor) {
|
|
27
27
|
this.mergeEditor = mergeEditor;
|
|
28
28
|
this.toDispose = new core_1.DisposableCollection();
|
|
29
|
+
this.isSyncing = false;
|
|
29
30
|
const { side1Pane, side2Pane, resultPane, basePane } = mergeEditor;
|
|
30
|
-
let isSyncing = false;
|
|
31
31
|
const syncingHandler = (handler) => (event) => {
|
|
32
|
-
if (isSyncing) {
|
|
32
|
+
if (this.isSyncing) {
|
|
33
33
|
return;
|
|
34
34
|
}
|
|
35
|
-
isSyncing = true;
|
|
35
|
+
this.isSyncing = true;
|
|
36
36
|
try {
|
|
37
37
|
handler(event);
|
|
38
38
|
}
|
|
39
39
|
finally {
|
|
40
|
-
isSyncing = false;
|
|
40
|
+
this.isSyncing = false;
|
|
41
41
|
}
|
|
42
42
|
};
|
|
43
43
|
this.toDispose.push(side1Pane.editor.getControl().onDidScrollChange(syncingHandler(event => {
|
|
@@ -99,8 +99,17 @@ class MergeEditorScrollSync {
|
|
|
99
99
|
}
|
|
100
100
|
}
|
|
101
101
|
update() {
|
|
102
|
-
|
|
103
|
-
|
|
102
|
+
if (this.isSyncing) {
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
this.isSyncing = true;
|
|
106
|
+
try {
|
|
107
|
+
const scrollTop = this.mergeEditor.side1Pane.editor.getControl().getScrollTop();
|
|
108
|
+
this.handleSide1ScrollTopChanged(scrollTop);
|
|
109
|
+
}
|
|
110
|
+
finally {
|
|
111
|
+
this.isSyncing = false;
|
|
112
|
+
}
|
|
104
113
|
}
|
|
105
114
|
handleSide1ScrollTopChanged(scrollTop) {
|
|
106
115
|
const { side1Pane, side2Pane, resultPane, basePane, shouldAlignBase, shouldAlignResult, model } = this.mergeEditor;
|
|
@@ -109,13 +118,15 @@ class MergeEditorScrollSync {
|
|
|
109
118
|
resultPane.editor.getControl().setScrollTop(scrollTop);
|
|
110
119
|
}
|
|
111
120
|
else {
|
|
112
|
-
this.
|
|
121
|
+
const targetScrollTop = this.computeTargetScrollTop(side1Pane.editor, resultPane.editor, model.side1ToResultLineRangeMap);
|
|
122
|
+
resultPane.editor.getControl().setScrollTop(targetScrollTop);
|
|
113
123
|
}
|
|
114
124
|
if (shouldAlignBase) {
|
|
115
125
|
basePane.editor.getControl().setScrollTop(scrollTop);
|
|
116
126
|
}
|
|
117
127
|
else {
|
|
118
|
-
this.
|
|
128
|
+
const targetScrollTop = this.computeTargetScrollTop(side1Pane.editor, basePane.editor, model.side1ToBaseLineRangeMap);
|
|
129
|
+
basePane.editor.getControl().setScrollTop(targetScrollTop);
|
|
119
130
|
}
|
|
120
131
|
}
|
|
121
132
|
handleSide2ScrollTopChanged(scrollTop) {
|
|
@@ -125,43 +136,59 @@ class MergeEditorScrollSync {
|
|
|
125
136
|
resultPane.editor.getControl().setScrollTop(scrollTop);
|
|
126
137
|
}
|
|
127
138
|
else {
|
|
128
|
-
this.
|
|
139
|
+
const targetScrollTop = this.computeTargetScrollTop(side2Pane.editor, resultPane.editor, model.side2ToResultLineRangeMap);
|
|
140
|
+
resultPane.editor.getControl().setScrollTop(targetScrollTop);
|
|
129
141
|
}
|
|
130
142
|
if (shouldAlignBase) {
|
|
131
143
|
basePane.editor.getControl().setScrollTop(scrollTop);
|
|
132
144
|
}
|
|
133
145
|
else {
|
|
134
|
-
this.
|
|
146
|
+
const targetScrollTop = this.computeTargetScrollTop(side2Pane.editor, basePane.editor, model.side2ToBaseLineRangeMap);
|
|
147
|
+
basePane.editor.getControl().setScrollTop(targetScrollTop);
|
|
135
148
|
}
|
|
136
149
|
}
|
|
137
150
|
handleResultScrollTopChanged(scrollTop) {
|
|
138
|
-
const { side1Pane, side2Pane, resultPane, basePane, shouldAlignResult, model } = this.mergeEditor;
|
|
151
|
+
const { side1Pane, side2Pane, resultPane, basePane, shouldAlignBase, shouldAlignResult, model } = this.mergeEditor;
|
|
139
152
|
if (shouldAlignResult) {
|
|
140
153
|
side1Pane.editor.getControl().setScrollTop(scrollTop);
|
|
141
154
|
side2Pane.editor.getControl().setScrollTop(scrollTop);
|
|
142
155
|
}
|
|
143
156
|
else {
|
|
144
|
-
this.
|
|
145
|
-
|
|
157
|
+
const targetScrollTop = this.computeTargetScrollTop(resultPane.editor, side1Pane.editor, model.resultToSide1LineRangeMap);
|
|
158
|
+
side1Pane.editor.getControl().setScrollTop(targetScrollTop);
|
|
159
|
+
side2Pane.editor.getControl().setScrollTop(targetScrollTop);
|
|
160
|
+
if (shouldAlignBase) {
|
|
161
|
+
basePane.editor.getControl().setScrollTop(targetScrollTop);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
if (!shouldAlignBase) {
|
|
165
|
+
const targetScrollTop = this.computeTargetScrollTop(resultPane.editor, basePane.editor, model.resultToBaseLineRangeMap);
|
|
166
|
+
basePane.editor.getControl().setScrollTop(targetScrollTop);
|
|
146
167
|
}
|
|
147
|
-
this.synchronizeScrolling(resultPane.editor, basePane.editor, model.resultToBaseLineRangeMap);
|
|
148
168
|
}
|
|
149
169
|
handleBaseScrollTopChanged(scrollTop) {
|
|
150
|
-
const { side1Pane, side2Pane, resultPane, basePane, shouldAlignBase, model } = this.mergeEditor;
|
|
170
|
+
const { side1Pane, side2Pane, resultPane, basePane, shouldAlignBase, shouldAlignResult, model } = this.mergeEditor;
|
|
151
171
|
if (shouldAlignBase) {
|
|
152
172
|
side1Pane.editor.getControl().setScrollTop(scrollTop);
|
|
153
173
|
side2Pane.editor.getControl().setScrollTop(scrollTop);
|
|
154
174
|
}
|
|
155
175
|
else {
|
|
156
|
-
this.
|
|
157
|
-
|
|
176
|
+
const targetScrollTop = this.computeTargetScrollTop(basePane.editor, side1Pane.editor, model.baseToSide1LineRangeMap);
|
|
177
|
+
side1Pane.editor.getControl().setScrollTop(targetScrollTop);
|
|
178
|
+
side2Pane.editor.getControl().setScrollTop(targetScrollTop);
|
|
179
|
+
if (shouldAlignResult) {
|
|
180
|
+
resultPane.editor.getControl().setScrollTop(targetScrollTop);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
if (!shouldAlignResult) {
|
|
184
|
+
const targetScrollTop = this.computeTargetScrollTop(basePane.editor, resultPane.editor, model.baseToResultLineRangeMap);
|
|
185
|
+
resultPane.editor.getControl().setScrollTop(targetScrollTop);
|
|
158
186
|
}
|
|
159
|
-
this.synchronizeScrolling(basePane.editor, resultPane.editor, model.baseToResultLineRangeMap);
|
|
160
187
|
}
|
|
161
|
-
|
|
188
|
+
computeTargetScrollTop(sourceEditor, targetEditor, lineRangeMap) {
|
|
162
189
|
const visibleRanges = sourceEditor.getVisibleRanges();
|
|
163
190
|
if (visibleRanges.length === 0) {
|
|
164
|
-
return;
|
|
191
|
+
return 0;
|
|
165
192
|
}
|
|
166
193
|
const topLineNumber = visibleRanges[0].start.line;
|
|
167
194
|
const scrollTop = sourceEditor.getControl().getScrollTop();
|
|
@@ -184,7 +211,7 @@ class MergeEditorScrollSync {
|
|
|
184
211
|
}
|
|
185
212
|
const factor = Math.min(sourceEndPx === sourceStartTopPx ? 0 : (scrollTop - sourceStartTopPx) / (sourceEndPx - sourceStartTopPx), 1);
|
|
186
213
|
const targetScrollTop = targetStartTopPx + (targetEndPx - targetStartTopPx) * factor;
|
|
187
|
-
|
|
214
|
+
return targetScrollTop;
|
|
188
215
|
}
|
|
189
216
|
}
|
|
190
217
|
exports.MergeEditorScrollSync = MergeEditorScrollSync;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merge-editor-scroll-sync.js","sourceRoot":"","sources":["../../../../src/browser/merge-editor/view/merge-editor-scroll-sync.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,6CAA6C;AAC7C,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;AAChF;;;gGAGgG;AAChG,mJAAmJ;;;AAEnJ,sCAA+D;AAK/D,MAAa,qBAAqB;
|
|
1
|
+
{"version":3,"file":"merge-editor-scroll-sync.js","sourceRoot":"","sources":["../../../../src/browser/merge-editor/view/merge-editor-scroll-sync.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@theia/scm",
|
|
3
|
-
"version": "1.64.0
|
|
3
|
+
"version": "1.64.0",
|
|
4
4
|
"description": "Theia - Source control Extension",
|
|
5
5
|
"dependencies": {
|
|
6
|
-
"@theia/core": "1.64.0
|
|
7
|
-
"@theia/editor": "1.64.0
|
|
8
|
-
"@theia/filesystem": "1.64.0
|
|
9
|
-
"@theia/monaco": "1.64.0
|
|
6
|
+
"@theia/core": "1.64.0",
|
|
7
|
+
"@theia/editor": "1.64.0",
|
|
8
|
+
"@theia/filesystem": "1.64.0",
|
|
9
|
+
"@theia/monaco": "1.64.0",
|
|
10
10
|
"@theia/monaco-editor-core": "1.96.302",
|
|
11
11
|
"@types/diff": "^5.2.1",
|
|
12
12
|
"diff": "^5.2.0",
|
|
@@ -49,10 +49,10 @@
|
|
|
49
49
|
"watch": "theiaext watch"
|
|
50
50
|
},
|
|
51
51
|
"devDependencies": {
|
|
52
|
-
"@theia/ext-scripts": "1.
|
|
52
|
+
"@theia/ext-scripts": "1.64.0"
|
|
53
53
|
},
|
|
54
54
|
"nyc": {
|
|
55
55
|
"extends": "../../configs/nyc.json"
|
|
56
56
|
},
|
|
57
|
-
"gitHead": "
|
|
57
|
+
"gitHead": "4c074e0d16c48e96a044b2f8bc4717de2e031c4b"
|
|
58
58
|
}
|
|
@@ -27,20 +27,20 @@ import { DocumentLineRangeMap } from '../model/range-mapping';
|
|
|
27
27
|
export class MergeEditorScrollSync implements Disposable {
|
|
28
28
|
|
|
29
29
|
protected readonly toDispose = new DisposableCollection();
|
|
30
|
+
protected isSyncing = false;
|
|
30
31
|
|
|
31
32
|
constructor(protected readonly mergeEditor: MergeEditor) {
|
|
32
33
|
const { side1Pane, side2Pane, resultPane, basePane } = mergeEditor;
|
|
33
34
|
|
|
34
|
-
let isSyncing = false;
|
|
35
35
|
const syncingHandler = <T>(handler: (event: T) => void) => (event: T) => {
|
|
36
|
-
if (isSyncing) {
|
|
36
|
+
if (this.isSyncing) {
|
|
37
37
|
return;
|
|
38
38
|
}
|
|
39
|
-
isSyncing = true;
|
|
39
|
+
this.isSyncing = true;
|
|
40
40
|
try {
|
|
41
41
|
handler(event);
|
|
42
42
|
} finally {
|
|
43
|
-
isSyncing = false;
|
|
43
|
+
this.isSyncing = false;
|
|
44
44
|
}
|
|
45
45
|
};
|
|
46
46
|
|
|
@@ -109,8 +109,16 @@ export class MergeEditorScrollSync implements Disposable {
|
|
|
109
109
|
}
|
|
110
110
|
|
|
111
111
|
update(): void {
|
|
112
|
-
|
|
113
|
-
|
|
112
|
+
if (this.isSyncing) {
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
this.isSyncing = true;
|
|
116
|
+
try {
|
|
117
|
+
const scrollTop = this.mergeEditor.side1Pane.editor.getControl().getScrollTop();
|
|
118
|
+
this.handleSide1ScrollTopChanged(scrollTop);
|
|
119
|
+
} finally {
|
|
120
|
+
this.isSyncing = false;
|
|
121
|
+
}
|
|
114
122
|
}
|
|
115
123
|
|
|
116
124
|
protected handleSide1ScrollTopChanged(scrollTop: number): void {
|
|
@@ -121,13 +129,15 @@ export class MergeEditorScrollSync implements Disposable {
|
|
|
121
129
|
if (shouldAlignResult) {
|
|
122
130
|
resultPane.editor.getControl().setScrollTop(scrollTop);
|
|
123
131
|
} else {
|
|
124
|
-
this.
|
|
132
|
+
const targetScrollTop = this.computeTargetScrollTop(side1Pane.editor, resultPane.editor, model.side1ToResultLineRangeMap);
|
|
133
|
+
resultPane.editor.getControl().setScrollTop(targetScrollTop);
|
|
125
134
|
}
|
|
126
135
|
|
|
127
136
|
if (shouldAlignBase) {
|
|
128
137
|
basePane.editor.getControl().setScrollTop(scrollTop);
|
|
129
138
|
} else {
|
|
130
|
-
this.
|
|
139
|
+
const targetScrollTop = this.computeTargetScrollTop(side1Pane.editor, basePane.editor, model.side1ToBaseLineRangeMap);
|
|
140
|
+
basePane.editor.getControl().setScrollTop(targetScrollTop);
|
|
131
141
|
}
|
|
132
142
|
}
|
|
133
143
|
|
|
@@ -139,48 +149,64 @@ export class MergeEditorScrollSync implements Disposable {
|
|
|
139
149
|
if (shouldAlignResult) {
|
|
140
150
|
resultPane.editor.getControl().setScrollTop(scrollTop);
|
|
141
151
|
} else {
|
|
142
|
-
this.
|
|
152
|
+
const targetScrollTop = this.computeTargetScrollTop(side2Pane.editor, resultPane.editor, model.side2ToResultLineRangeMap);
|
|
153
|
+
resultPane.editor.getControl().setScrollTop(targetScrollTop);
|
|
143
154
|
}
|
|
144
155
|
|
|
145
156
|
if (shouldAlignBase) {
|
|
146
157
|
basePane.editor.getControl().setScrollTop(scrollTop);
|
|
147
158
|
} else {
|
|
148
|
-
this.
|
|
159
|
+
const targetScrollTop = this.computeTargetScrollTop(side2Pane.editor, basePane.editor, model.side2ToBaseLineRangeMap);
|
|
160
|
+
basePane.editor.getControl().setScrollTop(targetScrollTop);
|
|
149
161
|
}
|
|
150
162
|
}
|
|
151
163
|
|
|
152
164
|
protected handleResultScrollTopChanged(scrollTop: number): void {
|
|
153
|
-
const { side1Pane, side2Pane, resultPane, basePane, shouldAlignResult, model } = this.mergeEditor;
|
|
165
|
+
const { side1Pane, side2Pane, resultPane, basePane, shouldAlignBase, shouldAlignResult, model } = this.mergeEditor;
|
|
154
166
|
|
|
155
167
|
if (shouldAlignResult) {
|
|
156
168
|
side1Pane.editor.getControl().setScrollTop(scrollTop);
|
|
157
169
|
side2Pane.editor.getControl().setScrollTop(scrollTop);
|
|
158
170
|
} else {
|
|
159
|
-
this.
|
|
160
|
-
|
|
171
|
+
const targetScrollTop = this.computeTargetScrollTop(resultPane.editor, side1Pane.editor, model.resultToSide1LineRangeMap);
|
|
172
|
+
side1Pane.editor.getControl().setScrollTop(targetScrollTop);
|
|
173
|
+
side2Pane.editor.getControl().setScrollTop(targetScrollTop);
|
|
174
|
+
if (shouldAlignBase) {
|
|
175
|
+
basePane.editor.getControl().setScrollTop(targetScrollTop);
|
|
176
|
+
}
|
|
161
177
|
}
|
|
162
178
|
|
|
163
|
-
|
|
179
|
+
if (!shouldAlignBase) {
|
|
180
|
+
const targetScrollTop = this.computeTargetScrollTop(resultPane.editor, basePane.editor, model.resultToBaseLineRangeMap);
|
|
181
|
+
basePane.editor.getControl().setScrollTop(targetScrollTop);
|
|
182
|
+
}
|
|
164
183
|
}
|
|
165
184
|
|
|
166
185
|
protected handleBaseScrollTopChanged(scrollTop: number): void {
|
|
167
|
-
const { side1Pane, side2Pane, resultPane, basePane, shouldAlignBase, model } = this.mergeEditor;
|
|
186
|
+
const { side1Pane, side2Pane, resultPane, basePane, shouldAlignBase, shouldAlignResult, model } = this.mergeEditor;
|
|
168
187
|
|
|
169
188
|
if (shouldAlignBase) {
|
|
170
189
|
side1Pane.editor.getControl().setScrollTop(scrollTop);
|
|
171
190
|
side2Pane.editor.getControl().setScrollTop(scrollTop);
|
|
172
191
|
} else {
|
|
173
|
-
this.
|
|
174
|
-
|
|
192
|
+
const targetScrollTop = this.computeTargetScrollTop(basePane.editor, side1Pane.editor, model.baseToSide1LineRangeMap);
|
|
193
|
+
side1Pane.editor.getControl().setScrollTop(targetScrollTop);
|
|
194
|
+
side2Pane.editor.getControl().setScrollTop(targetScrollTop);
|
|
195
|
+
if (shouldAlignResult) {
|
|
196
|
+
resultPane.editor.getControl().setScrollTop(targetScrollTop);
|
|
197
|
+
}
|
|
175
198
|
}
|
|
176
199
|
|
|
177
|
-
|
|
200
|
+
if (!shouldAlignResult) {
|
|
201
|
+
const targetScrollTop = this.computeTargetScrollTop(basePane.editor, resultPane.editor, model.baseToResultLineRangeMap);
|
|
202
|
+
resultPane.editor.getControl().setScrollTop(targetScrollTop);
|
|
203
|
+
}
|
|
178
204
|
}
|
|
179
205
|
|
|
180
|
-
protected
|
|
206
|
+
protected computeTargetScrollTop(sourceEditor: MonacoEditor, targetEditor: MonacoEditor, lineRangeMap: DocumentLineRangeMap): number {
|
|
181
207
|
const visibleRanges = sourceEditor.getVisibleRanges();
|
|
182
208
|
if (visibleRanges.length === 0) {
|
|
183
|
-
return;
|
|
209
|
+
return 0;
|
|
184
210
|
}
|
|
185
211
|
|
|
186
212
|
const topLineNumber = visibleRanges[0].start.line;
|
|
@@ -210,6 +236,6 @@ export class MergeEditorScrollSync implements Disposable {
|
|
|
210
236
|
const factor = Math.min(sourceEndPx === sourceStartTopPx ? 0 : (scrollTop - sourceStartTopPx) / (sourceEndPx - sourceStartTopPx), 1);
|
|
211
237
|
const targetScrollTop = targetStartTopPx + (targetEndPx - targetStartTopPx) * factor;
|
|
212
238
|
|
|
213
|
-
|
|
239
|
+
return targetScrollTop;
|
|
214
240
|
}
|
|
215
241
|
}
|