WebTouchEventBuilder::WebTouchEventBuilder(const LayoutObject* layoutObject, const TouchEvent& event) { if (event.type() == EventTypeNames::touchstart) type = TouchStart; else if (event.type() == EventTypeNames::touchmove) type = TouchMove; else if (event.type() == EventTypeNames::touchend) type = TouchEnd; else if (event.type() == EventTypeNames::touchcancel) type = TouchCancel; else { ASSERT_NOT_REACHED(); type = Undefined; return; } timeStampSeconds = event.platformTimeStamp(); modifiers = event.modifiers(); cancelable = event.cancelable(); causesScrollingIfUncanceled = event.causesScrollingIfUncanceled(); // Currently touches[] is empty, add stationary points as-is. for (unsigned i = 0; i < event.touches()->length() && i < static_cast<unsigned>(WebTouchEvent::touchesLengthCap); ++i) { touches[i] = toWebTouchPoint(event.touches()->item(i), layoutObject, WebTouchPoint::StateStationary); ++touchesLength; } // If any existing points are also in the change list, we should update // their state, otherwise just add the new points. addTouchPointsUpdateStateIfNecessary(toWebTouchPointState(event.type()), event.changedTouches(), touches, &touchesLength, layoutObject); }
static void addTouchPoints(const Widget* widget, const AtomicString& touchType, TouchList* touches, WebTouchPoint* touchPoints, unsigned* touchPointsLength, const WebCore::RenderObject* renderObject) { unsigned numberOfTouches = std::min(touches->length(), static_cast<unsigned>(WebTouchEvent::touchesLengthCap)); for (unsigned i = 0; i < numberOfTouches; ++i) { const Touch* touch = touches->item(i); WebTouchPoint point; point.id = touch->identifier(); point.screenPosition = WebFloatPoint(touch->screenX(), touch->screenY()); point.position = convertAbsoluteLocationForRenderObject(touch->absoluteLocation(), *renderObject); point.radiusX = touch->webkitRadiusX(); point.radiusY = touch->webkitRadiusY(); point.rotationAngle = touch->webkitRotationAngle(); point.force = touch->webkitForce(); point.state = toWebTouchPointState(touchType); touchPoints[i] = point; } *touchPointsLength = numberOfTouches; }