void TouchBlockState::DispatchEvent(const InputData& aEvent) const { MOZ_ASSERT(aEvent.mInputType == MULTITOUCH_INPUT); mTouchCounter.Update(aEvent.AsMultiTouchInput()); CancelableBlockState::DispatchEvent(aEvent); }
nsEventStatus InputQueue::ReceiveInputEvent(const RefPtr<AsyncPanZoomController>& aTarget, bool aTargetConfirmed, const InputData& aEvent, uint64_t* aOutInputBlockId) { APZThreadUtils::AssertOnControllerThread(); switch (aEvent.mInputType) { case MULTITOUCH_INPUT: { const MultiTouchInput& event = aEvent.AsMultiTouchInput(); return ReceiveTouchInput(aTarget, aTargetConfirmed, event, aOutInputBlockId); } case SCROLLWHEEL_INPUT: { const ScrollWheelInput& event = aEvent.AsScrollWheelInput(); return ReceiveScrollWheelInput(aTarget, aTargetConfirmed, event, aOutInputBlockId); } case PANGESTURE_INPUT: { const PanGestureInput& event = aEvent.AsPanGestureInput(); return ReceivePanGestureInput(aTarget, aTargetConfirmed, event, aOutInputBlockId); } default: // The return value for non-touch input is only used by tests, so just pass // through the return value for now. This can be changed later if needed. // TODO (bug 1098430): we will eventually need to have smarter handling for // non-touch events as well. return aTarget->HandleInputEvent(aEvent, aTarget->GetTransformToThis()); } }
nsEventStatus AsyncPanZoomController::HandleInputEvent(const InputData& aEvent) { nsEventStatus rv = nsEventStatus_eIgnore; if (mGestureEventListener) { nsEventStatus rv = mGestureEventListener->HandleInputEvent(aEvent); if (rv == nsEventStatus_eConsumeNoDefault) return rv; } switch (aEvent.mInputType) { case MULTITOUCH_INPUT: { const MultiTouchInput& multiTouchInput = aEvent.AsMultiTouchInput(); switch (multiTouchInput.mType) { case MultiTouchInput::MULTITOUCH_START: rv = OnTouchStart(multiTouchInput); break; case MultiTouchInput::MULTITOUCH_MOVE: rv = OnTouchMove(multiTouchInput); break; case MultiTouchInput::MULTITOUCH_END: rv = OnTouchEnd(multiTouchInput); break; case MultiTouchInput::MULTITOUCH_CANCEL: rv = OnTouchCancel(multiTouchInput); break; default: NS_WARNING("Unhandled multitouch"); break; } break; } case PINCHGESTURE_INPUT: { const PinchGestureInput& pinchGestureInput = aEvent.AsPinchGestureInput(); switch (pinchGestureInput.mType) { case PinchGestureInput::PINCHGESTURE_START: rv = OnScaleBegin(pinchGestureInput); break; case PinchGestureInput::PINCHGESTURE_SCALE: rv = OnScale(pinchGestureInput); break; case PinchGestureInput::PINCHGESTURE_END: rv = OnScaleEnd(pinchGestureInput); break; default: NS_WARNING("Unhandled pinch gesture"); break; } break; } case TAPGESTURE_INPUT: { const TapGestureInput& tapGestureInput = aEvent.AsTapGestureInput(); switch (tapGestureInput.mType) { case TapGestureInput::TAPGESTURE_LONG: rv = OnLongPress(tapGestureInput); break; case TapGestureInput::TAPGESTURE_UP: rv = OnSingleTapUp(tapGestureInput); break; case TapGestureInput::TAPGESTURE_CONFIRMED: rv = OnSingleTapConfirmed(tapGestureInput); break; case TapGestureInput::TAPGESTURE_DOUBLE: rv = OnDoubleTap(tapGestureInput); break; case TapGestureInput::TAPGESTURE_CANCEL: rv = OnCancelTap(tapGestureInput); break; default: NS_WARNING("Unhandled tap gesture"); break; } break; } default: NS_WARNING("Unhandled input event"); break; } mLastEventTime = aEvent.mTime; return rv; }
nsEventStatus APZCTreeManagerChild::ReceiveInputEvent( InputData& aEvent, ScrollableLayerGuid* aOutTargetGuid, uint64_t* aOutInputBlockId) { switch (aEvent.mInputType) { case MULTITOUCH_INPUT: { MultiTouchInput& event = aEvent.AsMultiTouchInput(); MultiTouchInput processedEvent; nsEventStatus res; SendReceiveMultiTouchInputEvent(event, &res, &processedEvent, aOutTargetGuid, aOutInputBlockId); event = processedEvent; return res; } case MOUSE_INPUT: { MouseInput& event = aEvent.AsMouseInput(); MouseInput processedEvent; nsEventStatus res; SendReceiveMouseInputEvent(event, &res, &processedEvent, aOutTargetGuid, aOutInputBlockId); event = processedEvent; return res; } case PANGESTURE_INPUT: { PanGestureInput& event = aEvent.AsPanGestureInput(); PanGestureInput processedEvent; nsEventStatus res; SendReceivePanGestureInputEvent(event, &res, &processedEvent, aOutTargetGuid, aOutInputBlockId); event = processedEvent; return res; } case PINCHGESTURE_INPUT: { PinchGestureInput& event = aEvent.AsPinchGestureInput(); PinchGestureInput processedEvent; nsEventStatus res; SendReceivePinchGestureInputEvent(event, &res, &processedEvent, aOutTargetGuid, aOutInputBlockId); event = processedEvent; return res; } case TAPGESTURE_INPUT: { TapGestureInput& event = aEvent.AsTapGestureInput(); TapGestureInput processedEvent; nsEventStatus res; SendReceiveTapGestureInputEvent(event, &res, &processedEvent, aOutTargetGuid, aOutInputBlockId); event = processedEvent; return res; } case SCROLLWHEEL_INPUT: { ScrollWheelInput& event = aEvent.AsScrollWheelInput(); ScrollWheelInput processedEvent; nsEventStatus res; SendReceiveScrollWheelInputEvent(event, &res, &processedEvent, aOutTargetGuid, aOutInputBlockId); event = processedEvent; return res; } default: { MOZ_ASSERT_UNREACHABLE("Invalid InputData type."); return nsEventStatus_eConsumeNoDefault; } } }