bool NewEventHandler::handlePointerDownEvent(const WebPointerEvent& event) { // In principle, we shouldn't get another pointer down for the same // pointer ID, but for mice, we don't get a pointer cancel when you // drag outside the window frame on Linux. For now, send the pointer // cancel at this point. bool alreadyDown = m_stateForPointer.find(event.pointer) != m_stateForPointer.end(); if (event.kind == WebPointerEvent::Mouse && alreadyDown) { WebPointerEvent fakeCancel = event; fakeCancel.type = WebInputEvent::PointerCancel; handlePointerCancelEvent(fakeCancel); } DCHECK(!alreadyDown) << "Pointer id " << event.pointer << "already down!"; HitTestResult hitTestResult = performHitTest(positionForEvent(event)); RefPtr<Node> target = targetForHitTestResult(hitTestResult); if (!target) return false; PointerState& state = m_stateForPointer[event.pointer]; state.target = target; bool eventSwallowed = !dispatchPointerEvent(state, event); // TODO(abarth): Set the target for the pointer to something determined when // dispatching the event. updateSelectionForPointerDown(hitTestResult, event); return eventSwallowed; }
bool NewEventHandler::dispatchClickEvent(Node& capturingTarget, const WebPointerEvent& event) { ASSERT(event.type == WebInputEvent::PointerUp); HitTestResult hitTestResult = performHitTest(positionForEvent(event)); Node* releaseTarget = targetForHitTestResult(hitTestResult); Node* clickTarget = NodeRenderingTraversal::commonAncestor(*releaseTarget, capturingTarget); if (!clickTarget) return true; // TODO(abarth): Make a proper gesture event that includes information from the event. return clickTarget->dispatchEvent(Event::createCancelableBubble(EventTypeNames::click)); }
void WebkitPixelStreamer::processWheelEvent(const deflect::Event &wheelEvent) { const QWebHitTestResult& hitResult = performHitTest(wheelEvent); if(!hitResult.isNull() && isWebGLElement(hitResult.element())) { const int delta = wheelEvent.dy; QWheelEvent myEvent(hitResult.pos(), delta, Qt::NoButton, (Qt::KeyboardModifiers)wheelEvent.modifiers, Qt::Vertical); webView_.page()->event(&myEvent); } }
void WebkitPixelStreamer::processPressEvent(const deflect::Event &pressEvent) { const QWebHitTestResult& hitResult = performHitTest(pressEvent); if(hitResult.isNull() || isWebGLElement(hitResult.element())) { interactionModeActive_ = true; } const QPoint& pointerPos = getPointerPosition(pressEvent); QMouseEvent myEvent(QEvent::MouseButtonPress, pointerPos, Qt::LeftButton, Qt::LeftButton, (Qt::KeyboardModifiers)pressEvent.modifiers); webView_.page()->event(&myEvent); }
void WebkitPixelStreamer::processClickEvent(const deflect::Event &clickEvent) { // TODO History navigation (until swipe gestures are fixed) if (clickEvent.mouseX < 0.02) { webView_.back(); return; } if (clickEvent.mouseX > 0.98) { webView_.forward(); return; } processPressEvent(clickEvent); processReleaseEvent(clickEvent); const QWebHitTestResult& hitResult = performHitTest( clickEvent ); if( !hitResult.isNull() && !hitResult.linkUrl().isEmpty( )) webView_.load( hitResult.linkUrl( )); }
bool NewEventHandler::handleWheelEvent(const WebWheelEvent& event) { HitTestResult hitTestResult = performHitTest(positionForEvent(event)); RefPtr<Node> target = targetForHitTestResult(hitTestResult); return target && !dispatchWheelEvent(*target, event); }