diff options
Diffstat (limited to 'Source/WebCore/rendering/FlowThreadController.cpp')
-rw-r--r-- | Source/WebCore/rendering/FlowThreadController.cpp | 38 |
1 files changed, 21 insertions, 17 deletions
diff --git a/Source/WebCore/rendering/FlowThreadController.cpp b/Source/WebCore/rendering/FlowThreadController.cpp index 476c924b8..9edd0aa7e 100644 --- a/Source/WebCore/rendering/FlowThreadController.cpp +++ b/Source/WebCore/rendering/FlowThreadController.cpp @@ -31,12 +31,11 @@ #include "FlowThreadController.h" +#include "NamedFlowCollection.h" #include "RenderFlowThread.h" -#include "RenderFlowThreadContainer.h" #include "RenderNamedFlowThread.h" #include "StyleInheritedData.h" #include "WebKitNamedFlow.h" -#include "WebKitNamedFlowCollection.h" #include <wtf/text/AtomicString.h> namespace WebCore { @@ -49,7 +48,6 @@ PassOwnPtr<FlowThreadController> FlowThreadController::create(RenderView* view) FlowThreadController::FlowThreadController(RenderView* view) : m_view(view) , m_currentRenderFlowThread(0) - , m_flowThreadContainer(0) , m_isRenderNamedFlowThreadOrderDirty(false) { } @@ -60,11 +58,6 @@ FlowThreadController::~FlowThreadController() RenderNamedFlowThread* FlowThreadController::ensureRenderFlowThreadWithName(const AtomicString& name) { - if (!m_flowThreadContainer) { - m_flowThreadContainer = new (m_view->renderArena()) RenderFlowThreadContainer(m_view->document()); - m_flowThreadContainer->setStyle(RenderFlowThread::createFlowThreadStyle(m_view->style())); - m_view->addChild(m_flowThreadContainer); - } if (!m_renderNamedFlowThreadList) m_renderNamedFlowThreadList = adoptPtr(new RenderNamedFlowThreadList()); else { @@ -75,7 +68,7 @@ RenderNamedFlowThread* FlowThreadController::ensureRenderFlowThreadWithName(cons } } - WebKitNamedFlowCollection* namedFlows = m_view->document()->namedFlows(); + NamedFlowCollection* namedFlows = m_view->document()->namedFlows(); // Sanity check for the absence of a named flow in the "CREATED" state with the same name. ASSERT(!namedFlows->flowByName(name)); @@ -84,8 +77,8 @@ RenderNamedFlowThread* FlowThreadController::ensureRenderFlowThreadWithName(cons flowRenderer->setStyle(RenderFlowThread::createFlowThreadStyle(m_view->style())); m_renderNamedFlowThreadList->add(flowRenderer); - // Keep the flow renderer as a child of RenderFlowThreadContainer. - m_flowThreadContainer->addChild(flowRenderer); + // Keep the flow renderer as a child of RenderView. + m_view->addChild(flowRenderer); setIsRenderNamedFlowThreadOrderDirty(true); @@ -105,6 +98,23 @@ void FlowThreadController::layoutRenderNamedFlowThreads() { ASSERT(m_renderNamedFlowThreadList); + // Remove the left-over flow threads. + RenderNamedFlowThreadList toRemoveList; + for (RenderNamedFlowThreadList::iterator iter = m_renderNamedFlowThreadList->begin(); iter != m_renderNamedFlowThreadList->end(); ++iter) { + RenderNamedFlowThread* flowRenderer = *iter; + if (flowRenderer->isMarkedForDestruction()) + toRemoveList.add(flowRenderer); + } + + if (toRemoveList.size() > 0) + setIsRenderNamedFlowThreadOrderDirty(true); + + for (RenderNamedFlowThreadList::iterator iter = toRemoveList.begin(); iter != toRemoveList.end(); ++iter) { + RenderNamedFlowThread* flowRenderer = *iter; + m_renderNamedFlowThreadList->remove(flowRenderer); + flowRenderer->destroy(); + } + if (isRenderNamedFlowThreadOrderDirty()) { // Arrange the thread list according to dependencies. RenderNamedFlowThreadList sortedList; @@ -146,10 +156,4 @@ void FlowThreadController::unregisterNamedFlowContentNode(Node* contentNode) m_mapNamedFlowContentNodes.remove(contentNode); } -void FlowThreadController::removeFlowThread(RenderNamedFlowThread* flowThread) -{ - m_renderNamedFlowThreadList->remove(flowThread); - setIsRenderNamedFlowThreadOrderDirty(true); -} - } // namespace WebCore |