int LayoutTextControl::firstLineBoxBaseline() const { int result = LayoutBlock::firstLineBoxBaseline(); if (result != -1) return result; // When the text is empty, |LayoutBlock::firstLineBoxBaseline()| cannot // compute the baseline because lineboxes do not exist. Element* innerEditor = innerEditorElement(); if (!innerEditor || !innerEditor->layoutObject()) return -1; LayoutBlock* innerEditorLayoutObject = toLayoutBlock(innerEditor->layoutObject()); const SimpleFontData* fontData = innerEditorLayoutObject->style(true)->font().primaryFont(); DCHECK(fontData); if (!fontData) return -1; LayoutUnit baseline(fontData->getFontMetrics().ascent(AlphabeticBaseline)); for (LayoutObject* box = innerEditorLayoutObject; box && box != this; box = box->parent()) { if (box->isBox()) baseline += toLayoutBox(box)->logicalTop(); } return baseline.toInt(); }
void LayoutMultiColumnFlowThread::calculateColumnCountAndWidth(LayoutUnit& width, unsigned& count) const { LayoutBlock* columnBlock = multiColumnBlockFlow(); const ComputedStyle* columnStyle = columnBlock->style(); LayoutUnit availableWidth = columnBlock->contentLogicalWidth(); LayoutUnit columnGap = columnBlock->columnGap(); LayoutUnit computedColumnWidth = max<LayoutUnit>(1, LayoutUnit(columnStyle->columnWidth())); unsigned computedColumnCount = max<int>(1, columnStyle->columnCount()); ASSERT(!columnStyle->hasAutoColumnCount() || !columnStyle->hasAutoColumnWidth()); if (columnStyle->hasAutoColumnWidth() && !columnStyle->hasAutoColumnCount()) { count = computedColumnCount; width = std::max<LayoutUnit>(0, (availableWidth - ((count - 1) * columnGap)) / count); } else if (!columnStyle->hasAutoColumnWidth() && columnStyle->hasAutoColumnCount()) { count = std::max<LayoutUnit>(1, (availableWidth + columnGap) / (computedColumnWidth + columnGap)); width = ((availableWidth + columnGap) / count) - columnGap; } else { count = std::max<LayoutUnit>(std::min<LayoutUnit>(computedColumnCount, (availableWidth + columnGap) / (computedColumnWidth + columnGap)), 1); width = ((availableWidth + columnGap) / count) - columnGap; } }