本文整理汇总了C++中LayoutBlock::deleteLineBoxTree方法的典型用法代码示例。如果您正苦于以下问题:C++ LayoutBlock::deleteLineBoxTree方法的具体用法?C++ LayoutBlock::deleteLineBoxTree怎么用?C++ LayoutBlock::deleteLineBoxTree使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类LayoutBlock
的用法示例。
在下文中一共展示了LayoutBlock::deleteLineBoxTree方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: moveBlockChildren
void LayoutRubyBase::moveBlockChildren(LayoutRubyBase* toBase, LayoutObject* beforeChild)
{
ASSERT(!childrenInline());
ASSERT_ARG(toBase, toBase);
if (!firstChild())
return;
if (toBase->childrenInline())
toBase->makeChildrenNonInline();
// If an anonymous block would be put next to another such block, then merge those.
LayoutObject* firstChildHere = firstChild();
LayoutObject* lastChildThere = toBase->lastChild();
if (firstChildHere->isAnonymousBlock() && firstChildHere->childrenInline()
&& lastChildThere && lastChildThere->isAnonymousBlock() && lastChildThere->childrenInline()) {
LayoutBlock* anonBlockHere = toLayoutBlock(firstChildHere);
LayoutBlock* anonBlockThere = toLayoutBlock(lastChildThere);
anonBlockHere->moveAllChildrenTo(anonBlockThere, anonBlockThere->children());
anonBlockHere->deleteLineBoxTree();
anonBlockHere->destroy();
}
// Move all remaining children normally.
moveChildrenTo(toBase, firstChild(), beforeChild);
}
示例2: removeChild
void LayoutRubyRun::removeChild(LayoutObject* child)
{
// If the child is a ruby text, then merge the ruby base with the base of
// the right sibling run, if possible.
if (!beingDestroyed() && !documentBeingDestroyed() && child->isRubyText()) {
LayoutRubyBase* base = rubyBase();
LayoutObject* rightNeighbour = nextSibling();
if (base && rightNeighbour && rightNeighbour->isRubyRun()) {
// Ruby run without a base can happen only at the first run.
LayoutRubyRun* rightRun = toLayoutRubyRun(rightNeighbour);
if (rightRun->hasRubyBase()) {
LayoutRubyBase* rightBase = rightRun->rubyBaseSafe();
// Collect all children in a single base, then swap the bases.
rightBase->moveChildren(base);
moveChildTo(rightRun, base);
rightRun->moveChildTo(this, rightBase);
// The now empty ruby base will be removed below.
ASSERT(!rubyBase()->firstChild());
}
}
}
LayoutBlockFlow::removeChild(child);
if (!beingDestroyed() && !documentBeingDestroyed()) {
// Check if our base (if any) is now empty. If so, destroy it.
LayoutBlock* base = rubyBase();
if (base && !base->firstChild()) {
LayoutBlockFlow::removeChild(base);
base->deleteLineBoxTree();
base->destroy();
}
// If any of the above leaves the run empty, destroy it as well.
if (!hasRubyText() && !hasRubyBase()) {
deleteLineBoxTree();
destroy();
}
}
}
示例3: wrapLayoutObject
LayoutObject* LayoutFullScreen::wrapLayoutObject(LayoutObject* object, LayoutObject* parent, Document* document)
{
// FIXME: We should not modify the structure of the layout tree during
// layout. crbug.com/370459
DeprecatedDisableModifyLayoutTreeStructureAsserts disabler;
LayoutFullScreen* fullscreenLayoutObject = LayoutFullScreen::createAnonymous(document);
fullscreenLayoutObject->updateStyle();
if (parent && !parent->isChildAllowed(fullscreenLayoutObject, fullscreenLayoutObject->styleRef())) {
fullscreenLayoutObject->destroy();
return nullptr;
}
if (object) {
// |object->parent()| can be null if the object is not yet attached
// to |parent|.
if (LayoutObject* parent = object->parent()) {
LayoutBlock* containingBlock = object->containingBlock();
ASSERT(containingBlock);
// Since we are moving the |object| to a new parent |fullscreenLayoutObject|,
// the line box tree underneath our |containingBlock| is not longer valid.
containingBlock->deleteLineBoxTree();
parent->addChild(fullscreenLayoutObject, object);
object->remove();
// Always just do a full layout to ensure that line boxes get deleted properly.
// Because objects moved from |parent| to |fullscreenLayoutObject|, we want to
// make new line boxes instead of leaving the old ones around.
parent->setNeedsLayoutAndPrefWidthsRecalcAndFullPaintInvalidation(LayoutInvalidationReason::Fullscreen);
containingBlock->setNeedsLayoutAndPrefWidthsRecalcAndFullPaintInvalidation(LayoutInvalidationReason::Fullscreen);
}
fullscreenLayoutObject->addChild(object);
fullscreenLayoutObject->setNeedsLayoutAndPrefWidthsRecalcAndFullPaintInvalidation(LayoutInvalidationReason::Fullscreen);
}
ASSERT(document);
Fullscreen::from(*document).setFullScreenLayoutObject(fullscreenLayoutObject);
return fullscreenLayoutObject;
}