LayoutUnit LayoutMultiColumnSet::nextLogicalTopForUnbreakableContent(LayoutUnit flowThreadOffset, LayoutUnit contentLogicalHeight) const { ASSERT(pageLogicalTopForOffset(flowThreadOffset) == flowThreadOffset); LayoutMultiColumnFlowThread* enclosingFlowThread = multiColumnFlowThread()->enclosingFlowThread(); if (!enclosingFlowThread) { // If there's no enclosing fragmentation context, there'll ever be only one row, and all // columns there will have the same height. return flowThreadOffset; } // Assert the problematic situation. If we have no problem with the column height, why are we // even here? ASSERT(pageLogicalHeightForOffset(flowThreadOffset) < contentLogicalHeight); // There's a likelihood for subsequent rows to be taller than the first one. // TODO(mstensho): if we're doubly nested (e.g. multicol in multicol in multicol), we need to // look beyond the first row here. const MultiColumnFragmentainerGroup& firstRow = firstFragmentainerGroup(); LayoutUnit firstRowLogicalBottomInFlowThread = firstRow.logicalTopInFlowThread() + firstRow.logicalHeight() * usedColumnCount(); if (flowThreadOffset >= firstRowLogicalBottomInFlowThread) return flowThreadOffset; // We're not in the first row. Give up. LayoutUnit newLogicalHeight = enclosingFlowThread->pageLogicalHeightForOffset(firstRowLogicalBottomInFlowThread); if (contentLogicalHeight > newLogicalHeight) { // The next outer column or page doesn't have enough space either. Give up and stay where // we are. return flowThreadOffset; } return firstRowLogicalBottomInFlowThread; }
bool LayoutMultiColumnSet::isPageLogicalHeightKnown() const { return firstFragmentainerGroup().logicalHeight(); }
unsigned LayoutMultiColumnSet::actualColumnCount() const { // FIXME: remove this method. It's a meaningless question to ask the set "how many columns do // you actually have?", since that may vary for each row. return firstFragmentainerGroup().actualColumnCount(); }
LayoutUnit LayoutMultiColumnSet::logicalTopInFlowThread() const { return firstFragmentainerGroup().logicalTopInFlowThread(); }
LayoutUnit LayoutMultiColumnSet::pageLogicalHeight() const { // FIXME: pageLogicalHeight() needs to take a flow thread offset parameter, so that we can // locate the right row. return firstFragmentainerGroup().logicalHeight(); }