IntRect SVGInlineFlowBox::calculateBoundaries() const { IntRect childRect; for (InlineBox* child = firstChild(); child; child = child->nextOnLine()) childRect.unite(child->calculateBoundaries()); return childRect; }
LayoutRect SVGInlineFlowBox::calculateBoundaries() const { LayoutRect childRect; for (InlineBox* child = firstChild(); child; child = child->nextOnLine()) { if (!child->isSVGInlineTextBox() && !child->isSVGInlineFlowBox()) continue; childRect.unite(child->calculateBoundaries()); } return childRect; }
void SVGRootInlineBox::layoutRootBox() { RenderBlock* parentBlock = block(); ASSERT(parentBlock); IntRect childRect; for (InlineBox* child = firstChild(); child; child = child->nextOnLine()) { // Skip generated content. if (!child->renderer()->node()) continue; childRect.unite(child->calculateBoundaries()); } int xBlock = childRect.x(); int yBlock = childRect.y(); int widthBlock = childRect.width(); int heightBlock = childRect.height(); // Finally, assign the root block position, now that all content is laid out. parentBlock->setLocation(xBlock, yBlock); parentBlock->setWidth(widthBlock); parentBlock->setHeight(heightBlock); // Position all children relative to the parent block. for (InlineBox* child = firstChild(); child; child = child->nextOnLine()) { // Skip generated content. if (!child->renderer()->node()) continue; child->adjustPosition(-xBlock, -yBlock); } // Position ourselves. setX(0); setY(0); setLogicalWidth(widthBlock); setLogicalHeight(heightBlock); setBlockLogicalHeight(heightBlock); setLineTopBottomPositions(0, heightBlock); }