static void accumulateDocumentEventTargetRects(Vector<IntRect>& rects, const Document* document) { ASSERT(document); if (!document->touchEventTargets()) return; const TouchEventTargetSet* targets = document->touchEventTargets(); for (TouchEventTargetSet::const_iterator iter = targets->begin(); iter != targets->end(); ++iter) { const Node* touchTarget = iter->key; if (!touchTarget->inDocument()) continue; if (touchTarget == document) { if (RenderView* view = document->renderView()) { IntRect r = enclosingIntRect(view->clippedOverflowRectForRepaint(0)); if (!r.isEmpty()) rects.append(r); } return; } if (touchTarget->isDocumentNode() && touchTarget != document) { accumulateDocumentEventTargetRects(rects, static_cast<const Document*>(touchTarget)); continue; } if (RenderObject* renderer = touchTarget->renderer()) accumulateRendererTouchEventTargetRects(rects, renderer); } }
void ScrollingCoordinator::computeAbsoluteTouchEventTargetRects(const Document* document, Vector<IntRect>& rects) { ASSERT(document); if (!document->view()) return; // FIXME: These rects won't be properly updated if the renderers are in a sub-tree that scrolls. accumulateDocumentEventTargetRects(rects, document); }