void FlowThreadController::updateFlowThreadsIntoFinalPhase() { for (auto iter = m_renderNamedFlowThreadList->rbegin(), end = m_renderNamedFlowThreadList->rend(); iter != end; ++iter) { RenderNamedFlowThread* flowRenderer = *iter; flowRenderer->layoutIfNeeded(); if (flowRenderer->needsTwoPhasesLayout()) { flowRenderer->markRegionsForOverflowLayoutIfNeeded(); flowRenderer->clearNeedsTwoPhasesLayout(); } flowRenderer->setLayoutPhase(RenderFlowThread::LayoutPhaseFinal); } }
void FlowThreadController::updateFlowThreadsIntoOverflowPhase() { for (auto iter = m_renderNamedFlowThreadList->rbegin(), end = m_renderNamedFlowThreadList->rend(); iter != end; ++iter) { RenderNamedFlowThread* flowRenderer = *iter; ASSERT(!flowRenderer->hasRegions() || flowRenderer->hasValidRegionInfo()); ASSERT(!flowRenderer->needsTwoPhasesLayout()); // In the overflow computation phase the flow threads start in the constrained phase even though optimizations didn't set the state before. flowRenderer->setLayoutPhase(RenderFlowThread::LayoutPhaseConstrained); flowRenderer->layoutIfNeeded(); flowRenderer->markRegionsForOverflowLayoutIfNeeded(); flowRenderer->setLayoutPhase(RenderFlowThread::LayoutPhaseOverflow); } }
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::updateFlowThreadsNeedingTwoStepLayout() { bool needsTwoPassLayout = false; for (RenderNamedFlowThreadList::iterator iter = m_renderNamedFlowThreadList->begin(); iter != m_renderNamedFlowThreadList->end(); ++iter) { RenderNamedFlowThread* flowRenderer = *iter; if (flowRenderer->needsTwoPhasesLayout()) { needsTwoPassLayout = true; break; } } if (needsTwoPassLayout) resetFlowThreadsWithAutoHeightRegions(); return needsTwoPassLayout; }
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; }