void RenderRegion::ensureOverflowForBox(const RenderBox* box, RefPtr<RenderOverflow>& overflow, bool forceCreation) { RenderFlowThread* flowThread = this->flowThread(); ASSERT(flowThread); RenderBoxRegionInfo* boxInfo = renderBoxRegionInfo(box); if (!boxInfo && !forceCreation) return; if (boxInfo && boxInfo->overflow()) { overflow = boxInfo->overflow(); return; } LayoutRect borderBox = box->borderBoxRectInRegion(this); LayoutRect clientBox; ASSERT(flowThread->objectShouldPaintInFlowRegion(box, this)); if (!borderBox.isEmpty()) { borderBox = rectFlowPortionForBox(box, borderBox); clientBox = box->clientBoxRectInRegion(this); clientBox = rectFlowPortionForBox(box, clientBox); flowThread->flipForWritingModeLocalCoordinates(borderBox); flowThread->flipForWritingModeLocalCoordinates(clientBox); } if (boxInfo) { boxInfo->createOverflow(clientBox, borderBox); overflow = boxInfo->overflow(); } else overflow = adoptRef(new RenderOverflow(clientBox, borderBox)); }
LayoutRect RenderNamedFlowFragment::visualOverflowRect() const { if (isValid()) { RenderBoxRegionInfo* boxInfo = renderBoxRegionInfo(flowThread()); if (boxInfo && boxInfo->overflow()) return boxInfo->overflow()->visualOverflowRect(); } return RenderRegion::visualOverflowRect(); }