Add discrete scale pointer signal (flutter/engine#36342)

This commit is contained in:
Callum Moffat
2022-09-27 11:30:14 -04:00
committed by GitHub
parent 32774c7671
commit b92b9bdb6a
9 changed files with 15 additions and 2 deletions

View File

@@ -130,6 +130,9 @@ enum PointerSignalKind {
/// A pointer-generated scroll-inertia cancel.
scrollInertiaCancel,
/// A pointer-generated scale event (e.g. trackpad pinch).
scale,
/// An unknown pointer signal kind.
unknown
}

View File

@@ -61,6 +61,7 @@ struct alignas(8) PointerData {
kNone,
kScroll,
kScrollInertiaCancel,
kScale,
};
int64_t embedder_id;

View File

@@ -298,7 +298,8 @@ void PointerDataPacketConverter::ConvertPointerData(
} else {
switch (pointer_data.signal_kind) {
case PointerData::SignalKind::kScroll:
case PointerData::SignalKind::kScrollInertiaCancel: {
case PointerData::SignalKind::kScrollInertiaCancel:
case PointerData::SignalKind::kScale: {
// Makes sure we have an existing pointer
auto iter = states_.find(pointer_data.device);
PointerState state;

View File

@@ -558,6 +558,7 @@ TEST(PointerDataPacketConverterTest, CanConvertPointerSignals) {
PointerData::SignalKind signal_kinds[] = {
PointerData::SignalKind::kScroll,
PointerData::SignalKind::kScrollInertiaCancel,
PointerData::SignalKind::kScale,
};
for (const PointerData::SignalKind& kind : signal_kinds) {
PointerDataPacketConverter converter;

View File

@@ -30,6 +30,7 @@ enum PointerSignalKind {
none,
scroll,
scrollInertiaCancel,
scale,
unknown
}

View File

@@ -624,6 +624,7 @@ class PointerDataConverter {
switch (signalKind) {
case ui.PointerSignalKind.scroll:
case ui.PointerSignalKind.scrollInertiaCancel:
case ui.PointerSignalKind.scale:
final bool alreadyAdded = _pointers.containsKey(device);
_ensureStateForPointer(device, physicalX, physicalY);
if (!alreadyAdded) {

View File

@@ -65,13 +65,15 @@ public class AndroidTouchProcessor {
PointerSignalKind.NONE,
PointerSignalKind.SCROLL,
PointerSignalKind.SCROLL_INERTIA_CANCEL,
PointerSignalKind.SCALE,
PointerSignalKind.UNKNOWN
})
public @interface PointerSignalKind {
int NONE = 0;
int SCROLL = 1;
int SCROLL_INERTIA_CANCEL = 2;
int UNKNOWN = 3;
int SCALE = 3;
int UNKNOWN = 4;
}
// Must match the unpacking code in hooks.dart.

View File

@@ -1924,6 +1924,8 @@ inline flutter::PointerData::SignalKind ToPointerDataSignalKind(
return flutter::PointerData::SignalKind::kScroll;
case kFlutterPointerSignalKindScrollInertiaCancel:
return flutter::PointerData::SignalKind::kScrollInertiaCancel;
case kFlutterPointerSignalKindScale:
return flutter::PointerData::SignalKind::kScale;
}
return flutter::PointerData::SignalKind::kNone;
}

View File

@@ -875,6 +875,7 @@ typedef enum {
kFlutterPointerSignalKindNone,
kFlutterPointerSignalKindScroll,
kFlutterPointerSignalKindScrollInertiaCancel,
kFlutterPointerSignalKindScale,
} FlutterPointerSignalKind;
typedef struct {