Diff
Modified: trunk/Source/WebCore/ChangeLog (228592 => 228593)
--- trunk/Source/WebCore/ChangeLog 2018-02-17 02:13:59 UTC (rev 228592)
+++ trunk/Source/WebCore/ChangeLog 2018-02-17 02:20:24 UTC (rev 228593)
@@ -1,3 +1,53 @@
+2018-02-16 Zalan Bujtas <[email protected]>
+
+ [RenderTreeBuilder] Move RenderBoxModelObject::moveChild*() to RenderTreeBuilder
+ https://bugs.webkit.org/show_bug.cgi?id=182896
+ <rdar://problem/37623051>
+
+ Reviewed by Antti Koivisto.
+
+ No change in functionality.
+
+ * rendering/RenderBlock.h:
+ (WebCore::RenderBlock::moveAllChildrenIncludingFloatsTo): Deleted.
+ * rendering/RenderBlockFlow.cpp:
+ (WebCore::RenderBlockFlow::styleDidChange):
+ (WebCore::RenderBlockFlow::moveAllChildrenIncludingFloatsTo): Deleted.
+ * rendering/RenderBlockFlow.h:
+ * rendering/RenderBoxModelObject.cpp:
+ (WebCore::RenderBoxModelObject::moveChildTo): Deleted.
+ (WebCore::RenderBoxModelObject::moveChildrenTo): Deleted.
+ (WebCore::RenderBoxModelObject::moveAllChildrenToInternal): Deleted.
+ * rendering/RenderBoxModelObject.h:
+ (WebCore::RenderBoxModelObject::moveChildTo): Deleted.
+ (WebCore::RenderBoxModelObject::moveAllChildrenTo): Deleted.
+ (WebCore::RenderBoxModelObject::moveChildrenTo): Deleted.
+ * rendering/updating/RenderTreeBuilder.cpp:
+ (WebCore::RenderTreeBuilder::moveChildTo):
+ (WebCore::RenderTreeBuilder::moveAllChildrenTo):
+ (WebCore::RenderTreeBuilder::moveChildrenTo):
+ (WebCore::RenderTreeBuilder::moveAllChildrenIncludingFloatsTo):
+ (WebCore::RenderTreeBuilder::makeChildrenNonInline):
+ (WebCore::RenderTreeBuilder::splitAnonymousBoxesAroundChild):
+ * rendering/updating/RenderTreeBuilder.h:
+ * rendering/updating/RenderTreeBuilderBlock.cpp:
+ (WebCore::moveAllChildrenToInternal):
+ (WebCore::RenderTreeBuilder::Block::removeLeftoverAnonymousBlock):
+ (WebCore::RenderTreeBuilder::Block::takeChild):
+ (WebCore::RenderTreeBuilder::Block::dropAnonymousBoxChild):
+ * rendering/updating/RenderTreeBuilderBlockFlow.cpp:
+ (WebCore::RenderTreeBuilder::BlockFlow::moveAllChildrenIncludingFloatsTo):
+ * rendering/updating/RenderTreeBuilderBlockFlow.h:
+ * rendering/updating/RenderTreeBuilderMultiColumn.cpp:
+ (WebCore::RenderTreeBuilder::MultiColumn::createFragmentedFlow):
+ (WebCore::RenderTreeBuilder::MultiColumn::destroyFragmentedFlow):
+ * rendering/updating/RenderTreeBuilderRuby.cpp:
+ (WebCore::RenderTreeBuilder::Ruby::moveInlineChildren):
+ (WebCore::RenderTreeBuilder::Ruby::moveBlockChildren):
+ (WebCore::RenderTreeBuilder::Ruby::takeChild):
+ * rendering/updating/RenderTreeBuilderTable.cpp:
+ (WebCore::RenderTreeBuilder::Table::collapseAndDestroyAnonymousSiblingRows):
+
2018-02-16 Andy Estes <[email protected]>
[Cocoa] Stop using non-prefixed vDSP functions in 32-bit builds
Modified: trunk/Source/WebCore/rendering/RenderBlock.h (228592 => 228593)
--- trunk/Source/WebCore/rendering/RenderBlock.h 2018-02-17 02:13:59 UTC (rev 228592)
+++ trunk/Source/WebCore/rendering/RenderBlock.h 2018-02-17 02:20:24 UTC (rev 228593)
@@ -392,8 +392,6 @@
void adjustBorderBoxRectForPainting(LayoutRect&) override;
LayoutRect paintRectToClipOutFromBorder(const LayoutRect&) override;
bool isInlineBlockOrInlineTable() const final { return isInline() && isReplaced(); }
- // FIXME-BLOCKFLOW: Remove virtualizaion when all callers have moved to RenderBlockFlow
- virtual void moveAllChildrenIncludingFloatsTo(RenderTreeBuilder& builder, RenderBlock& toBlock, RenderBoxModelObject::NormalizeAfterInsertion normalizeAfterInsertion) { moveAllChildrenTo(builder, &toBlock, normalizeAfterInsertion); }
protected:
virtual void addOverflowFromChildren();
Modified: trunk/Source/WebCore/rendering/RenderBlockFlow.cpp (228592 => 228593)
--- trunk/Source/WebCore/rendering/RenderBlockFlow.cpp 2018-02-17 02:13:59 UTC (rev 228592)
+++ trunk/Source/WebCore/rendering/RenderBlockFlow.cpp 2018-02-17 02:20:24 UTC (rev 228593)
@@ -2023,7 +2023,7 @@
// Fresh floats need to be reparented if they actually belong to the previous anonymous block.
// It copies the logic of RenderBlock::addChildIgnoringContinuation
if (noLongerAffectsParentBlock() && style().isFloating() && previousSibling() && previousSibling()->isAnonymousBlock())
- downcast<RenderBoxModelObject>(*parent()).moveChildTo(*RenderTreeBuilder::current(), &downcast<RenderBoxModelObject>(*previousSibling()), this, RenderBoxModelObject::NormalizeAfterInsertion::No);
+ RenderTreeBuilder::current()->moveChildTo(downcast<RenderBoxModelObject>(*parent()), &downcast<RenderBoxModelObject>(*previousSibling()), this, RenderTreeBuilder::NormalizeAfterInsertion::No);
if (diff >= StyleDifferenceRepaint) {
// FIXME: This could use a cheaper style-only test instead of SimpleLineLayout::canUseFor.
@@ -2105,13 +2105,6 @@
}
}
-void RenderBlockFlow::moveAllChildrenIncludingFloatsTo(RenderTreeBuilder& builder, RenderBlock& toBlock, RenderBoxModelObject::NormalizeAfterInsertion normalizeAfterInsertion)
-{
- auto& toBlockFlow = downcast<RenderBlockFlow>(toBlock);
- moveAllChildrenTo(builder, &toBlockFlow, normalizeAfterInsertion);
- addFloatsToNewParent(toBlockFlow);
-}
-
void RenderBlockFlow::addOverflowFromFloats()
{
if (!m_floatingObjects)
Modified: trunk/Source/WebCore/rendering/RenderBlockFlow.h (228592 => 228593)
--- trunk/Source/WebCore/rendering/RenderBlockFlow.h 2018-02-17 02:13:59 UTC (rev 228592)
+++ trunk/Source/WebCore/rendering/RenderBlockFlow.h 2018-02-17 02:20:24 UTC (rev 228593)
@@ -461,7 +461,7 @@
// Called to lay out the legend for a fieldset or the ruby text of a ruby run. Also used by multi-column layout to handle
// the flow thread child.
void layoutExcludedChildren(bool relayoutChildren) override;
- void moveAllChildrenIncludingFloatsTo(RenderTreeBuilder&, RenderBlock& toBlock, RenderBoxModelObject::NormalizeAfterInsertion) override;
+ void addOverflowFromFloats();
private:
bool recomputeLogicalWidthAndColumnWidth();
@@ -508,7 +508,6 @@
bool hitTestFloats(const HitTestRequest&, HitTestResult&, const HitTestLocation& locationInContainer, const LayoutPoint& accumulatedOffset) override;
bool hitTestInlineChildren(const HitTestRequest&, HitTestResult&, const HitTestLocation& locationInContainer, const LayoutPoint& accumulatedOffset, HitTestAction) override;
- void addOverflowFromFloats();
void addOverflowFromInlineChildren() override;
void fitBorderToLinesIfNeeded(); // Shrink the box in which the border paints if border-fit is set.
Modified: trunk/Source/WebCore/rendering/RenderBoxModelObject.cpp (228592 => 228593)
--- trunk/Source/WebCore/rendering/RenderBoxModelObject.cpp 2018-02-17 02:13:59 UTC (rev 228592)
+++ trunk/Source/WebCore/rendering/RenderBoxModelObject.cpp 2018-02-17 02:20:24 UTC (rev 228593)
@@ -2685,67 +2685,4 @@
transformState.move(containerOffset.width(), containerOffset.height(), preserve3D ? TransformState::AccumulateTransform : TransformState::FlattenTransform);
}
-void RenderBoxModelObject::moveChildTo(RenderTreeBuilder& builder, RenderBoxModelObject* toBoxModelObject, RenderObject* child, RenderObject* beforeChild, NormalizeAfterInsertion normalizeAfterInsertion)
-{
- // We assume that callers have cleared their positioned objects list for child moves so the
- // positioned renderer maps don't become stale. It would be too slow to do the map lookup on each call.
- ASSERT(normalizeAfterInsertion == NormalizeAfterInsertion::No || !is<RenderBlock>(*this) || !downcast<RenderBlock>(*this).hasPositionedObjects());
-
- ASSERT(this == child->parent());
- ASSERT(!beforeChild || toBoxModelObject == beforeChild->parent());
- if (normalizeAfterInsertion == NormalizeAfterInsertion::Yes && (toBoxModelObject->isRenderBlock() || toBoxModelObject->isRenderInline())) {
- // Takes care of adding the new child correctly if toBlock and fromBlock
- // have different kind of children (block vs inline).
- auto childToMove = builder.takeChildFromRenderElement(*this, *child);
- builder.insertChild(*toBoxModelObject, WTFMove(childToMove), beforeChild);
- } else {
- auto childToMove = builder.takeChildFromRenderElement(*this, *child);
- builder.insertChildToRenderElementInternal(*toBoxModelObject, WTFMove(childToMove), beforeChild);
- }
-}
-
-void RenderBoxModelObject::moveChildrenTo(RenderTreeBuilder& builder, RenderBoxModelObject* toBoxModelObject, RenderObject* startChild, RenderObject* endChild, RenderObject* beforeChild, NormalizeAfterInsertion normalizeAfterInsertion)
-{
- // This condition is rarely hit since this function is usually called on
- // anonymous blocks which can no longer carry positioned objects (see r120761)
- // or when fullRemoveInsert is false.
- if (normalizeAfterInsertion == NormalizeAfterInsertion::Yes && is<RenderBlock>(*this)) {
- downcast<RenderBlock>(*this).removePositionedObjects(nullptr);
- if (is<RenderBlockFlow>(*this))
- downcast<RenderBlockFlow>(*this).removeFloatingObjects();
- }
-
- ASSERT(!beforeChild || toBoxModelObject == beforeChild->parent());
- for (RenderObject* child = startChild; child && child != endChild; ) {
- // Save our next sibling as moveChildTo will clear it.
- RenderObject* nextSibling = child->nextSibling();
-
- // FIXME: This logic here fails to detect the first letter in certain cases
- // and skips a valid sibling renderer (see webkit.org/b/163737).
- // Check to make sure we're not saving the firstLetter as the nextSibling.
- // When the |child| object will be moved, its firstLetter will be recreated,
- // so saving it now in nextSibling would leave us with a stale object.
- if (is<RenderTextFragment>(*child) && is<RenderText>(nextSibling)) {
- RenderObject* firstLetterObj = nullptr;
- if (RenderBlock* block = downcast<RenderTextFragment>(*child).blockForAccompanyingFirstLetter()) {
- RenderElement* firstLetterContainer = nullptr;
- block->getFirstLetter(firstLetterObj, firstLetterContainer, child);
- }
-
- // This is the first letter, skip it.
- if (firstLetterObj == nextSibling)
- nextSibling = nextSibling->nextSibling();
- }
-
- moveChildTo(builder, toBoxModelObject, child, beforeChild, normalizeAfterInsertion);
- child = nextSibling;
- }
-}
-
-void RenderBoxModelObject::moveAllChildrenToInternal(RenderElement& newParent)
-{
- while (firstChild())
- newParent.attachRendererInternal(detachRendererInternal(*firstChild()), this);
-}
-
} // namespace WebCore
Modified: trunk/Source/WebCore/rendering/RenderBoxModelObject.h (228592 => 228593)
--- trunk/Source/WebCore/rendering/RenderBoxModelObject.h 2018-02-17 02:13:59 UTC (rev 228592)
+++ trunk/Source/WebCore/rendering/RenderBoxModelObject.h 2018-02-17 02:20:24 UTC (rev 228593)
@@ -275,30 +275,6 @@
void setFirstLetterRemainingText(RenderTextFragment&);
void clearFirstLetterRemainingText();
- // NormalizeAfterInsertion::Yes ensures that the destination subtree is consistent after the insertion (anonymous wrappers etc).
- enum class NormalizeAfterInsertion { No, Yes };
- void moveChildTo(RenderTreeBuilder&, RenderBoxModelObject* toBoxModelObject, RenderObject* child, RenderObject* beforeChild, NormalizeAfterInsertion);
- void moveChildTo(RenderTreeBuilder& builder, RenderBoxModelObject* toBoxModelObject, RenderObject* child, NormalizeAfterInsertion normalizeAfterInsertion)
- {
- moveChildTo(builder, toBoxModelObject, child, nullptr, normalizeAfterInsertion);
- }
- void moveAllChildrenTo(RenderTreeBuilder& builder, RenderBoxModelObject* toBoxModelObject, NormalizeAfterInsertion normalizeAfterInsertion)
- {
- moveAllChildrenTo(builder, toBoxModelObject, nullptr, normalizeAfterInsertion);
- }
- void moveAllChildrenTo(RenderTreeBuilder& builder, RenderBoxModelObject* toBoxModelObject, RenderObject* beforeChild, NormalizeAfterInsertion normalizeAfterInsertion)
- {
- moveChildrenTo(builder, toBoxModelObject, firstChild(), nullptr, beforeChild, normalizeAfterInsertion);
- }
- void moveAllChildrenToInternal(RenderElement& newParent);
- // Move all of the kids from |startChild| up to but excluding |endChild|. 0 can be passed as the |endChild| to denote
- // that all the kids from |startChild| onwards should be moved.
- void moveChildrenTo(RenderTreeBuilder& builder, RenderBoxModelObject* toBoxModelObject, RenderObject* startChild, RenderObject* endChild, NormalizeAfterInsertion normalizeAfterInsertion)
- {
- moveChildrenTo(builder, toBoxModelObject, startChild, endChild, nullptr, normalizeAfterInsertion);
- }
- void moveChildrenTo(RenderTreeBuilder&, RenderBoxModelObject* toBoxModelObject, RenderObject* startChild, RenderObject* endChild, RenderObject* beforeChild, NormalizeAfterInsertion);
-
enum ScaleByEffectiveZoomOrNot { ScaleByEffectiveZoom, DoNotScaleByEffectiveZoom };
LayoutSize calculateImageIntrinsicDimensions(StyleImage*, const LayoutSize& scaledPositioningAreaSize, ScaleByEffectiveZoomOrNot) const;
Modified: trunk/Source/WebCore/rendering/updating/RenderTreeBuilder.cpp (228592 => 228593)
--- trunk/Source/WebCore/rendering/updating/RenderTreeBuilder.cpp 2018-02-17 02:13:59 UTC (rev 228592)
+++ trunk/Source/WebCore/rendering/updating/RenderTreeBuilder.cpp 2018-02-17 02:20:24 UTC (rev 228593)
@@ -46,6 +46,7 @@
#include "RenderTableRow.h"
#include "RenderTableSection.h"
#include "RenderText.h"
+#include "RenderTextFragment.h"
#include "RenderTreeBuilderBlock.h"
#include "RenderTreeBuilderBlockFlow.h"
#include "RenderTreeBuilderFirstLetter.h"
@@ -376,6 +377,92 @@
newChild->setHasOutlineAutoAncestor();
}
+void RenderTreeBuilder::moveChildTo(RenderBoxModelObject& from, RenderBoxModelObject* to, RenderObject* child, RenderObject* beforeChild, NormalizeAfterInsertion normalizeAfterInsertion)
+{
+ // We assume that callers have cleared their positioned objects list for child moves so the
+ // positioned renderer maps don't become stale. It would be too slow to do the map lookup on each call.
+ ASSERT(normalizeAfterInsertion == NormalizeAfterInsertion::No || !is<RenderBlock>(from) || !downcast<RenderBlock>(from).hasPositionedObjects());
+
+ ASSERT(&from == child->parent());
+ ASSERT(!beforeChild || to == beforeChild->parent());
+ if (normalizeAfterInsertion == NormalizeAfterInsertion::Yes && (to->isRenderBlock() || to->isRenderInline())) {
+ // Takes care of adding the new child correctly if toBlock and fromBlock
+ // have different kind of children (block vs inline).
+ auto childToMove = takeChildFromRenderElement(from, *child);
+ insertChild(*to, WTFMove(childToMove), beforeChild);
+ } else {
+ auto childToMove = takeChildFromRenderElement(from, *child);
+ insertChildToRenderElementInternal(*to, WTFMove(childToMove), beforeChild);
+ }
+}
+
+void RenderTreeBuilder::moveChildTo(RenderBoxModelObject& from, RenderBoxModelObject* to, RenderObject* child, NormalizeAfterInsertion normalizeAfterInsertion)
+{
+ moveChildTo(from, to, child, nullptr, normalizeAfterInsertion);
+}
+
+void RenderTreeBuilder::moveAllChildrenTo(RenderBoxModelObject& from, RenderBoxModelObject* to, NormalizeAfterInsertion normalizeAfterInsertion)
+{
+ moveAllChildrenTo(from, to, nullptr, normalizeAfterInsertion);
+}
+
+void RenderTreeBuilder::moveAllChildrenTo(RenderBoxModelObject& from, RenderBoxModelObject* to, RenderObject* beforeChild, NormalizeAfterInsertion normalizeAfterInsertion)
+{
+ moveChildrenTo(from, to, from.firstChild(), nullptr, beforeChild, normalizeAfterInsertion);
+}
+
+void RenderTreeBuilder::moveChildrenTo(RenderBoxModelObject& from, RenderBoxModelObject* to, RenderObject* startChild, RenderObject* endChild, NormalizeAfterInsertion normalizeAfterInsertion)
+{
+ moveChildrenTo(from, to, startChild, endChild, nullptr, normalizeAfterInsertion);
+}
+
+void RenderTreeBuilder::moveChildrenTo(RenderBoxModelObject& from, RenderBoxModelObject* to, RenderObject* startChild, RenderObject* endChild, RenderObject* beforeChild, NormalizeAfterInsertion normalizeAfterInsertion)
+{
+ // This condition is rarely hit since this function is usually called on
+ // anonymous blocks which can no longer carry positioned objects (see r120761)
+ // or when fullRemoveInsert is false.
+ if (normalizeAfterInsertion == NormalizeAfterInsertion::Yes && is<RenderBlock>(from)) {
+ downcast<RenderBlock>(from).removePositionedObjects(nullptr);
+ if (is<RenderBlockFlow>(from))
+ downcast<RenderBlockFlow>(from).removeFloatingObjects();
+ }
+
+ ASSERT(!beforeChild || to == beforeChild->parent());
+ for (RenderObject* child = startChild; child && child != endChild; ) {
+ // Save our next sibling as moveChildTo will clear it.
+ RenderObject* nextSibling = child->nextSibling();
+
+ // FIXME: This logic here fails to detect the first letter in certain cases
+ // and skips a valid sibling renderer (see webkit.org/b/163737).
+ // Check to make sure we're not saving the firstLetter as the nextSibling.
+ // When the |child| object will be moved, its firstLetter will be recreated,
+ // so saving it now in nextSibling would leave us with a stale object.
+ if (is<RenderTextFragment>(*child) && is<RenderText>(nextSibling)) {
+ RenderObject* firstLetterObj = nullptr;
+ if (RenderBlock* block = downcast<RenderTextFragment>(*child).blockForAccompanyingFirstLetter()) {
+ RenderElement* firstLetterContainer = nullptr;
+ block->getFirstLetter(firstLetterObj, firstLetterContainer, child);
+ }
+
+ // This is the first letter, skip it.
+ if (firstLetterObj == nextSibling)
+ nextSibling = nextSibling->nextSibling();
+ }
+
+ moveChildTo(from, to, child, beforeChild, normalizeAfterInsertion);
+ child = nextSibling;
+ }
+}
+
+void RenderTreeBuilder::moveAllChildrenIncludingFloatsTo(RenderBlock& from, RenderBlock& to, RenderTreeBuilder::NormalizeAfterInsertion normalizeAfterInsertion)
+{
+ if (is<RenderBlockFlow>(from)) {
+ blockFlowBuilder().moveAllChildrenIncludingFloatsTo(downcast<RenderBlockFlow>(from), to, normalizeAfterInsertion);
+ return;
+ }
+ moveAllChildrenTo(from, &to, normalizeAfterInsertion);
+}
+
void RenderTreeBuilder::makeChildrenNonInline(RenderBlock& parent, RenderObject* insertionPoint)
{
// makeChildrenNonInline takes a block whose children are *all* inline and it
@@ -409,7 +496,7 @@
auto newBlock = parent.createAnonymousBlock();
auto& block = *newBlock;
insertChildToRenderElementInternal(parent, WTFMove(newBlock), inlineRunStart);
- parent.moveChildrenTo(*this, &block, inlineRunStart, child, RenderBoxModelObject::NormalizeAfterInsertion::No);
+ moveChildrenTo(parent, &block, inlineRunStart, child, RenderTreeBuilder::NormalizeAfterInsertion::No);
}
#ifndef NDEBUG
for (RenderObject* c = parent.firstChild(); c; c = c->nextSibling())
@@ -438,7 +525,7 @@
// See for example RenderTableCell:clippedOverflowRectForRepaint.
markBoxForRelayoutAfterSplit(*parentBox);
insertChildToRenderElementInternal(*parentBox, WTFMove(newPostBox), boxToSplit.nextSibling());
- boxToSplit.moveChildrenTo(*this, &postBox, beforeChild, nullptr, RenderBoxModelObject::NormalizeAfterInsertion::Yes);
+ moveChildrenTo(boxToSplit, &postBox, beforeChild, nullptr, RenderTreeBuilder::NormalizeAfterInsertion::Yes);
markBoxForRelayoutAfterSplit(boxToSplit);
markBoxForRelayoutAfterSplit(postBox);
Modified: trunk/Source/WebCore/rendering/updating/RenderTreeBuilder.h (228592 => 228593)
--- trunk/Source/WebCore/rendering/updating/RenderTreeBuilder.h 2018-02-17 02:13:59 UTC (rev 228592)
+++ trunk/Source/WebCore/rendering/updating/RenderTreeBuilder.h 2018-02-17 02:20:24 UTC (rev 228593)
@@ -72,6 +72,17 @@
void removeFromParentAndDestroyCleaningUpAnonymousWrappers(RenderObject& child);
void multiColumnDescendantInserted(RenderMultiColumnFlow&, RenderObject& newDescendant);
+ // NormalizeAfterInsertion::Yes ensures that the destination subtree is consistent after the insertion (anonymous wrappers etc).
+ enum class NormalizeAfterInsertion { No, Yes };
+ void moveChildTo(RenderBoxModelObject& from, RenderBoxModelObject* to, RenderObject* child, RenderObject* beforeChild, NormalizeAfterInsertion);
+ void moveChildTo(RenderBoxModelObject& from, RenderBoxModelObject* to, RenderObject* child, NormalizeAfterInsertion);
+ void moveAllChildrenTo(RenderBoxModelObject& from, RenderBoxModelObject* to, NormalizeAfterInsertion);
+ void moveAllChildrenTo(RenderBoxModelObject& from, RenderBoxModelObject* to, RenderObject* beforeChild, NormalizeAfterInsertion);
+ // Move all of the kids from |startChild| up to but excluding |endChild|. 0 can be passed as the |endChild| to denote
+ // that all the kids from |startChild| onwards should be moved.
+ void moveChildrenTo(RenderBoxModelObject& from, RenderBoxModelObject* to, RenderObject* startChild, RenderObject* endChild, NormalizeAfterInsertion);
+ void moveChildrenTo(RenderBoxModelObject& from, RenderBoxModelObject* to, RenderObject* startChild, RenderObject* endChild, RenderObject* beforeChild, NormalizeAfterInsertion);
+
private:
class FirstLetter;
class List;
@@ -92,6 +103,8 @@
RenderPtr<RenderObject> takeChildFromRenderButton(RenderButton& parent, RenderObject& child);
RenderPtr<RenderObject> takeChildFromRenderGrid(RenderGrid& parent, RenderObject& child);
+ void moveAllChildrenIncludingFloatsTo(RenderBlock& from, RenderBlock& toBlock, RenderTreeBuilder::NormalizeAfterInsertion);
+
void insertChildToRenderGrid(RenderGrid& parent, RenderPtr<RenderObject> child, RenderObject* beforeChild = nullptr);
void insertChildToRenderElement(RenderElement& parent, RenderPtr<RenderObject> child, RenderObject* beforeChild = nullptr);
Modified: trunk/Source/WebCore/rendering/updating/RenderTreeBuilderBlock.cpp (228592 => 228593)
--- trunk/Source/WebCore/rendering/updating/RenderTreeBuilderBlock.cpp 2018-02-17 02:13:59 UTC (rev 228592)
+++ trunk/Source/WebCore/rendering/updating/RenderTreeBuilderBlock.cpp 2018-02-17 02:20:24 UTC (rev 228593)
@@ -36,6 +36,12 @@
namespace WebCore {
+static void moveAllChildrenToInternal(RenderBoxModelObject& from, RenderElement& newParent)
+{
+ while (from.firstChild())
+ newParent.attachRendererInternal(from.detachRendererInternal(*from.firstChild()), &from);
+}
+
static bool canDropAnonymousBlock(const RenderBlock& anonymousBlock)
{
if (anonymousBlock.beingDestroyed() || anonymousBlock.continuation())
@@ -260,7 +266,7 @@
return;
// FIXME: This should really just be a moveAllChilrenTo (see webkit.org/b/182495)
- anonymousBlock.moveAllChildrenToInternal(*parent);
+ moveAllChildrenToInternal(anonymousBlock, *parent);
auto toBeDestroyed = m_builder.takeChildFromRenderElement(*parent, anonymousBlock);
// anonymousBlock is dead here.
}
@@ -309,7 +315,7 @@
} else {
// Take all the children out of the |next| block and put them in
// the |prev| block.
- nextBlock.moveAllChildrenIncludingFloatsTo(m_builder, prevBlock, RenderBoxModelObject::NormalizeAfterInsertion::No);
+ m_builder.moveAllChildrenIncludingFloatsTo(nextBlock, prevBlock, RenderTreeBuilder::NormalizeAfterInsertion::No);
// Delete the now-empty block's lines and nuke it.
nextBlock.deleteLines();
@@ -361,7 +367,7 @@
auto* nextSibling = child.nextSibling();
auto toBeDeleted = m_builder.takeChildFromRenderElement(parent, child);
- child.moveAllChildrenTo(m_builder, &parent, nextSibling, RenderBoxModelObject::NormalizeAfterInsertion::No);
+ m_builder.moveAllChildrenTo(child, &parent, nextSibling, RenderTreeBuilder::NormalizeAfterInsertion::No);
// Delete the now-empty block's lines and nuke it.
child.deleteLines();
}
Modified: trunk/Source/WebCore/rendering/updating/RenderTreeBuilderBlockFlow.cpp (228592 => 228593)
--- trunk/Source/WebCore/rendering/updating/RenderTreeBuilderBlockFlow.cpp 2018-02-17 02:13:59 UTC (rev 228592)
+++ trunk/Source/WebCore/rendering/updating/RenderTreeBuilderBlockFlow.cpp 2018-02-17 02:20:24 UTC (rev 228593)
@@ -45,6 +45,10 @@
m_builder.blockBuilder().insertChild(parent, WTFMove(child), beforeChildOrPlaceholder);
}
+void RenderTreeBuilder::BlockFlow::moveAllChildrenIncludingFloatsTo(RenderBlockFlow& from, RenderBlock& to, RenderTreeBuilder::NormalizeAfterInsertion normalizeAfterInsertion)
+{
+ m_builder.moveAllChildrenTo(from, &to, normalizeAfterInsertion);
+ from.addFloatsToNewParent(downcast<RenderBlockFlow>(to));
}
-
+}
Modified: trunk/Source/WebCore/rendering/updating/RenderTreeBuilderBlockFlow.h (228592 => 228593)
--- trunk/Source/WebCore/rendering/updating/RenderTreeBuilderBlockFlow.h 2018-02-17 02:13:59 UTC (rev 228592)
+++ trunk/Source/WebCore/rendering/updating/RenderTreeBuilderBlockFlow.h 2018-02-17 02:20:24 UTC (rev 228593)
@@ -34,9 +34,9 @@
BlockFlow(RenderTreeBuilder&);
void insertChild(RenderBlockFlow& parent, RenderPtr<RenderObject> child, RenderObject* beforeChild);
+ void moveAllChildrenIncludingFloatsTo(RenderBlockFlow& from, RenderBlock& to, RenderTreeBuilder::NormalizeAfterInsertion);
private:
-
RenderTreeBuilder& m_builder;
};
Modified: trunk/Source/WebCore/rendering/updating/RenderTreeBuilderMultiColumn.cpp (228592 => 228593)
--- trunk/Source/WebCore/rendering/updating/RenderTreeBuilderMultiColumn.cpp 2018-02-17 02:13:59 UTC (rev 228592)
+++ trunk/Source/WebCore/rendering/updating/RenderTreeBuilderMultiColumn.cpp 2018-02-17 02:20:24 UTC (rev 228593)
@@ -172,12 +172,12 @@
m_builder.blockBuilder().insertChild(flow, WTFMove(newFragmentedFlow), nullptr);
// Reparent children preceding the fragmented flow into the fragmented flow.
- flow.moveChildrenTo(m_builder, &fragmentedFlow, flow.firstChild(), &fragmentedFlow, RenderBoxModelObject::NormalizeAfterInsertion::Yes);
+ m_builder.moveChildrenTo(flow, &fragmentedFlow, flow.firstChild(), &fragmentedFlow, RenderTreeBuilder::NormalizeAfterInsertion::Yes);
if (flow.isFieldset()) {
// Keep legends out of the flow thread.
for (auto& box : childrenOfType<RenderBox>(fragmentedFlow)) {
if (box.isLegend())
- fragmentedFlow.moveChildTo(m_builder, &flow, &box, RenderBoxModelObject::NormalizeAfterInsertion::Yes);
+ m_builder.moveChildTo(fragmentedFlow, &flow, &box, RenderTreeBuilder::NormalizeAfterInsertion::Yes);
}
}
@@ -185,7 +185,7 @@
// Keep the middle block out of the flow thread.
for (auto& element : childrenOfType<RenderElement>(fragmentedFlow)) {
if (!downcast<RenderLinesClampFlow>(fragmentedFlow).isChildAllowedInFragmentedFlow(flow, element))
- fragmentedFlow.moveChildTo(m_builder, &flow, &element, RenderBoxModelObject::NormalizeAfterInsertion::Yes);
+ m_builder.moveChildTo(fragmentedFlow, &flow, &element, RenderTreeBuilder::NormalizeAfterInsertion::Yes);
}
}
@@ -215,7 +215,7 @@
columnSet->removeFromParentAndDestroy(m_builder);
flow.clearMultiColumnFlow();
- multiColumnFlow.moveAllChildrenTo(m_builder, &flow, RenderBoxModelObject::NormalizeAfterInsertion::Yes);
+ m_builder.moveAllChildrenTo(multiColumnFlow, &flow, RenderTreeBuilder::NormalizeAfterInsertion::Yes);
multiColumnFlow.removeFromParentAndDestroy(m_builder);
for (auto& parentAndSpanner : parentAndSpannerList)
m_builder.insertChild(*parentAndSpanner.first, WTFMove(parentAndSpanner.second));
Modified: trunk/Source/WebCore/rendering/updating/RenderTreeBuilderRuby.cpp (228592 => 228593)
--- trunk/Source/WebCore/rendering/updating/RenderTreeBuilderRuby.cpp 2018-02-17 02:13:59 UTC (rev 228592)
+++ trunk/Source/WebCore/rendering/updating/RenderTreeBuilderRuby.cpp 2018-02-17 02:20:24 UTC (rev 228593)
@@ -143,7 +143,7 @@
}
}
// Move our inline children into the target block we determined above.
- from.moveChildrenTo(m_builder, toBlock, from.firstChild(), beforeChild, RenderBoxModelObject::NormalizeAfterInsertion::No);
+ m_builder.moveChildrenTo(from, toBlock, from.firstChild(), beforeChild, RenderTreeBuilder::NormalizeAfterInsertion::No);
}
void RenderTreeBuilder::Ruby::moveBlockChildren(RenderRubyBase& from, RenderRubyBase& to, RenderObject* beforeChild)
@@ -163,12 +163,12 @@
&& lastChildThere && lastChildThere->isAnonymousBlock() && lastChildThere->childrenInline()) {
auto* anonBlockHere = downcast<RenderBlock>(firstChildHere);
auto* anonBlockThere = downcast<RenderBlock>(lastChildThere);
- anonBlockHere->moveAllChildrenTo(m_builder, anonBlockThere, RenderBoxModelObject::NormalizeAfterInsertion::Yes);
+ m_builder.moveAllChildrenTo(*anonBlockHere, anonBlockThere, RenderTreeBuilder::NormalizeAfterInsertion::Yes);
anonBlockHere->deleteLines();
anonBlockHere->removeFromParentAndDestroy(m_builder);
}
// Move all remaining children normally.
- from.moveChildrenTo(m_builder, &to, from.firstChild(), beforeChild, RenderBoxModelObject::NormalizeAfterInsertion::No);
+ m_builder.moveChildrenTo(from, &to, from.firstChild(), beforeChild, RenderTreeBuilder::NormalizeAfterInsertion::No);
}
void RenderTreeBuilder::Ruby::moveChildren(RenderRubyBase& from, RenderRubyBase& to)
@@ -438,8 +438,8 @@
RenderRubyBase* rightBase = rightRun.rubyBase();
// Collect all children in a single base, then swap the bases.
moveChildren(*rightBase, *base);
- parent.moveChildTo(m_builder, &rightRun, base, RenderBoxModelObject::NormalizeAfterInsertion::No);
- rightRun.moveChildTo(m_builder, &parent, rightBase, RenderBoxModelObject::NormalizeAfterInsertion::No);
+ m_builder.moveChildTo(parent, &rightRun, base, RenderTreeBuilder::NormalizeAfterInsertion::No);
+ m_builder.moveChildTo(rightRun, &parent, rightBase, RenderTreeBuilder::NormalizeAfterInsertion::No);
// The now empty ruby base will be removed below.
ASSERT(!parent.rubyBase()->firstChild());
}
Modified: trunk/Source/WebCore/rendering/updating/RenderTreeBuilderTable.cpp (228592 => 228593)
--- trunk/Source/WebCore/rendering/updating/RenderTreeBuilderTable.cpp 2018-02-17 02:13:59 UTC (rev 228592)
+++ trunk/Source/WebCore/rendering/updating/RenderTreeBuilderTable.cpp 2018-02-17 02:20:24 UTC (rev 228593)
@@ -248,7 +248,7 @@
currentRow = currentRow->nextRow();
continue;
}
- currentRow->moveAllChildrenTo(m_builder, rowToInsertInto, RenderBoxModelObject::NormalizeAfterInsertion::No);
+ m_builder.moveAllChildrenTo(*currentRow, rowToInsertInto, RenderTreeBuilder::NormalizeAfterInsertion::No);
auto toDestroy = m_builder.takeChild(*section, *currentRow);
currentRow = currentRow->nextRow();
}