void FlowThreadController::resetFlowThreadsWithAutoHeightRegions() { for (RenderNamedFlowThreadList::iterator iter = m_renderNamedFlowThreadList->begin(); iter != m_renderNamedFlowThreadList->end(); ++iter) { RenderNamedFlowThread* flowRenderer = *iter; if (flowRenderer->hasAutoLogicalHeightRegions()) { flowRenderer->markAutoLogicalHeightRegionsForLayout(); flowRenderer->invalidateRegions(); } } }
void FlowThreadController::updateFlowThreadsIntoConstrainedPhase() { // Walk the flow chain in reverse order to update the auto-height regions and compute correct sizes for the containing regions. Only after this we can // set the flow in the constrained layout phase. for (RenderNamedFlowThreadList::reverse_iterator iter = m_renderNamedFlowThreadList->rbegin(); iter != m_renderNamedFlowThreadList->rend(); ++iter) { RenderNamedFlowThread* flowRenderer = *iter; ASSERT(!flowRenderer->hasRegions() || flowRenderer->hasValidRegionInfo()); flowRenderer->layoutIfNeeded(); if (flowRenderer->hasAutoLogicalHeightRegions()) { ASSERT(flowRenderer->needsTwoPhasesLayout()); flowRenderer->markAutoLogicalHeightRegionsForLayout(); } flowRenderer->setInConstrainedLayoutPhase(true); flowRenderer->clearNeedsTwoPhasesLayout(); } }
bool FlowThreadController::updateFlowThreadsNeedingLayout() { bool needsTwoPassLayout = false; for (RenderNamedFlowThreadList::iterator iter = m_renderNamedFlowThreadList->begin(); iter != m_renderNamedFlowThreadList->end(); ++iter) { RenderNamedFlowThread* flowRenderer = *iter; ASSERT(!flowRenderer->needsTwoPhasesLayout()); flowRenderer->setInConstrainedLayoutPhase(false); if (flowRenderer->needsLayout() && flowRenderer->hasAutoLogicalHeightRegions()) needsTwoPassLayout = true; } if (needsTwoPassLayout) resetFlowThreadsWithAutoHeightRegions(); return needsTwoPassLayout; }
bool FlowThreadController::updateFlowThreadsNeedingLayout() { bool needsTwoPassLayout = false; for (auto iter = m_renderNamedFlowThreadList->begin(), end = m_renderNamedFlowThreadList->end(); iter != end; ++iter) { RenderNamedFlowThread* flowRenderer = *iter; ASSERT(!flowRenderer->needsTwoPhasesLayout()); ASSERT(flowRenderer->inMeasureContentLayoutPhase()); if (flowRenderer->needsLayout() && flowRenderer->hasAutoLogicalHeightRegions()) needsTwoPassLayout = true; } if (needsTwoPassLayout) resetFlowThreadsWithAutoHeightRegions(); return needsTwoPassLayout; }