RenderObject* RenderRubyRun::layoutSpecialExcludedChild(bool relayoutChildren) { // Don't bother positioning the RenderRubyRun yet. RenderRubyText* rt = rubyText(); if (!rt) return 0; if (relayoutChildren) rt->setChildNeedsLayout(true, false); rt->layoutIfNeeded(); return rt; }
RenderObject* RenderRubyRun::layoutSpecialExcludedChild(bool relayoutChildren, SubtreeLayoutScope& layoutScope) { // Don't bother positioning the RenderRubyRun yet. RenderRubyText* rt = rubyText(); if (!rt) return 0; if (relayoutChildren) layoutScope.setChildNeedsLayout(rt); rt->layoutIfNeeded(); return rt; }
RenderObject* RenderRubyRun::layoutSpecialExcludedChild(bool relayoutChildren) { StackStats::LayoutCheckPoint layoutCheckPoint; // Don't bother positioning the RenderRubyRun yet. RenderRubyText* rt = rubyText(); if (!rt) return 0; if (relayoutChildren) rt->setChildNeedsLayout(MarkOnlyThis); rt->layoutIfNeeded(); return rt; }
void RenderRubyRun::layout() { RenderBlock::layout(); RenderRubyText* rt = rubyText(); if (!rt) return; rt->setLogicalLeft(0); // Place the RenderRubyText such that its bottom is flush with the lineTop of the first line of the RenderRubyBase. LayoutUnit lastLineRubyTextBottom = rt->logicalHeight(); LayoutUnit firstLineRubyTextTop = 0; RootInlineBox* rootBox = rt->lastRootBox(); if (rootBox) { // In order to align, we have to ignore negative leading. firstLineRubyTextTop = rt->firstRootBox()->logicalTopLayoutOverflow(); lastLineRubyTextBottom = rootBox->logicalBottomLayoutOverflow(); } if (style()->isFlippedLinesWritingMode() == (style()->rubyPosition() == RubyPositionAfter)) { LayoutUnit firstLineTop = 0; if (RenderRubyBase* rb = rubyBase()) { RootInlineBox* rootBox = rb->firstRootBox(); if (rootBox) firstLineTop = rootBox->logicalTopLayoutOverflow(); firstLineTop += rb->logicalTop(); } rt->setLogicalTop(-lastLineRubyTextBottom + firstLineTop); } else { LayoutUnit lastLineBottom = logicalHeight(); if (RenderRubyBase* rb = rubyBase()) { RootInlineBox* rootBox = rb->lastRootBox(); if (rootBox) lastLineBottom = rootBox->logicalBottomLayoutOverflow(); lastLineBottom += rb->logicalTop(); } rt->setLogicalTop(-firstLineRubyTextTop + lastLineBottom); } // Update our overflow to account for the new RenderRubyText position. computeOverflow(clientLogicalBottom()); }