Diff
Modified: trunk/Source/WebCore/ChangeLog (228528 => 228529)
--- trunk/Source/WebCore/ChangeLog 2018-02-15 19:49:24 UTC (rev 228528)
+++ trunk/Source/WebCore/ChangeLog 2018-02-15 20:01:58 UTC (rev 228529)
@@ -1,3 +1,23 @@
+2018-02-15 Zalan Bujtas <[email protected]>
+
+ [RenderTreeBuilder] Move RenderTable::addChild() to RenderTreeBuilder
+ https://bugs.webkit.org/show_bug.cgi?id=182832
+ <rdar://problem/37576362>
+
+ Reviewed by Antti Koivisto.
+
+ No change in functionality.
+
+ * rendering/RenderTable.cpp:
+ (WebCore::RenderTable::willInsertTableColumn):
+ (WebCore::RenderTable::willInsertTableSection):
+ (WebCore::RenderTable::addChild): Deleted.
+ * rendering/RenderTable.h:
+ * rendering/updating/RenderTreeBuilder.cpp:
+ (WebCore::RenderTreeBuilder::insertChild):
+ * rendering/updating/RenderTreeBuilderTable.cpp:
+ (WebCore::RenderTreeBuilder::Table::insertChild):
+
2018-02-14 Darin Adler <[email protected]>
Use std::make_unique instead of explicit calls to new and instead of writing create functions
Modified: trunk/Source/WebCore/rendering/RenderTable.cpp (228528 => 228529)
--- trunk/Source/WebCore/rendering/RenderTable.cpp 2018-02-15 19:49:24 UTC (rev 228528)
+++ trunk/Source/WebCore/rendering/RenderTable.cpp 2018-02-15 20:01:58 UTC (rev 228529)
@@ -133,43 +133,41 @@
section.clear();
}
-void RenderTable::addChild(RenderTreeBuilder& builder, RenderPtr<RenderObject> child, RenderObject* beforeChild)
+void RenderTable::willInsertTableColumn(RenderTableCol&, RenderObject*)
{
- if (is<RenderTableCol>(*child)) {
- m_hasColElements = true;
- } else if (is<RenderTableSection>(*child)) {
- switch (child->style().display()) {
- case TABLE_HEADER_GROUP:
- resetSectionPointerIfNotBefore(m_head, beforeChild);
- if (!m_head) {
- m_head = makeWeakPtr(downcast<RenderTableSection>(child.get()));
- } else {
- resetSectionPointerIfNotBefore(m_firstBody, beforeChild);
- if (!m_firstBody)
- m_firstBody = makeWeakPtr(downcast<RenderTableSection>(child.get()));
- }
- break;
- case TABLE_FOOTER_GROUP:
- resetSectionPointerIfNotBefore(m_foot, beforeChild);
- if (!m_foot) {
- m_foot = makeWeakPtr(downcast<RenderTableSection>(child.get()));
- break;
- }
- FALLTHROUGH;
- case TABLE_ROW_GROUP:
- resetSectionPointerIfNotBefore(m_firstBody, beforeChild);
- if (!m_firstBody)
- m_firstBody = makeWeakPtr(downcast<RenderTableSection>(child.get()));
- break;
- default:
- ASSERT_NOT_REACHED();
+ m_hasColElements = true;
+}
+
+void RenderTable::willInsertTableSection(RenderTableSection& child, RenderObject* beforeChild)
+{
+ switch (child.style().display()) {
+ case TABLE_HEADER_GROUP:
+ resetSectionPointerIfNotBefore(m_head, beforeChild);
+ if (!m_head)
+ m_head = makeWeakPtr(child);
+ else {
+ resetSectionPointerIfNotBefore(m_firstBody, beforeChild);
+ if (!m_firstBody)
+ m_firstBody = makeWeakPtr(child);
}
+ break;
+ case TABLE_FOOTER_GROUP:
+ resetSectionPointerIfNotBefore(m_foot, beforeChild);
+ if (!m_foot) {
+ m_foot = makeWeakPtr(child);
+ break;
+ }
+ FALLTHROUGH;
+ case TABLE_ROW_GROUP:
+ resetSectionPointerIfNotBefore(m_firstBody, beforeChild);
+ if (!m_firstBody)
+ m_firstBody = makeWeakPtr(child);
+ break;
+ default:
+ ASSERT_NOT_REACHED();
}
- if (is<RenderTableSection>(*child))
- setNeedsSectionRecalc();
-
- builder.insertChildToRenderTable(*this, WTFMove(child), beforeChild);
+ setNeedsSectionRecalc();
}
void RenderTable::addCaption(RenderTableCaption& caption)
Modified: trunk/Source/WebCore/rendering/RenderTable.h (228528 => 228529)
--- trunk/Source/WebCore/rendering/RenderTable.h 2018-02-15 19:49:24 UTC (rev 228528)
+++ trunk/Source/WebCore/rendering/RenderTable.h 2018-02-15 20:01:58 UTC (rev 228529)
@@ -127,8 +127,6 @@
LayoutUnit calcBorderEnd() const;
void recalcBordersInRowDirection();
- void addChild(RenderTreeBuilder&, RenderPtr<RenderObject> child, RenderObject* beforeChild = 0) final;
-
struct ColumnStruct {
explicit ColumnStruct(unsigned initialSpan = 1)
: span(initialSpan)
@@ -268,7 +266,10 @@
LayoutUnit offsetHeightForColumn(const RenderTableCol&) const;
void markForPaginationRelayoutIfNeeded() final;
-
+
+ void willInsertTableColumn(RenderTableCol& child, RenderObject* beforeChild);
+ void willInsertTableSection(RenderTableSection& child, RenderObject* beforeChild);
+
protected:
void styleDidChange(StyleDifference, const RenderStyle* oldStyle) final;
void simplifiedNormalFlowLayout() final;
Modified: trunk/Source/WebCore/rendering/updating/RenderTreeBuilder.cpp (228528 => 228529)
--- trunk/Source/WebCore/rendering/updating/RenderTreeBuilder.cpp 2018-02-15 19:49:24 UTC (rev 228528)
+++ trunk/Source/WebCore/rendering/updating/RenderTreeBuilder.cpp 2018-02-15 20:01:58 UTC (rev 228529)
@@ -166,7 +166,12 @@
}
if (is<RenderTable>(parent)) {
- insertRecursiveIfNeeded(tableBuilder().findOrCreateParentForChild(downcast<RenderTable>(parent), *child, beforeChild));
+ auto& parentCandidate = tableBuilder().findOrCreateParentForChild(downcast<RenderTable>(parent), *child, beforeChild);
+ if (is<RenderTable>(parentCandidate) && &parentCandidate == &parent) {
+ tableBuilder().insertChild(downcast<RenderTable>(parentCandidate), WTFMove(child), beforeChild);
+ return;
+ }
+ insertRecursiveIfNeeded(parentCandidate);
return;
}
Modified: trunk/Source/WebCore/rendering/updating/RenderTreeBuilderTable.cpp (228528 => 228529)
--- trunk/Source/WebCore/rendering/updating/RenderTreeBuilderTable.cpp 2018-02-15 19:49:24 UTC (rev 228528)
+++ trunk/Source/WebCore/rendering/updating/RenderTreeBuilderTable.cpp 2018-02-15 20:01:58 UTC (rev 228529)
@@ -184,6 +184,12 @@
if (beforeChild && beforeChild->parent() != &parent)
beforeChild = m_builder.splitAnonymousBoxesAroundChild(parent, beforeChild);
+ auto& newChild = *child.get();
+ if (is<RenderTableSection>(newChild))
+ parent.willInsertTableSection(downcast<RenderTableSection>(newChild), beforeChild);
+ else if (is<RenderTableCol>(newChild))
+ parent.willInsertTableColumn(downcast<RenderTableCol>(newChild), beforeChild);
+
parent.RenderBox::addChild(m_builder, WTFMove(child), beforeChild);
}