| // 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 |