Node* nodeFromPoint(Document* document, int x, int y, LayoutPoint* localPoint) { Frame* frame = document->frame(); if (!frame) return nullptr; FrameView* frameView = frame->view(); if (!frameView) return nullptr; float scaleFactor = frame->pageZoomFactor() * frame->frameScaleFactor(); #if !PLATFORM(IOS) IntPoint point = roundedIntPoint(FloatPoint(x * scaleFactor + frameView->scrollX(), y * scaleFactor + frameView->scrollY())); if (!frameView->visibleContentRect().contains(point)) return nullptr; #else IntPoint point = roundedIntPoint(FloatPoint(x * scaleFactor + frameView->actualScrollX(), y * scaleFactor + frameView->actualScrollY())); if (!frameView->actualVisibleContentRect().contains(point)) return nullptr; #endif HitTestRequest request(HitTestRequest::ReadOnly | HitTestRequest::Active | HitTestRequest::DisallowShadowContent); HitTestResult result(point); document->renderView()->hitTest(request, result); if (localPoint) *localPoint = result.localPoint(); return result.innerNode(); }
int HTMLBodyElement::scrollTop() const { // Update the document's layout. Document* document = this->document(); document->updateLayoutIgnorePendingStylesheets(); FrameView* view = document->view(); return view ? adjustForZoom(view->actualVisibleContentRect().y(), document) : 0; }
bool ImageDocument::imageFitsInWindow() const { if (!m_imageElement) return true; FrameView* view = frame()->view(); if (!view) return true; IntSize imageSize = m_imageElement->cachedImage()->imageSize(pageZoomFactor(this)); IntRect windowRect = view->contentsToScreen(view->actualVisibleContentRect()); return imageSize.width() <= windowRect.width() && imageSize.height() <= windowRect.height(); }