Unverified Commit 13101c1a authored by Tong Mu's avatar Tong Mu Committed by GitHub

Touching the screen adds `0x01` to buttons (#30457)

* Add constants `kPrimaryButton`, `kTouchContact` and `kStylusContact`
* PointerDownEvent and PointerMoveEvent will always set the 0x01 bit on buttons
parent 74ee010b
...@@ -207,7 +207,8 @@ class PointerEventConverter { ...@@ -207,7 +207,8 @@ class PointerEventConverter {
kind: kind, kind: kind,
device: datum.device, device: datum.device,
position: position, position: position,
buttons: datum.buttons, // TODO(tongmu): Move button patching to embedder, https://github.com/flutter/flutter/issues/30454
buttons: datum.buttons | kPrimaryButton,
obscured: datum.obscured, obscured: datum.obscured,
pressure: datum.pressure, pressure: datum.pressure,
pressureMin: datum.pressureMin, pressureMin: datum.pressureMin,
...@@ -236,7 +237,8 @@ class PointerEventConverter { ...@@ -236,7 +237,8 @@ class PointerEventConverter {
device: datum.device, device: datum.device,
position: position, position: position,
delta: state.deltaTo(position), delta: state.deltaTo(position),
buttons: datum.buttons, // TODO(tongmu): Move button patching to embedder, https://github.com/flutter/flutter/issues/30454
buttons: datum.buttons | kPrimaryButton,
obscured: datum.obscured, obscured: datum.obscured,
pressure: datum.pressure, pressure: datum.pressure,
pressureMin: datum.pressureMin, pressureMin: datum.pressureMin,
...@@ -271,7 +273,8 @@ class PointerEventConverter { ...@@ -271,7 +273,8 @@ class PointerEventConverter {
device: datum.device, device: datum.device,
position: position, position: position,
delta: state.deltaTo(position), delta: state.deltaTo(position),
buttons: datum.buttons, // TODO(tongmu): Move button patching to embedder, https://github.com/flutter/flutter/issues/30454
buttons: datum.buttons | kPrimaryButton,
obscured: datum.obscured, obscured: datum.obscured,
pressure: datum.pressure, pressure: datum.pressure,
pressureMin: datum.pressureMin, pressureMin: datum.pressureMin,
...@@ -418,7 +421,8 @@ class PointerEventConverter { ...@@ -418,7 +421,8 @@ class PointerEventConverter {
device: datum.device, device: datum.device,
position: position, position: position,
delta: state.deltaTo(position), delta: state.deltaTo(position),
buttons: datum.buttons, // TODO(tongmu): Move button patching to embedder, https://github.com/flutter/flutter/issues/30454
buttons: datum.buttons | kPrimaryButton,
obscured: datum.obscured, obscured: datum.obscured,
pressure: datum.pressure, pressure: datum.pressure,
pressureMin: datum.pressureMin, pressureMin: datum.pressureMin,
......
...@@ -8,11 +8,21 @@ import 'package:flutter/foundation.dart'; ...@@ -8,11 +8,21 @@ import 'package:flutter/foundation.dart';
export 'dart:ui' show Offset, PointerDeviceKind; export 'dart:ui' show Offset, PointerDeviceKind;
/// The bit of [PointerEvent.buttons] that corresponds to a unified behavior of
/// "basic operation".
///
/// It is equivalent to:
///
/// * [kTouchContact]: The pointer contacts the touch screen.
/// * [kStylusContact]: The stylus contacts the screen.
/// * [kPrimaryMouseButton]: The primary mouse button.
const int kPrimaryButton = 0x01;
/// The bit of [PointerEvent.buttons] that corresponds to the primary mouse button. /// The bit of [PointerEvent.buttons] that corresponds to the primary mouse button.
/// ///
/// The primary mouse button is typically the left button on the top of the /// The primary mouse button is typically the left button on the top of the
/// mouse but can be reconfigured to be a different physical button. /// mouse but can be reconfigured to be a different physical button.
const int kPrimaryMouseButton = 0x01; const int kPrimaryMouseButton = kPrimaryButton;
/// The bit of [PointerEvent.buttons] that corresponds to the secondary mouse button. /// The bit of [PointerEvent.buttons] that corresponds to the secondary mouse button.
/// ///
...@@ -20,6 +30,10 @@ const int kPrimaryMouseButton = 0x01; ...@@ -20,6 +30,10 @@ const int kPrimaryMouseButton = 0x01;
/// mouse but can be reconfigured to be a different physical button. /// mouse but can be reconfigured to be a different physical button.
const int kSecondaryMouseButton = 0x02; const int kSecondaryMouseButton = 0x02;
/// The bit of [PointerEvent.buttons] that corresponds to when a stylus
/// contacting the screen.
const int kStylusContact = kPrimaryButton;
/// The bit of [PointerEvent.buttons] that corresponds to the primary stylus button. /// The bit of [PointerEvent.buttons] that corresponds to the primary stylus button.
/// ///
/// The primary stylus button is typically the top of the stylus and near the /// The primary stylus button is typically the top of the stylus and near the
...@@ -51,6 +65,10 @@ const int kBackMouseButton = 0x08; ...@@ -51,6 +65,10 @@ const int kBackMouseButton = 0x08;
/// be reconfigured to be a different physical button. /// be reconfigured to be a different physical button.
const int kForwardMouseButton = 0x10; const int kForwardMouseButton = 0x10;
/// The bit of [PointerEvent.buttons] that corresponds to the pointer contacting
/// a touch screen.
const int kTouchContact = kPrimaryButton;
/// The bit of [PointerEvent.buttons] that corresponds to the nth mouse button. /// The bit of [PointerEvent.buttons] that corresponds to the nth mouse button.
/// ///
/// The `number` argument can be at most 62. /// The `number` argument can be at most 62.
......
...@@ -47,6 +47,7 @@ void main() { ...@@ -47,6 +47,7 @@ void main() {
ui.window.onPointerDataPacket(packet); ui.window.onPointerDataPacket(packet);
expect(events.length, 2); expect(events.length, 2);
expect(events[0].runtimeType, equals(PointerDownEvent)); expect(events[0].runtimeType, equals(PointerDownEvent));
expect(events[0].buttons, equals(1));
expect(events[1].runtimeType, equals(PointerUpEvent)); expect(events[1].runtimeType, equals(PointerUpEvent));
}); });
...@@ -65,7 +66,9 @@ void main() { ...@@ -65,7 +66,9 @@ void main() {
ui.window.onPointerDataPacket(packet); ui.window.onPointerDataPacket(packet);
expect(events.length, 3); expect(events.length, 3);
expect(events[0].runtimeType, equals(PointerDownEvent)); expect(events[0].runtimeType, equals(PointerDownEvent));
expect(events[0].buttons, equals(1));
expect(events[1].runtimeType, equals(PointerMoveEvent)); expect(events[1].runtimeType, equals(PointerMoveEvent));
expect(events[1].buttons, equals(1));
expect(events[2].runtimeType, equals(PointerUpEvent)); expect(events[2].runtimeType, equals(PointerUpEvent));
}); });
...@@ -119,7 +122,9 @@ void main() { ...@@ -119,7 +122,9 @@ void main() {
ui.window.onPointerDataPacket(packet); ui.window.onPointerDataPacket(packet);
expect(events.length, 3); expect(events.length, 3);
expect(events[0].runtimeType, equals(PointerDownEvent)); expect(events[0].runtimeType, equals(PointerDownEvent));
expect(events[0].buttons, equals(1));
expect(events[1].runtimeType, equals(PointerMoveEvent)); expect(events[1].runtimeType, equals(PointerMoveEvent));
expect(events[1].buttons, equals(1));
expect(events[1].delta, equals(const Offset(9.0, 12.0))); expect(events[1].delta, equals(const Offset(9.0, 12.0)));
expect(events[2].runtimeType, equals(PointerUpEvent)); expect(events[2].runtimeType, equals(PointerUpEvent));
}); });
...@@ -138,6 +143,7 @@ void main() { ...@@ -138,6 +143,7 @@ void main() {
ui.window.onPointerDataPacket(packet); ui.window.onPointerDataPacket(packet);
expect(events.length, 2); expect(events.length, 2);
expect(events[0].runtimeType, equals(PointerDownEvent)); expect(events[0].runtimeType, equals(PointerDownEvent));
expect(events[0].buttons, equals(1));
expect(events[1].runtimeType, equals(PointerCancelEvent)); expect(events[1].runtimeType, equals(PointerCancelEvent));
}); });
...@@ -159,6 +165,7 @@ void main() { ...@@ -159,6 +165,7 @@ void main() {
ui.window.onPointerDataPacket(packet); ui.window.onPointerDataPacket(packet);
expect(events.length, 2); expect(events.length, 2);
expect(events[0].runtimeType, equals(PointerDownEvent)); expect(events[0].runtimeType, equals(PointerDownEvent));
expect(events[0].buttons, equals(1));
expect(events[1].runtimeType, equals(PointerCancelEvent)); expect(events[1].runtimeType, equals(PointerCancelEvent));
}); });
...@@ -200,6 +207,7 @@ void main() { ...@@ -200,6 +207,7 @@ void main() {
expect(events[1].runtimeType, equals(PointerHoverEvent)); expect(events[1].runtimeType, equals(PointerHoverEvent));
expect(events[1].delta, equals(const Offset(5.0, 7.0))); expect(events[1].delta, equals(const Offset(5.0, 7.0)));
expect(events[2].runtimeType, equals(PointerDownEvent)); expect(events[2].runtimeType, equals(PointerDownEvent));
expect(events[2].buttons, equals(1));
expect(events[3].runtimeType, equals(PointerCancelEvent)); expect(events[3].runtimeType, equals(PointerCancelEvent));
expect(events[4].runtimeType, equals(PointerHoverEvent)); expect(events[4].runtimeType, equals(PointerHoverEvent));
expect(events[5].runtimeType, equals(PointerRemovedEvent)); expect(events[5].runtimeType, equals(PointerRemovedEvent));
...@@ -246,7 +254,9 @@ void main() { ...@@ -246,7 +254,9 @@ void main() {
expect(events[2].runtimeType, equals(PointerScrollEvent)); expect(events[2].runtimeType, equals(PointerScrollEvent));
expect(events[3].runtimeType, equals(PointerHoverEvent)); expect(events[3].runtimeType, equals(PointerHoverEvent));
expect(events[4].runtimeType, equals(PointerDownEvent)); expect(events[4].runtimeType, equals(PointerDownEvent));
expect(events[4].buttons, equals(1));
expect(events[5].runtimeType, equals(PointerMoveEvent)); expect(events[5].runtimeType, equals(PointerMoveEvent));
expect(events[5].buttons, equals(1));
expect(events[5].delta, equals(unexpectedOffset)); expect(events[5].delta, equals(unexpectedOffset));
expect(events[6].runtimeType, equals(PointerScrollEvent)); expect(events[6].runtimeType, equals(PointerScrollEvent));
}); });
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment