Index: Source/core/rendering/RenderNamedFlowThread.cpp |
diff --git a/Source/core/rendering/RenderNamedFlowThread.cpp b/Source/core/rendering/RenderNamedFlowThread.cpp |
index 0f64ff51946c4887036b7f5fcb86dce1fd5f63f6..7b958faec9669e017857a4d705dcfaaf30645d6b 100644 |
--- a/Source/core/rendering/RenderNamedFlowThread.cpp |
+++ b/Source/core/rendering/RenderNamedFlowThread.cpp |
@@ -90,6 +90,20 @@ void RenderNamedFlowThread::clearContentNodes() |
m_contentNodes.clear(); |
} |
+void RenderNamedFlowThread::updateWritingMode() |
+{ |
+ if (m_regionList.isEmpty()) |
mihnea
2013/07/30 15:50:44
I believe you want to add an assert here instead.
mstensho (USE GERRIT)
2013/07/31 13:09:37
If you remove the last region, this list may be em
|
+ return; |
+ |
+ RenderRegion* firstRegion = m_regionList.first(); |
+ if (style()->writingMode() != firstRegion->style()->writingMode()) { |
+ // The first region defines the principal writing mode for the entire flow. |
+ RefPtr<RenderStyle> newStyle = RenderStyle::clone(style()); |
+ newStyle->setWritingMode(firstRegion->style()->writingMode()); |
+ setStyle(newStyle); |
+ } |
+} |
+ |
RenderObject* RenderNamedFlowThread::nextRendererForNode(Node* node) const |
{ |
FlowThreadChildList::const_iterator it = m_flowThreadChildList.begin(); |
@@ -244,6 +258,9 @@ void RenderNamedFlowThread::addRegionToNamedFlowThread(RenderRegion* renderRegio |
renderRegion->setIsValid(true); |
addRegionToList(m_regionList, renderRegion); |
+ |
+ if (m_regionList.first() == renderRegion) |
+ updateWritingMode(); |
} |
void RenderNamedFlowThread::addRegionToThread(RenderRegion* renderRegion) |
@@ -283,6 +300,7 @@ void RenderNamedFlowThread::removeRegionFromThread(RenderRegion* renderRegion) |
} |
ASSERT(m_regionList.contains(renderRegion)); |
+ bool wasFirst = m_regionList.first() == renderRegion; |
m_regionList.remove(renderRegion); |
if (canBeDestroyed()) |
@@ -291,6 +309,8 @@ void RenderNamedFlowThread::removeRegionFromThread(RenderRegion* renderRegion) |
// After removing all the regions in the flow the following layout needs to dispatch the regionLayoutUpdate event |
if (m_regionList.isEmpty()) |
setDispatchRegionLayoutUpdateEvent(true); |
+ else if (wasFirst) |
+ updateWritingMode(); |
invalidateRegions(); |
} |