本文整理汇总了C++中LocalFrame::contentLayoutItem方法的典型用法代码示例。如果您正苦于以下问题:C++ LocalFrame::contentLayoutItem方法的具体用法?C++ LocalFrame::contentLayoutItem怎么用?C++ LocalFrame::contentLayoutItem使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类LocalFrame
的用法示例。
在下文中一共展示了LocalFrame::contentLayoutItem方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: handleMouseMove
bool InspectorOverlay::handleMouseMove(const PlatformMouseEvent& event) {
if (!shouldSearchForNode())
return false;
LocalFrame* frame = m_frameImpl->frame();
if (!frame || !frame->view() || frame->contentLayoutItem().isNull())
return false;
Node* node = hoveredNodeForEvent(frame, event, event.shiftKey());
// Do not highlight within user agent shadow root unless requested.
if (m_inspectMode != InspectorDOMAgent::SearchingForUAShadow) {
ShadowRoot* shadowRoot = InspectorDOMAgent::userAgentShadowRoot(node);
if (shadowRoot)
node = &shadowRoot->host();
}
// Shadow roots don't have boxes - use host element instead.
if (node && node->isShadowRoot())
node = node->parentOrShadowHostNode();
if (!node)
return true;
Node* eventTarget =
event.shiftKey() ? hoveredNodeForEvent(frame, event, false) : nullptr;
if (eventTarget == node)
eventTarget = nullptr;
if (node && m_inspectModeHighlightConfig) {
m_hoveredNodeForInspectMode = node;
if (m_domAgent)
m_domAgent->nodeHighlightedInOverlay(node);
highlightNode(node, eventTarget, *m_inspectModeHighlightConfig,
event.ctrlKey() || event.metaKey());
}
return true;
}
示例2: frameContentAsPlainText
static void frameContentAsPlainText(size_t maxChars,
LocalFrame* frame,
StringBuilder& output) {
Document* document = frame->document();
if (!document)
return;
if (!frame->view() || frame->view()->shouldThrottleRendering())
return;
DCHECK(!frame->view()->needsLayout());
DCHECK(!document->needsLayoutTreeUpdate());
// Select the document body.
if (document->body()) {
const EphemeralRange range =
EphemeralRange::rangeOfContents(*document->body());
// The text iterator will walk nodes giving us text. This is similar to
// the plainText() function in core/editing/TextIterator.h, but we
// implement the maximum size and also copy the results directly into a
// wstring, avoiding the string conversion.
for (TextIterator it(range.startPosition(), range.endPosition());
!it.atEnd(); it.advance()) {
it.text().appendTextToStringBuilder(output, 0,
maxChars - output.length());
if (output.length() >= maxChars)
return; // Filled up the buffer.
}
}
// The separator between frames when the frames are converted to plain text.
const LChar frameSeparator[] = {'\n', '\n'};
const size_t frameSeparatorLength = WTF_ARRAY_LENGTH(frameSeparator);
// Recursively walk the children.
const FrameTree& frameTree = frame->tree();
for (Frame* curChild = frameTree.firstChild(); curChild;
curChild = curChild->tree().nextSibling()) {
if (!curChild->isLocalFrame())
continue;
LocalFrame* curLocalChild = toLocalFrame(curChild);
// Ignore the text of non-visible frames.
LayoutViewItem contentLayoutItem = curLocalChild->contentLayoutItem();
LayoutPart* ownerLayoutObject = curLocalChild->ownerLayoutObject();
if (contentLayoutItem.isNull() || !contentLayoutItem.size().width() ||
!contentLayoutItem.size().height() ||
(contentLayoutItem.location().x() + contentLayoutItem.size().width() <=
0) ||
(contentLayoutItem.location().y() + contentLayoutItem.size().height() <=
0) ||
(ownerLayoutObject && ownerLayoutObject->style() &&
ownerLayoutObject->style()->visibility() != EVisibility::Visible)) {
continue;
}
// Make sure the frame separator won't fill up the buffer, and give up if
// it will. The danger is if the separator will make the buffer longer than
// maxChars. This will cause the computation above:
// maxChars - output->size()
// to be a negative number which will crash when the subframe is added.
if (output.length() >= maxChars - frameSeparatorLength)
return;
output.append(frameSeparator, frameSeparatorLength);
frameContentAsPlainText(maxChars, curLocalChild, output);
if (output.length() >= maxChars)
return; // Filled up the buffer.
}
}