| Index: third_party/WebKit/Source/core/layout/FragmentainerIterator.h
|
| diff --git a/third_party/WebKit/Source/core/layout/FragmentainerIterator.h b/third_party/WebKit/Source/core/layout/FragmentainerIterator.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..43a6a07ccc94193f048801b527345f671c109204
|
| --- /dev/null
|
| +++ b/third_party/WebKit/Source/core/layout/FragmentainerIterator.h
|
| @@ -0,0 +1,59 @@
|
| +// Copyright 2016 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 FragmentainerIterator_h
|
| +#define FragmentainerIterator_h
|
| +
|
| +#include "core/layout/LayoutFlowThread.h"
|
| +
|
| +namespace blink {
|
| +
|
| +class MultiColumnFragmentainerGroup;
|
| +
|
| +// Used to find the fragmentainers that intersect with a given portion of the flow thread. The
|
| +// portion typically corresponds to the bounds of some descendant layout object. The iterator walks
|
| +// in block direction order.
|
| +class FragmentainerIterator {
|
| +public:
|
| + FragmentainerIterator(const LayoutFlowThread&, const LayoutRect& physicalBoundingBoxInFlowThread, const LayoutRect& clipRectInMulticolContainer);
|
| +
|
| + // Advance to the next fragmentainer. Not allowed to call this if atEnd() is true.
|
| + void advance();
|
| +
|
| + // Return true if we have walked through all relevant fragmentainers.
|
| + bool atEnd() const { return !m_currentColumnSet; }
|
| +
|
| + // The physical translation to apply to shift the box when converting from flowthread to visual
|
| + // coordinates.
|
| + LayoutSize paginationOffset() const { DCHECK(!atEnd()); return m_paginationOffset; }
|
| +
|
| + // Return the physical clip rectangle of the current fragmentainer, relative to the flow thread.
|
| + LayoutRect clipRectInFlowThread() const { DCHECK(!atEnd()); return m_clipRectInFlowThread; }
|
| +
|
| +private:
|
| + const LayoutFlowThread& m_flowThread;
|
| + const LayoutRect m_clipRectInMulticolContainer;
|
| +
|
| + const LayoutMultiColumnSet* m_currentColumnSet;
|
| + unsigned m_currentFragmentainerGroupIndex;
|
| + unsigned m_currentFragmentainerIndex;
|
| + unsigned m_endFragmentainerIndex;
|
| +
|
| + LayoutUnit m_logicalTopInFlowThread;
|
| + LayoutUnit m_logicalBottomInFlowThread;
|
| +
|
| + LayoutSize m_paginationOffset;
|
| + LayoutRect m_clipRectInFlowThread;
|
| +
|
| + const MultiColumnFragmentainerGroup& currentGroup() const;
|
| + void moveToNextFragmentainerGroup();
|
| + bool setFragmentainersOfInterest();
|
| + void updateOutput();
|
| + void setAtEnd() { m_currentColumnSet = nullptr; }
|
| +};
|
| +
|
| +} // namespace blink
|
| +
|
| +#endif // FragmentainerIterator_h
|
| +
|
|
|