void RenderFlowThread::regionLayoutUpdateEventTimerFired(Timer<RenderFlowThread>*) { // Create a copy of region nodes, to protect them for being destroyed in the event listener Vector<RefPtr<Node> > regionNodes; regionNodes.reserveCapacity(m_regionList.size()); for (RenderRegionList::iterator iter = m_regionList.begin(); iter != m_regionList.end(); ++iter) { RenderRegion* region = *iter; ASSERT(region->node() && region->node()->isElementNode()); // dispatch the event only for marked regions and only for those who have a listener if (region->shouldDispatchRegionLayoutUpdateEvent()) { regionNodes.append(region->node()); // clear the dispatch flag here, as it is possible to be set again due to event listeners region->setDispatchRegionLayoutUpdateEvent(false); } } for (Vector<RefPtr<Node> >::const_iterator it = regionNodes.begin(); it != regionNodes.end(); ++it) { RefPtr<Node> node = *it; RefPtr<Document> document = node->document(); if (!document) continue; RenderObject* renderer = node->renderer(); if (renderer && renderer->isRenderRegion()) { node->dispatchRegionLayoutUpdateEvent(); // Layout needs to be uptodate after each event listener document->updateLayoutIgnorePendingStylesheets(); } } }
static void writeRenderNamedFlowThreads(TextStream& ts, RenderView* renderView, const RenderLayer* rootLayer, const LayoutRect& paintRect, int indent, RenderAsTextBehavior behavior) { if (!renderView->hasRenderNamedFlowThreads()) return; const RenderNamedFlowThreadList* list = renderView->flowThreadController()->renderNamedFlowThreadList(); writeIndent(ts, indent); ts << "Flow Threads\n"; for (RenderNamedFlowThreadList::const_iterator iter = list->begin(); iter != list->end(); ++iter) { const RenderNamedFlowThread* renderFlowThread = *iter; writeIndent(ts, indent + 1); ts << "Thread with flow-name '" << renderFlowThread->flowThreadName() << "'\n"; RenderLayer* layer = renderFlowThread->layer(); writeLayers(ts, rootLayer, layer, paintRect, indent + 2, behavior); // Display the render regions attached to this flow thread const RenderRegionList& flowThreadRegionList = renderFlowThread->renderRegionList(); if (!flowThreadRegionList.isEmpty()) { writeIndent(ts, indent + 1); ts << "Regions for flow '"<< renderFlowThread->flowThreadName() << "'\n"; for (RenderRegionList::const_iterator itRR = flowThreadRegionList.begin(); itRR != flowThreadRegionList.end(); ++itRR) { RenderRegion* renderRegion = *itRR; writeIndent(ts, indent + 2); ts << "RenderRegion"; if (renderRegion->node()) { String tagName = getTagName(renderRegion->node()); if (!tagName.isEmpty()) ts << " {" << tagName << "}"; if (renderRegion->node()->isElementNode() && renderRegion->node()->hasID()) { Element* element = static_cast<Element*>(renderRegion->node()); ts << " #" << element->idForStyleResolution(); } if (renderRegion->hasCustomRegionStyle()) ts << " region style: 1"; } if (!renderRegion->isValid()) ts << " invalid"; ts << "\n"; } } } }