Response InspectorInputAgent::dispatchTouchEvent( const String& type, std::unique_ptr<protocol::Array<protocol::Input::TouchPoint>> touchPoints, protocol::Maybe<int> modifiers, protocol::Maybe<double> timestamp) { PlatformEvent::EventType convertedType; if (type == "touchStart") convertedType = PlatformEvent::TouchStart; else if (type == "touchEnd") convertedType = PlatformEvent::TouchEnd; else if (type == "touchMove") convertedType = PlatformEvent::TouchMove; else return Response::Error(String("Unrecognized type: " + type)); unsigned convertedModifiers = GetEventModifiers(modifiers.fromMaybe(0)); SyntheticInspectorTouchEvent event(convertedType, convertedModifiers, GetEventTimeStamp(timestamp)); int autoId = 0; for (size_t i = 0; i < touchPoints->length(); ++i) { protocol::Input::TouchPoint* point = touchPoints->get(i); int radiusX = point->getRadiusX(1); int radiusY = point->getRadiusY(1); double rotationAngle = point->getRotationAngle(0.0); double force = point->getForce(1.0); int id; if (point->hasId()) { if (autoId > 0) id = -1; else id = point->getId(0); autoId = -1; } else { id = autoId++; } if (id < 0) { return Response::Error( "All or none of the provided TouchPoints must supply positive " "integer ids."); } PlatformTouchPoint::TouchState convertedState; String state = point->getState(); if (state == "touchPressed") convertedState = PlatformTouchPoint::TouchPressed; else if (state == "touchReleased") convertedState = PlatformTouchPoint::TouchReleased; else if (state == "touchMoved") convertedState = PlatformTouchPoint::TouchMoved; else if (state == "touchStationary") convertedState = PlatformTouchPoint::TouchStationary; else if (state == "touchCancelled") convertedState = PlatformTouchPoint::TouchCancelled; else return Response::Error(String("Unrecognized state: " + state)); // Some platforms may have flipped coordinate systems, but the given // coordinates assume the origin is in the top-left of the window. Convert. IntPoint convertedPoint, globalPoint; ConvertInspectorPoint(m_inspectedFrames->root(), IntPoint(point->getX(), point->getY()), &convertedPoint, &globalPoint); SyntheticInspectorTouchPoint touchPoint(id++, convertedState, globalPoint, convertedPoint, radiusX, radiusY, rotationAngle, force); event.append(touchPoint); } // TODO: We need to add the support for generating coalesced events in // the devtools. Vector<PlatformTouchEvent> coalescedEvents; m_inspectedFrames->root()->eventHandler().handleTouchEvent(event, coalescedEvents); return Response::OK(); }
void InspectorInputAgent::dispatchTouchEvent(ErrorString* error, const String& type, PassOwnPtr<protocol::Array<protocol::Input::TouchPoint>> touchPoints, const protocol::Maybe<int>& modifiers, const protocol::Maybe<double>& timestamp) { PlatformEvent::Type convertedType; if (type == "touchStart") { convertedType = PlatformEvent::TouchStart; } else if (type == "touchEnd") { convertedType = PlatformEvent::TouchEnd; } else if (type == "touchMove") { convertedType = PlatformEvent::TouchMove; } else { *error = "Unrecognized type: " + type; return; } unsigned convertedModifiers = GetEventModifiers(modifiers.fromMaybe(0)); SyntheticInspectorTouchEvent event(convertedType, convertedModifiers, timestamp.fromMaybe(currentTime())); int autoId = 0; for (size_t i = 0; i < touchPoints->length(); ++i) { protocol::Input::TouchPoint* point = touchPoints->get(i); int radiusX = point->getRadiusX(1); int radiusY = point->getRadiusY(1); double rotationAngle = point->getRotationAngle(0.0); double force = point->getForce(1.0); int id; if (point->hasId()) { if (autoId > 0) id = -1; else id = point->getId(0); autoId = -1; } else { id = autoId++; } if (id < 0) { *error = "All or none of the provided TouchPoints must supply positive integer ids."; return; } PlatformTouchPoint::State convertedState; String state = point->getState(); if (state == "touchPressed") { convertedState = PlatformTouchPoint::TouchPressed; } else if (state == "touchReleased") { convertedState = PlatformTouchPoint::TouchReleased; } else if (state == "touchMoved") { convertedState = PlatformTouchPoint::TouchMoved; } else if (state == "touchStationary") { convertedState = PlatformTouchPoint::TouchStationary; } else if (state == "touchCancelled") { convertedState = PlatformTouchPoint::TouchCancelled; } else { *error = "Unrecognized state: " + state; return; } // Some platforms may have flipped coordinate systems, but the given coordinates // assume the origin is in the top-left of the window. Convert. IntPoint convertedPoint, globalPoint; ConvertInspectorPoint(m_inspectedFrames->root(), IntPoint(point->getX(), point->getY()), &convertedPoint, &globalPoint); SyntheticInspectorTouchPoint touchPoint(id++, convertedState, globalPoint, convertedPoint, radiusX, radiusY, rotationAngle, force); event.append(touchPoint); } m_inspectedFrames->root()->eventHandler().handleTouchEvent(event); }