Ensure that pointercancel events have a zeroed location

Summary:
Changelog: [Internal] - Ensure pointercancel events have zeroed location properties

When looking at the pointercancel test the remaining assertion failures were from the expectation that pointercancel events should be reported at [0, 0]. This diff ensures this occurs.

Reviewed By: NickGerleman

Differential Revision: D43886424

fbshipit-source-id: dda37153bd077500599f35db99f114c1a0823120
This commit is contained in:
Vincent Riemer
2023-03-17 15:38:22 -07:00
committed by Facebook GitHub Bot
parent bfee3d9d8d
commit 728e8a0177
@@ -263,14 +263,27 @@ static void UpdatePointerEventModifierFlags(PointerEvent &event, UIKeyModifierFl
}
}
static PointerEvent CreatePointerEventFromActivePointer(ActivePointer activePointer, RCTPointerEventType eventType)
static PointerEvent CreatePointerEventFromActivePointer(
ActivePointer activePointer,
RCTPointerEventType eventType,
UIView *rootComponentView)
{
PointerEvent event = {};
event.pointerId = activePointer.identifier;
event.pointerType = PointerTypeCStringFromUITouchType(activePointer.touchType);
event.clientPoint = RCTPointFromCGPoint(activePointer.clientPoint);
event.screenPoint = RCTPointFromCGPoint(activePointer.screenPoint);
event.offsetPoint = RCTPointFromCGPoint(activePointer.offsetPoint);
if (eventType == RCTPointerEventTypeCancel) {
event.clientPoint = RCTPointFromCGPoint(CGPointZero);
event.screenPoint =
RCTPointFromCGPoint([rootComponentView convertPoint:CGPointZero
toCoordinateSpace:rootComponentView.window.screen.coordinateSpace]);
event.offsetPoint = RCTPointFromCGPoint([rootComponentView convertPoint:CGPointZero
toView:activePointer.componentView]);
} else {
event.clientPoint = RCTPointFromCGPoint(activePointer.clientPoint);
event.screenPoint = RCTPointFromCGPoint(activePointer.screenPoint);
event.offsetPoint = RCTPointFromCGPoint(activePointer.offsetPoint);
}
event.pressure = activePointer.force;
if (@available(iOS 13.4, *)) {
@@ -608,7 +621,7 @@ RCT_NOT_IMPLEMENTED(-(instancetype)initWithTarget : (id)target action : (SEL)act
- (void)_dispatchActivePointers:(std::vector<ActivePointer>)activePointers eventType:(RCTPointerEventType)eventType
{
for (const auto &activePointer : activePointers) {
PointerEvent pointerEvent = CreatePointerEventFromActivePointer(activePointer, eventType);
PointerEvent pointerEvent = CreatePointerEventFromActivePointer(activePointer, eventType, _rootComponentView);
NSOrderedSet<RCTReactTaggedView *> *eventPathViews = [self handleIncomingPointerEvent:pointerEvent
onView:activePointer.componentView];