Skip to content

Commit 40f2eef

Browse files
authored
Merge pull request #5563 from Tyriar/5489
Fix touch scrolling
2 parents 97e356f + 519b1c5 commit 40f2eef

File tree

1 file changed

+15
-1
lines changed

1 file changed

+15
-1
lines changed

src/browser/Viewport.ts

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,12 @@ import { ViewportConstants } from 'browser/shared/Constants';
88
import { Disposable, toDisposable } from 'vs/base/common/lifecycle';
99
import { IBufferService, ICoreMouseService, IOptionsService } from 'common/services/Services';
1010
import { CoreMouseEventType } from 'common/Types';
11-
import { scheduleAtNextAnimationFrame } from 'vs/base/browser/dom';
11+
import { addDisposableListener, scheduleAtNextAnimationFrame } from 'vs/base/browser/dom';
1212
import { SmoothScrollableElement } from 'vs/base/browser/ui/scrollbar/scrollableElement';
1313
import type { ScrollableElementChangeOptions } from 'vs/base/browser/ui/scrollbar/scrollableElementOptions';
1414
import { Emitter, Event } from 'vs/base/common/event';
1515
import { Scrollable, ScrollbarVisibility, type ScrollEvent } from 'vs/base/common/scrollable';
16+
import { Gesture, EventType as GestureEventType, type GestureEvent } from 'vs/base/browser/touch';
1617

1718
export class Viewport extends Disposable {
1819

@@ -104,6 +105,10 @@ export class Viewport extends Disposable {
104105
this._register(this._bufferService.onScroll(() => this._sync()));
105106

106107
this._register(this._scrollableElement.onScroll(e => this._handleScroll(e)));
108+
109+
// Touch/gesture scrolling support
110+
this._register(Gesture.addTarget(screenElement));
111+
this._register(addDisposableListener(screenElement, GestureEventType.Change, (e: GestureEvent) => this._handleGestureChange(e)));
107112
}
108113

109114
public scrollLines(disp: number): void {
@@ -190,4 +195,13 @@ export class Viewport extends Disposable {
190195
}
191196
this._isHandlingScroll = false;
192197
}
198+
199+
private _handleGestureChange(e: GestureEvent): void {
200+
e.preventDefault();
201+
e.stopPropagation();
202+
const pos = this._scrollableElement.getScrollPosition();
203+
this._scrollableElement.setScrollPosition({
204+
scrollTop: pos.scrollTop - e.translationY
205+
});
206+
}
193207
}

0 commit comments

Comments
 (0)