unsigned MultiColumnFragmentainerGroup::actualColumnCount() const
{
    // We must always return a value of 1 or greater. Column count = 0 is a meaningless situation,
    // and will confuse and cause problems in other parts of the code.
    if (!m_columnHeight)
        return 1;

    // Our flow thread portion determines our column count. We have as many columns as needed to fit
    // all the content.
    LayoutUnit flowThreadPortionHeight = logicalHeightInFlowThread();
    if (!flowThreadPortionHeight)
        return 1;

    unsigned count = ceil(flowThreadPortionHeight.toFloat() / m_columnHeight.toFloat());
    ASSERT(count >= 1);
    return count;
}
unsigned MultiColumnFragmentainerGroup::actualColumnCount() const {
  // We must always return a value of 1 or greater. Column count = 0 is a
  // meaningless situation, and will confuse and cause problems in other parts
  // of the code.
  if (!m_columnHeight)
    return 1;

  // Our flow thread portion determines our column count. We have as many
  // columns as needed to fit all the content.
  LayoutUnit flowThreadPortionHeight = logicalHeightInFlowThread();
  if (!flowThreadPortionHeight)
    return 1;

  unsigned count = (flowThreadPortionHeight / m_columnHeight).floor();
  // flowThreadPortionHeight may be saturated, so detect the remainder manually.
  if (count * m_columnHeight < flowThreadPortionHeight)
    count++;
  ASSERT(count >= 1);
  return count;
}
LayoutRect LayoutMultiColumnSet::flowThreadPortionRect() const
{
    LayoutRect portionRect(LayoutUnit(), logicalTopInFlowThread(), pageLogicalWidth(), logicalHeightInFlowThread());
    if (!isHorizontalWritingMode())
        return portionRect.transposedRect();
    return portionRect;
}