Change:
On a MacBook Pro, when I have enabled, the pinch-zooming is way too sensitive – I only move my fingers like 2-3 mm and the zoom ratio goes all the way up or down. For scrolling, there's a setting but I don't think anything similar exists for editor zooming; the default value is way too eager. Tried on these versions: Code 1.33.0 (, 2019-04-04T15:11:32.076Z) Code - Insiders 1.34.0-insider (, 2019-04-10T05:14:23.598Z) OS version: Darwin x64 18.5.0 Does this issue occur when all extensions are disabled?: Yes
I have the same problem on my Surface Pro 4.
I too experience this issue on a M1 MBP. Maybe I'm just OCD, but it drives me crazy when I do Cmd+Mouse/Track Wheel and the editor zoom goes to almost max.
I also experience this in a Windows laptop with a Precison touchpad. Both pinch to zoom and zooming with Ctrl + scroll gesture is too sensitive compared to, for example, web browsers
Tried this on my surface laptop and the editor still appears to be too sensitive to my pinching on the mouse pad. Is there a settig I should enable for the sensitivity? And the scrolling appears to "bounce back" into place when using the mouse pad. Is this expected?
Tried on my macbook pro with the mouse pad. Compared to how it was before, I feel that the sensitivity is fine. As the issue indicates, it would be great to be able to configure the sensitivity.

Discussion:
return (score <= 0.5); } <ins> public acceptStandardWheelEvent(e: StandardWheelEvent): void { const osZoomFactor = window.devicePixelRatio / getZoomFactor(); if (platform.isWindows || platform.isLinux) { // On Windows and Linux, the incoming delta events are multiplied with the OS zoom factor. // The OS zoom factor can be reverse engineered by using the device pixel ratio and the configured zoom factor into account. this.accept(Date.now(), e.deltaX / osZoomFactor, e.deltaY / osZoomFactor); } else { this.accept(Date.now(), e.deltaX, e.deltaY); } } </ins> public accept(timestamp: number, deltaX: number, deltaY: number): void { const item = new MouseWheelClassifierItem(timestamp, deltaX, deltaY); item.score = this._computeScore(item);

const classifier = MouseWheelClassifier.INSTANCE; if (SCROLL_WHEEL_SMOOTH_SCROLL_ENABLED) { <del> const osZoomFactor = window.devicePixelRatio / getZoomFactor(); if (platform.isWindows || platform.isLinux) { // On Windows and Linux, the incoming delta events are multiplied with the OS zoom factor. // The OS zoom factor can be reverse engineered by using the device pixel ratio and the configured zoom factor into account. classifier.accept(Date.now(), e.deltaX / osZoomFactor, e.deltaY / osZoomFactor); } else { classifier.accept(Date.now(), e.deltaX, e.deltaY); } </del> <ins> classifier.acceptStandardWheelEvent(e); </ins> } // console.log(`${Date.now()}, ${e.deltaY}, ${e.deltaX}`);

import { ViewEventHandler } from 'vs/editor/common/viewEventHandler'; import { EditorOption } from 'vs/editor/common/config/editorOptions'; import { NavigationCommandRevealType } from 'vs/editor/browser/coreCommands'; <ins> import { MouseWheelClassifier } from 'vs/base/browser/ui/scrollbar/scrollableElement'; </ins> export interface IPointerHandlerHelper { viewDomNode: HTMLElement;

this._mouseDownOperation.onPointerUp(); })); this._register(mouseEvents.onMouseDown(this.viewHelper.viewDomNode, (e) => this._onMouseDown(e, capturePointerId))); <ins> this._setupMouseWheelZoomListener(); this._context.addEventHandler(this); } private _setupMouseWheelZoomListener(): void { const classifier = MouseWheelClassifier.INSTANCE; let prevMouseWheelTime = 0; let gestureStartZoomLevel = EditorZoom.getZoomLevel(); let gestureHasZoomModifiers = false; let gestureAccumulatedDelta = 0; </ins> const onMouseWheel = (browserEvent: IMouseWheelEvent) => { this.viewController.emitMouseWheel(browserEvent);

if (!this._context.configuration.options.get(EditorOption.mouseWheelZoom)) { return; } const e = new StandardWheelEvent(browserEvent); <del> const doMouseWheelZoom = ( </del> <ins> classifier.acceptStandardWheelEvent(e); if (classifier.isPhysicalMouseWheel()) { if (hasMouseWheelZoomModifiers(browserEvent)) { const zoomLevel: number = EditorZoom.getZoomLevel(); const delta = e.deltaY > 0 ? 1 : -1; EditorZoom.setZoomLevel(zoomLevel + delta); e.preventDefault(); e.stopPropagation(); } } else { // we consider mousewheel events that occur within 50ms of each other to be part of the same gesture // we don't want to consider mouse wheel events where ctrl/cmd is pressed during the inertia phase // we also want to accumulate deltaY values from the same gesture and use that to set the zoom level if (Date.now() - prevMouseWheelTime > 50) { // reset if more than 50ms have passed gestureStartZoomLevel = EditorZoom.getZoomLevel(); gestureHasZoomModifiers = hasMouseWheelZoomModifiers(browserEvent); gestureAccumulatedDelta = 0; } prevMouseWheelTime = Date.now(); gestureAccumulatedDelta += e.deltaY; if (gestureHasZoomModifiers) { EditorZoom.setZoomLevel(gestureStartZoomLevel + gestureAccumulatedDelta / 5); e.preventDefault(); e.stopPropagation(); } } }; this._register(dom.addDisposableListener(this.viewHelper.viewDomNode, dom.EventType.MOUSE_WHEEL, onMouseWheel, { capture: true, passive: false })); function hasMouseWheelZoomModifiers(browserEvent: IMouseWheelEvent): boolean { return ( </ins> platform.isMacintosh // on macOS we support cmd + two fingers scroll (`metaKey` set) // and also the two fingers pinch gesture (`ctrKey` set) ? ((browserEvent.metaKey || browserEvent.ctrlKey) && !browserEvent.shiftKey && !browserEvent.altKey) : (browserEvent.ctrlKey && !browserEvent.metaKey && !browserEvent.shiftKey && !browserEvent.altKey) ); <del> if (doMouseWheelZoom) { const zoomLevel: number = EditorZoom.getZoomLevel(); const delta = e.deltaY > 0 ? 1 : -1; EditorZoom.setZoomLevel(zoomLevel + delta); e.preventDefault(); e.stopPropagation(); } }; this._register(dom.addDisposableListener(this.viewHelper.viewDomNode, dom.EventType.MOUSE_WHEEL, onMouseWheel, { capture: true, passive: false })); this._context.addEventHandler(this); </del> <ins> } </ins> } public override dispose(): void {