flutter_flutter/lib/ui/window/pointer_data.h
Kaushik Iska 110a57983b
Track motion events for reuse post gesture disambiguation (#19484)
This change makes it so that we track all the motion events encountered by `FlutterView` and all of its subviews in the `MotionEventTracker` class, indexed by a unique `MotionEventId`. This identifier is then passed to the Flutter framework as seen in https://github.com/flutter/flutter/pull/60930. Once the gestures take part in gesture disambiguation and are sent back to the engine, we look-up the original motion event using the `MotionEventId` and dispatch it to the platform.

Bug: https://github.com/flutter/flutter/issues/58837
2020-07-06 22:22:37 -07:00

97 lines
2.2 KiB
C++

// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef FLUTTER_LIB_UI_WINDOW_POINTER_DATA_H_
#define FLUTTER_LIB_UI_WINDOW_POINTER_DATA_H_
#include <stdint.h>
namespace flutter {
// If this value changes, update the pointer data unpacking code in hooks.dart.
static constexpr int kPointerDataFieldCount = 29;
static constexpr int kBytesPerField = sizeof(int64_t);
// Must match the button constants in events.dart.
enum PointerButtonMouse : int64_t {
kPointerButtonMousePrimary = 1 << 0,
kPointerButtonMouseSecondary = 1 << 1,
kPointerButtonMouseMiddle = 1 << 2,
kPointerButtonMouseBack = 1 << 3,
kPointerButtonMouseForward = 1 << 4,
};
enum PointerButtonTouch : int64_t {
kPointerButtonTouchContact = 1 << 0,
};
enum PointerButtonStylus : int64_t {
kPointerButtonStylusContact = 1 << 0,
kPointerButtonStylusPrimary = 1 << 1,
kPointerButtonStylusSecondary = 1 << 2,
};
// This structure is unpacked by hooks.dart.
struct alignas(8) PointerData {
// Must match the PointerChange enum in pointer.dart.
enum class Change : int64_t {
kCancel,
kAdd,
kRemove,
kHover,
kDown,
kMove,
kUp,
};
// Must match the PointerDeviceKind enum in pointer.dart.
enum class DeviceKind : int64_t {
kTouch,
kMouse,
kStylus,
kInvertedStylus,
};
// Must match the PointerSignalKind enum in pointer.dart.
enum class SignalKind : int64_t {
kNone,
kScroll,
};
int64_t embedder_id;
int64_t time_stamp;
Change change;
DeviceKind kind;
SignalKind signal_kind;
int64_t device;
int64_t pointer_identifier;
double physical_x;
double physical_y;
double physical_delta_x;
double physical_delta_y;
int64_t buttons;
int64_t obscured;
int64_t synthesized;
double pressure;
double pressure_min;
double pressure_max;
double distance;
double distance_max;
double size;
double radius_major;
double radius_minor;
double radius_min;
double radius_max;
double orientation;
double tilt;
int64_t platformData;
double scroll_delta_x;
double scroll_delta_y;
void Clear();
};
} // namespace flutter
#endif // FLUTTER_LIB_UI_WINDOW_POINTER_DATA_H_