void RenderMultiColumnSet::expandToEncompassFlowThreadContentsIfNeeded() { ASSERT(multiColumnFlowThread()->lastMultiColumnSet() == this); LayoutRect rect(flowThreadPortionRect()); // Get the offset within the flow thread in its block progression direction. Then get the // flow thread's remaining logical height including its overflow and expand our rect // to encompass that remaining height and overflow. The idea is that we will generate // additional columns and pages to hold that overflow, since people do write bad // content like <body style="height:0px"> in multi-column layouts. bool isHorizontal = flowThread()->isHorizontalWritingMode(); LayoutUnit logicalTopOffset = isHorizontal ? rect.y() : rect.x(); LayoutRect layoutRect = flowThread()->layoutOverflowRect(); LayoutUnit logicalHeightWithOverflow = (isHorizontal ? layoutRect.maxY() : layoutRect.maxX()) - logicalTopOffset; setFlowThreadPortionRect(LayoutRect(rect.x(), rect.y(), isHorizontal ? rect.width() : logicalHeightWithOverflow, isHorizontal ? logicalHeightWithOverflow : rect.height())); }
void RenderRegionSet::expandToEncompassFlowThreadContentsIfNeeded() { // Whenever the last region is a set, it always expands its region rect to consume all // of the flow thread content. This is because it is always capable of generating an // infinite number of boxes in order to hold all of the remaining content. LayoutRect rect(flowThreadPortionRect()); // Get the offset within the flow thread in its block progression direction. Then get the // flow thread's remaining logical height including its overflow and expand our rect // to encompass that remaining height and overflow. The idea is that we will generate // additional columns and pages to hold that overflow, since people do write bad // content like <body style="height:0px"> in multi-column layouts. bool isHorizontal = flowThread()->isHorizontalWritingMode(); LayoutUnit logicalTopOffset = isHorizontal ? rect.y() : rect.x(); LayoutRect layoutRect = flowThread()->layoutOverflowRect(); LayoutUnit logicalHeightWithOverflow = (isHorizontal ? layoutRect.maxY() : layoutRect.maxX()) - logicalTopOffset; setFlowThreadPortionRect(LayoutRect(rect.x(), rect.y(), isHorizontal ? rect.width() : logicalHeightWithOverflow, isHorizontal ? logicalHeightWithOverflow : rect.height())); }