Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit 632103f

Browse files
authored
Convert chromium wheel delta to physical pixels on macOS (#49028)
This has been previously done for Safari in Firefox in #35428. I'm not entirely sure since which release, but for past couple of months Chromium seems to be reporting logical pixels during scroll events as well, which now makes scrolling on Chrome / macOs 2x slower. ## Pre-launch Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide] and the [C++, Objective-C, Java style guides]. - [x] I listed at least one issue that this PR fixes in the description above. - [x] I added new tests to check the change I am making or feature I am adding, or the PR is [test-exempt]. See [testing the engine] for instructions on writing and running engine tests. - [x] I updated/added relevant documentation (doc comments with `///`). - [x] I signed the [CLA]. - [x] All existing and new tests are passing. If you need help, consider asking for advice on the #hackers-new channel on [Discord]. <!-- Links --> [Contributor Guide]: https://github.com/flutter/flutter/wiki/Tree-hygiene#overview [Tree Hygiene]: https://github.com/flutter/flutter/wiki/Tree-hygiene [test-exempt]: https://github.com/flutter/flutter/wiki/Tree-hygiene#tests [Flutter Style Guide]: https://github.com/flutter/flutter/wiki/Style-guide-for-Flutter-repo [C++, Objective-C, Java style guides]: https://github.com/flutter/engine/blob/main/CONTRIBUTING.md#style [testing the engine]: https://github.com/flutter/flutter/wiki/Testing-the-engine [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/wiki/Tree-hygiene#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/wiki/Chat
1 parent 3f13c3e commit 632103f

File tree

2 files changed

+2
-49
lines changed

2 files changed

+2
-49
lines changed

lib/web_ui/lib/src/engine/pointer_binding.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -656,7 +656,7 @@ mixin _WheelEventListenerMixin on _BaseAdapter {
656656
deltaX *= _view.physicalSize.width;
657657
deltaY *= _view.physicalSize.height;
658658
case domDeltaPixel:
659-
if (operatingSystem == OperatingSystem.macOs && (isSafari || isFirefox)) {
659+
if (operatingSystem == OperatingSystem.macOs) {
660660
// Safari and Firefox seem to report delta in logical pixels while
661661
// Chrome uses physical pixels.
662662
deltaX *= _view.devicePixelRatio;

lib/web_ui/test/engine/pointer_binding_test.dart

Lines changed: 1 addition & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -815,13 +815,12 @@ void testMain() {
815815
);
816816

817817
test(
818-
'converts scroll delta to physical pixels (Firefox)',
818+
'converts scroll delta to physical pixels (macOs)',
819819
() {
820820
final _ButtonedEventMixin context = _PointerEventContext();
821821

822822
const double dpi = 2.5;
823823
debugOperatingSystemOverride = OperatingSystem.macOs;
824-
debugBrowserEngineOverride = BrowserEngine.firefox;
825824
EngineFlutterDisplay.instance.debugOverrideDevicePixelRatio(dpi);
826825

827826
final List<ui.PointerDataPacket> packets = <ui.PointerDataPacket>[];
@@ -854,52 +853,6 @@ void testMain() {
854853
expect(packets[0].data[0].scrollDeltaY, equals(10.0 * dpi));
855854

856855
EngineFlutterDisplay.instance.debugOverrideDevicePixelRatio(1.0);
857-
debugOperatingSystemOverride = null;
858-
debugBrowserEngineOverride = null;
859-
},
860-
);
861-
862-
test(
863-
'scroll delta are already in physical pixels (Chrome)',
864-
() {
865-
final _ButtonedEventMixin context = _PointerEventContext();
866-
867-
const double dpi = 2.5;
868-
debugOperatingSystemOverride = OperatingSystem.macOs;
869-
debugBrowserEngineOverride = BrowserEngine.blink;
870-
EngineFlutterDisplay.instance.debugOverrideDevicePixelRatio(dpi);
871-
872-
final List<ui.PointerDataPacket> packets = <ui.PointerDataPacket>[];
873-
ui.PlatformDispatcher.instance.onPointerDataPacket = (ui.PointerDataPacket packet) {
874-
packets.add(packet);
875-
};
876-
877-
rootElement.dispatchEvent(context.wheel(
878-
buttons: 0,
879-
clientX: 10,
880-
clientY: 10,
881-
deltaX: 10,
882-
deltaY: 10,
883-
));
884-
885-
expect(packets, hasLength(1));
886-
887-
888-
// An add will be synthesized.
889-
expect(packets[0].data, hasLength(2));
890-
expect(packets[0].data[0].change, equals(ui.PointerChange.add));
891-
// Scroll deltas should NOT be multiplied by `dpi`.
892-
expect(packets[0].data[0].scrollDeltaX, equals(10.0));
893-
expect(packets[0].data[0].scrollDeltaY, equals(10.0));
894-
895-
expect(packets[0].data[1].change, equals(ui.PointerChange.hover));
896-
expect(packets[0].data[1].signalKind, equals(ui.PointerSignalKind.scroll));
897-
// Scroll deltas should NOT be multiplied by `dpi`.
898-
expect(packets[0].data[0].scrollDeltaX, equals(10.0));
899-
expect(packets[0].data[0].scrollDeltaY, equals(10.0));
900-
901-
EngineFlutterDisplay.instance.debugOverrideDevicePixelRatio(1.0);
902-
debugOperatingSystemOverride = null;
903856
debugBrowserEngineOverride = null;
904857
},
905858
);

0 commit comments

Comments
 (0)