void FatFingers::getNodesFromRect(Document* document, const IntPoint& contentPos, ListHashSet<RefPtr<WebCore::Node> >& intersectedNodes) { FatFingers::CachedResultsStrategy cacheResolvingStrategy = cachingStrategy(); if (cacheResolvingStrategy == GetFromCache) { ASSERT(m_cachedRectHitTestResults.contains(document)); intersectedNodes = m_cachedRectHitTestResults.get(document); return; } ASSERT(cacheResolvingStrategy == GetFromRenderTree); unsigned topPadding, rightPadding, bottomPadding, leftPadding; getPaddings(topPadding, rightPadding, bottomPadding, leftPadding); HitTestRequest request(HitTestRequest::ReadOnly | HitTestRequest::Active | HitTestRequest::IgnoreClipping); // The user functions checkForText() and findIntersectingRegions() uses the Node.wholeText() to checkFingerIntersection() // not the text in its shadow tree. ShadowContentFilterPolicy allowShadow = m_targetType == Text ? DoNotAllowShadowContent : AllowShadowContent; HitTestResult result(contentPos, topPadding, rightPadding, bottomPadding, leftPadding, allowShadow); document->renderView()->layer()->hitTest(request, result); intersectedNodes = result.rectBasedTestResult(); m_cachedRectHitTestResults.add(document, intersectedNodes); }
IntRect FatFingers::fingerRectForPoint(const IntPoint& point) const { unsigned topPadding, rightPadding, bottomPadding, leftPadding; getPaddings(topPadding, rightPadding, bottomPadding, leftPadding); return HitTestResult::rectForPoint(point, topPadding, rightPadding, bottomPadding, leftPadding); }
void FatFingers::getNodesFromRect(Document* document, const IntPoint& contentPos, ListHashSet<RefPtr<Node> >& intersectedNodes) { unsigned topPadding, rightPadding, bottomPadding, leftPadding; getPaddings(topPadding, rightPadding, bottomPadding, leftPadding); // The user functions checkForText() and findIntersectingRegions() uses the Node.wholeText() to checkFingerIntersection() // not the text in its shadow tree. HitTestRequest::HitTestRequestType requestType = HitTestRequest::ReadOnly | HitTestRequest::Active; if (m_targetType == Text) requestType |= HitTestRequest::AllowShadowContent; HitTestResult result(contentPos, topPadding, rightPadding, bottomPadding, leftPadding); document->renderView()->layer()->hitTest(requestType, result); intersectedNodes = result.rectBasedTestResult(); m_cachedRectHitTestResults.add(document, intersectedNodes); }