Skip to content

Commit d5b7269

Browse files
authored
[web] Enable Control+MouseWheel browser zoom (flutter#22285)
1 parent c0f7e8a commit d5b7269

File tree

1 file changed

+25
-16
lines changed

1 file changed

+25
-16
lines changed

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

Lines changed: 25 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -290,6 +290,29 @@ mixin _WheelEventListenerMixin on _BaseAdapter {
290290
);
291291
}
292292

293+
void _handleWheelEvent(
294+
html.Event e, void Function(Iterable<ui.PointerData>) sink) {
295+
assert(e is html.WheelEvent);
296+
final html.WheelEvent event = e as html.WheelEvent;
297+
if (_debugLogPointerEvents) {
298+
print(event.type);
299+
}
300+
if (event.getModifierState('Control') &&
301+
operatingSystem != OperatingSystem.macOs &&
302+
operatingSystem != OperatingSystem.iOs) {
303+
// Ignore Control+wheel events since the default handler
304+
// will change browser zoom level instead of scrolling.
305+
// The exception is MacOs where Control+wheel will still scroll and zoom
306+
// is not implemented.
307+
return;
308+
}
309+
_callback(_convertWheelEventToPointerData(event));
310+
// Prevent default so mouse wheel event doesn't get converted to
311+
// a scroll event that semantic nodes would process.
312+
//
313+
event.preventDefault();
314+
}
315+
293316
/// For browsers that report delta line instead of pixels such as FireFox
294317
/// compute line height using the default font size.
295318
///
@@ -514,14 +537,7 @@ class _PointerAdapter extends _BaseAdapter with _WheelEventListenerMixin {
514537
});
515538

516539
_addWheelEventListener((html.Event event) {
517-
assert(event is html.WheelEvent);
518-
if (_debugLogPointerEvents) {
519-
print(event.type);
520-
}
521-
_callback(_convertWheelEventToPointerData(event as html.WheelEvent));
522-
// Prevent default so mouse wheel event doesn't get converted to
523-
// a scroll event that semantic nodes would process.
524-
event.preventDefault();
540+
_handleWheelEvent(event, _callback);
525541
});
526542
}
527543

@@ -793,14 +809,7 @@ class _MouseAdapter extends _BaseAdapter with _WheelEventListenerMixin {
793809
}, acceptOutsideGlasspane: true);
794810

795811
_addWheelEventListener((html.Event event) {
796-
assert(event is html.WheelEvent);
797-
if (_debugLogPointerEvents) {
798-
print(event.type);
799-
}
800-
_callback(_convertWheelEventToPointerData(event as html.WheelEvent));
801-
// Prevent default so mouse wheel event doesn't get converted to
802-
// a scroll event that semantic nodes would process.
803-
event.preventDefault();
812+
_handleWheelEvent(event, _callback);
804813
});
805814
}
806815

0 commit comments

Comments
 (0)