Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(606)

Unified Diff: third_party/WebKit/Source/core/layout/FragmentainerIterator.h

Issue 2314763002: Replace collectLayerFragments() with FragmentainerIterator. (Closed)
Patch Set: code review. Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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
+
« no previous file with comments | « third_party/WebKit/Source/core/layout/BUILD.gn ('k') | third_party/WebKit/Source/core/layout/FragmentainerIterator.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698