本文整理汇总了C++中LayoutView::hitTestNoLifecycleUpdate方法的典型用法代码示例。如果您正苦于以下问题:C++ LayoutView::hitTestNoLifecycleUpdate方法的具体用法?C++ LayoutView::hitTestNoLifecycleUpdate怎么用?C++ LayoutView::hitTestNoLifecycleUpdate使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类LayoutView
的用法示例。
在下文中一共展示了LayoutView::hitTestNoLifecycleUpdate方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: nodeAtPoint
bool LayoutPart::nodeAtPoint(HitTestResult& result, const HitTestLocation& locationInContainer, const LayoutPoint& accumulatedOffset, HitTestAction action)
{
if (!widget() || !widget()->isFrameView() || !result.hitTestRequest().allowsChildFrameContent())
return nodeAtPointOverWidget(result, locationInContainer, accumulatedOffset, action);
// A hit test can never hit an off-screen element; only off-screen iframes are throttled;
// therefore, hit tests can skip descending into throttled iframes.
if (toFrameView(widget())->shouldThrottleRendering())
return nodeAtPointOverWidget(result, locationInContainer, accumulatedOffset, action);
ASSERT(document().lifecycle().state() >= DocumentLifecycle::CompositingClean);
if (action == HitTestForeground) {
FrameView* childFrameView = toFrameView(widget());
LayoutView* childRoot = childFrameView->layoutView();
if (visibleToHitTestRequest(result.hitTestRequest()) && childRoot) {
LayoutPoint adjustedLocation = accumulatedOffset + location();
LayoutPoint contentOffset = LayoutPoint(borderLeft() + paddingLeft(), borderTop() + paddingTop()) - LayoutSize(childFrameView->scrollOffset());
HitTestLocation newHitTestLocation(locationInContainer, -adjustedLocation - contentOffset);
HitTestRequest newHitTestRequest(result.hitTestRequest().type() | HitTestRequest::ChildFrameHitTest);
HitTestResult childFrameResult(newHitTestRequest, newHitTestLocation);
// The frame's layout and style must be up-to-date if we reach here.
bool isInsideChildFrame = childRoot->hitTestNoLifecycleUpdate(childFrameResult);
if (result.hitTestRequest().listBased()) {
result.append(childFrameResult);
} else if (isInsideChildFrame) {
// Force the result not to be cacheable because the parent
// frame should not cache this result; as it won't be notified of
// changes in the child.
childFrameResult.setCacheable(false);
result = childFrameResult;
}
// Don't trust |isInsideChildFrame|. For rect-based hit-test, returns
// true only when the hit test rect is totally within the iframe,
// i.e. nodeAtPointOverWidget() also returns true.
// Use a temporary HitTestResult because we don't want to collect the
// iframe element itself if the hit-test rect is totally within the iframe.
if (isInsideChildFrame) {
if (!locationInContainer.isRectBasedTest())
return true;
HitTestResult pointOverWidgetResult = result;
bool pointOverWidget = nodeAtPointOverWidget(pointOverWidgetResult, locationInContainer, accumulatedOffset, action);
if (pointOverWidget)
return true;
result = pointOverWidgetResult;
return false;
}
}
}
return nodeAtPointOverWidget(result, locationInContainer, accumulatedOffset, action);
}