void RenderRegion::layoutBlock(bool relayoutChildren, LayoutUnit) { StackStats::LayoutCheckPoint layoutCheckPoint; RenderBlock::layoutBlock(relayoutChildren); if (isValid()) { LayoutRect oldRegionRect(flowThreadPortionRect()); if (!isHorizontalWritingMode()) oldRegionRect = oldRegionRect.transposedRect(); if (hasAutoLogicalHeight() && !m_flowThread->inConstrainedLayoutPhase()) { m_flowThread->invalidateRegions(); clearOverrideLogicalContentHeight(); return; } if (!isRenderRegionSet() && (oldRegionRect.width() != pageLogicalWidth() || oldRegionRect.height() != pageLogicalHeight())) // This can happen even if we are in the inConstrainedLayoutPhase and it will trigger a pathological layout of the flow thread. m_flowThread->invalidateRegions(); } // FIXME: We need to find a way to set up overflow properly. Our flow thread hasn't gotten a layout // yet, so we can't look to it for correct information. It's possible we could wait until after the RenderFlowThread // gets a layout, and then try to propagate overflow information back to the region, and then mark for a second layout. // That second layout would then be able to use the information from the RenderFlowThread to set up overflow. // // The big problem though is that overflow needs to be region-specific. We can't simply use the RenderFlowThread's global // overflow values, since then we'd always think any narrow region had huge overflow (all the way to the width of the // RenderFlowThread itself). // // We'll need to expand RenderBoxRegionInfo to also hold left and right overflow values. }
void RenderNamedFlowFragment::layoutBlock(bool relayoutChildren, LayoutUnit) { StackStats::LayoutCheckPoint layoutCheckPoint; RenderRegion::layoutBlock(relayoutChildren); if (isValid()) { LayoutRect oldRegionRect(flowThreadPortionRect()); if (!isHorizontalWritingMode()) oldRegionRect = oldRegionRect.transposedRect(); if (m_flowThread->inOverflowLayoutPhase() || m_flowThread->inFinalLayoutPhase()) { computeOverflowFromFlowThread(); updateOversetState(); } if (hasAutoLogicalHeight() && m_flowThread->inMeasureContentLayoutPhase()) { m_flowThread->invalidateRegions(); clearComputedAutoHeight(); return; } if ((oldRegionRect.width() != pageLogicalWidth() || oldRegionRect.height() != pageLogicalHeight()) && !m_flowThread->inFinalLayoutPhase()) // This can happen even if we are in the inConstrainedLayoutPhase and it will trigger a pathological layout of the flow thread. m_flowThread->invalidateRegions(); } }
void RenderNamedFlowFragment::invalidateRegionIfNeeded() { if (!isValid()) return; LayoutRect oldRegionRect(flowThreadPortionRect()); if (!isHorizontalWritingMode()) oldRegionRect = oldRegionRect.transposedRect(); if ((oldRegionRect.width() != pageLogicalWidth() || oldRegionRect.height() != pageLogicalHeight()) && !m_flowThread->inFinalLayoutPhase()) { // This can happen even if we are in the inConstrainedLayoutPhase and it will trigger a pathological layout of the flow thread. m_flowThread->invalidateRegions(); } }
void RenderRegion::layout() { RenderReplaced::layout(); if (m_flowThread && isValid()) { LayoutRect oldRegionRect(regionRect()); if (!isHorizontalWritingMode()) oldRegionRect = oldRegionRect.transposedRect(); if (oldRegionRect.width() != logicalWidthForFlowThreadContent() || oldRegionRect.height() != logicalHeightForFlowThreadContent()) m_flowThread->invalidateRegions(); } // FIXME: We need to find a way to set up overflow properly. Our flow thread hasn't gotten a layout // yet, so we can't look to it for correct information. It's possible we could wait until after the RenderFlowThread // gets a layout, and then try to propagate overflow information back to the region, and then mark for a second layout. // That second layout would then be able to use the information from the RenderFlowThread to set up overflow. // // The big problem though is that overflow needs to be region-specific. We can't simply use the RenderFlowThread's global // overflow values, since then we'd always think any narrow region had huge overflow (all the way to the width of the // RenderFlowThread itself). // // We'll need to expand RenderBoxRegionInfo to also hold left and right overflow values. }