// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef FragmentationContext_h
#define FragmentationContext_h

#include "core/CoreExport.h"
#include "platform/LayoutUnit.h"
#include "platform/geometry/LayoutSize.h"

namespace blink {

// A fragmentation context is either established by a multicol container, or by
// pages when printing. A fragmentation context consists of a series of
// fragmentainers. A fragmentainer is simply a column or page, depending on the
// type of fragmentation context. [1]
//
// A couple of methods here take a |blockOffset| parameter. This is the offset
// from the start of the fragmentation context, pretending that everything is
// laid out in one single strip (and not sliced into pages or columns).
// In multicol, this is referred to as the flow thread coordinate space.
//
// It should be noted that a multicol container may be nested inside another
// fragmentation context (another multicol container, or the pages when
// printing), although this class doesn't deal with that (it's internal to the
// multicol implementation).
//
// [1] http://www.w3.org/TR/css3-break/#fragmentation-model
class CORE_EXPORT FragmentationContext {
 public:
  virtual ~FragmentationContext() {}

  // The height of the fragmentainers may depend on the total height of the
  // contents (column balancing), in which case false is returned if we haven't
  // laid out yet. Otherwise, true is returned.
  virtual bool isFragmentainerLogicalHeightKnown() = 0;

  // Return the height of the fragmentainer at the specified offset. The
  // fragmentainer height isn't necessarily uniform all across the fragmentation
  // context.
  virtual LayoutUnit fragmentainerLogicalHeightAt(LayoutUnit blockOffset) = 0;

  // Return how much is left of the fragmentainer at the specified offset.
  // Callers typically want this information to decide whether some piece of
  // content fits in this fragmentainer, or if it has to push the content to the
  // next fragmentainer.
  virtual LayoutUnit remainingLogicalHeightAt(LayoutUnit blockOffset) = 0;

  // Return the flow thread of the fragmentation context, if it is a multicol
  // fragmentation context. Since multicol containers may be nested inside other
  // fragmentation contexts, sometimes we need to know if it's a multicol
  // container that we're dealing with.
  virtual class LayoutMultiColumnFlowThread* associatedFlowThread() {
    return nullptr;
  }
};

}  // namespace blink

#endif  // FragmentationContext_h
