Chromium Code Reviews| 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(); |
| } |