Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(8)

Unified Diff: Source/core/rendering/RenderBlockFlow.cpp

Issue 179993006: [New multicol] Eliminate the need for RenderMultiColumnBlock. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/rendering/RenderBlockFlow.h ('k') | Source/core/rendering/RenderMultiColumnBlock.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/rendering/RenderBlockFlow.cpp
diff --git a/Source/core/rendering/RenderBlockFlow.cpp b/Source/core/rendering/RenderBlockFlow.cpp
index 23336e8eb52c4db174c03fc8c595c0d7a6ccfb75..b4b2b4e5aea437e7e6e7b22aa4b9972bb72b6869 100644
--- a/Source/core/rendering/RenderBlockFlow.cpp
+++ b/Source/core/rendering/RenderBlockFlow.cpp
@@ -39,7 +39,7 @@
#include "core/rendering/LayoutRepainter.h"
#include "core/rendering/RenderFlowThread.h"
#include "core/rendering/RenderLayer.h"
-#include "core/rendering/RenderMultiColumnBlock.h"
+#include "core/rendering/RenderMultiColumnFlowThread.h"
#include "core/rendering/RenderText.h"
#include "core/rendering/RenderView.h"
#include "core/rendering/line/LineWidth.h"
@@ -176,10 +176,37 @@ RenderBlockFlow* RenderBlockFlow::createAnonymousBlockFlow() const
return toRenderBlockFlow(createAnonymousWithParentRendererAndDisplay(this, BLOCK));
}
+RenderObject* RenderBlockFlow::layoutSpecialExcludedChild(bool relayoutChildren, SubtreeLayoutScope& layoutScope)
+{
+ if (RenderMultiColumnFlowThread* flowThread = multiColumnFlowThread()) {
eseidel 2014/02/25 22:16:05 nit: I probably would have written this as an earl
mstensho (USE GERRIT) 2014/02/25 23:17:53 Done.
+ setLogicalTopForChild(flowThread, borderBefore() + paddingBefore());
+ flowThread->layoutColumns(relayoutChildren, layoutScope);
+ determineLogicalLeftPositionForChild(flowThread);
+ return flowThread;
+ }
+ return 0;
+}
+
+bool RenderBlockFlow::updateLogicalWidthAndColumnWidth()
+{
+ bool relayoutChildren = RenderBlock::updateLogicalWidthAndColumnWidth();
+ if (RenderMultiColumnFlowThread* flowThread = multiColumnFlowThread()) {
+ if (flowThread->computeColumnCountAndWidth())
+ relayoutChildren = true;
eseidel 2014/02/25 22:16:05 This is just return true.
mstensho (USE GERRIT) 2014/02/25 23:17:53 Done.
+ }
+ return relayoutChildren;
+}
+
void RenderBlockFlow::checkForPaginationLogicalHeightChange(LayoutUnit& pageLogicalHeight, bool& pageLogicalHeightChanged, bool& hasSpecifiedPageLogicalHeight)
{
- ColumnInfo* colInfo = columnInfo();
- if (hasColumns()) {
+ if (RenderMultiColumnFlowThread* flowThread = multiColumnFlowThread()) {
+ // We don't actually update any of the variables. We just subclassed to adjust our column height.
+ updateLogicalHeight();
+ flowThread->setColumnHeightAvailable(std::max<LayoutUnit>(contentLogicalHeight(), 0));
+ setLogicalHeight(0);
+ } else if (hasColumns()) {
eseidel 2014/02/25 22:16:05 So this will go away soon, right?
mstensho (USE GERRIT) 2014/02/25 23:17:53 Yes. :)
+ ColumnInfo* colInfo = columnInfo();
+
if (!pageLogicalHeight) {
LayoutUnit oldLogicalHeight = logicalHeight();
setLogicalHeight(0);
@@ -342,8 +369,8 @@ inline bool RenderBlockFlow::layoutBlockFlow(bool relayoutChildren, LayoutUnit &
if (lowestFloatLogicalBottom() > (logicalHeight() - afterEdge) && createsBlockFormattingContext())
setLogicalHeight(lowestFloatLogicalBottom() + afterEdge);
- if (isRenderMultiColumnBlock()) {
- if (toRenderMultiColumnBlock(this)->shouldRelayoutMultiColumnBlock()) {
+ if (RenderMultiColumnFlowThread* flowThread = multiColumnFlowThread()) {
+ if (flowThread->recalculateColumnHeights()) {
setChildNeedsLayout(MarkOnlyThis);
statePusher.pop();
return false;
@@ -1809,6 +1836,8 @@ void RenderBlockFlow::styleDidChange(StyleDifference diff, const RenderStyle* ol
parentBlockFlow->markAllDescendantsWithFloatsForLayout();
parentBlockFlow->markSiblingsWithFloatsForLayout();
}
+
+ createMultiColumnFlowThreadIfNeeded();
}
void RenderBlockFlow::updateStaticInlinePositionForChild(RenderBox* child, LayoutUnit logicalTop)
@@ -1824,6 +1853,13 @@ void RenderBlockFlow::setStaticInlinePositionForChild(RenderBox* child, LayoutUn
child->layer()->setStaticInlinePosition(inlinePosition);
}
+void RenderBlockFlow::addChild(RenderObject* newChild, RenderObject* beforeChild)
+{
+ if (RenderMultiColumnFlowThread* flowThread = multiColumnFlowThread())
+ return flowThread->addChild(newChild, beforeChild);
+ RenderBlock::addChild(newChild, beforeChild);
+}
+
void RenderBlockFlow::moveAllChildrenIncludingFloatsTo(RenderBlock* toBlock, bool fullRemoveInsert)
{
RenderBlockFlow* toBlockFlow = toRenderBlockFlow(toBlock);
@@ -2732,6 +2768,21 @@ RootInlineBox* RenderBlockFlow::createRootInlineBox()
return new RootInlineBox(this);
}
+void RenderBlockFlow::createMultiColumnFlowThreadIfNeeded()
+{
+ if ((style()->hasAutoColumnCount() && style()->hasAutoColumnWidth()) || !document().regionBasedColumnsEnabled())
+ return;
+
+ if (multiColumnFlowThread())
+ return;
+
+ setChildrenInline(false);
+ RenderMultiColumnFlowThread* flowThread = RenderMultiColumnFlowThread::createAnonymous(document(), style());
+ RenderBlock::addChild(flowThread);
+ RenderBlockFlowRareData& rareData = ensureRareData();
+ rareData.m_multiColumnFlowThread = flowThread;
eseidel 2014/02/25 22:16:05 Do we need to ASSERT that it doesnt' arleady have
mstensho (USE GERRIT) 2014/02/25 23:17:53 Done. You're right about multiColumnFlowThread(),
+}
+
RenderBlockFlow::RenderBlockFlowRareData& RenderBlockFlow::ensureRareData()
{
if (m_rareData)
« no previous file with comments | « Source/core/rendering/RenderBlockFlow.h ('k') | Source/core/rendering/RenderMultiColumnBlock.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698