Index: third_party/WebKit/Source/core/page/scrolling/StickyPositionScrollingConstraints.h |
diff --git a/third_party/WebKit/Source/core/page/scrolling/StickyPositionScrollingConstraints.h b/third_party/WebKit/Source/core/page/scrolling/StickyPositionScrollingConstraints.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..e9fd95b4609d0999039fee0c855a431ecdea6b31 |
--- /dev/null |
+++ b/third_party/WebKit/Source/core/page/scrolling/StickyPositionScrollingConstraints.h |
@@ -0,0 +1,85 @@ |
+// 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 StickyPositionScrollingConstraints_h |
+#define StickyPositionScrollingConstraints_h |
+ |
+#include "platform/geometry/FloatRect.h" |
+ |
+namespace blink { |
+ |
+class StickyPositionScrollingConstraints final { |
+public: |
+ enum AnchorEdgeFlags { |
+ AnchorEdgeLeft = 1 << 0, |
+ AnchorEdgeRight = 1 << 1, |
+ AnchorEdgeTop = 1 << 2, |
+ AnchorEdgeBottom = 1 << 3 |
+ }; |
+ typedef unsigned AnchorEdges; |
+ |
+ StickyPositionScrollingConstraints() |
+ : m_anchorEdges(0) |
+ , m_leftOffset(0) |
+ , m_rightOffset(0) |
+ , m_topOffset(0) |
+ , m_bottomOffset(0) |
+ { } |
+ |
+ StickyPositionScrollingConstraints(const StickyPositionScrollingConstraints& other) |
+ : m_anchorEdges(other.m_anchorEdges) |
+ , m_leftOffset(other.m_leftOffset) |
+ , m_rightOffset(other.m_rightOffset) |
+ , m_topOffset(other.m_topOffset) |
+ , m_bottomOffset(other.m_bottomOffset) |
+ , m_scrollContainerRelativeContainingBlockRect(other.m_scrollContainerRelativeContainingBlockRect) |
+ , m_scrollContainerRelativeStickyBoxRect(other.m_scrollContainerRelativeStickyBoxRect) |
+ { } |
+ |
+ FloatSize computeStickyOffset(const FloatRect& viewportRect) const; |
+ |
+ AnchorEdges anchorEdges() const { return m_anchorEdges; } |
+ bool hasAnchorEdge(AnchorEdgeFlags flag) const { return m_anchorEdges & flag; } |
+ void addAnchorEdge(AnchorEdgeFlags edgeFlag) { m_anchorEdges |= edgeFlag; } |
+ void setAnchorEdges(AnchorEdges edges) { m_anchorEdges = edges; } |
+ |
+ float leftOffset() const { return m_leftOffset; } |
+ float rightOffset() const { return m_rightOffset; } |
+ float topOffset() const { return m_topOffset; } |
+ float bottomOffset() const { return m_bottomOffset; } |
+ |
+ void setLeftOffset(float offset) { m_leftOffset = offset; } |
+ void setRightOffset(float offset) { m_rightOffset = offset; } |
+ void setTopOffset(float offset) { m_topOffset = offset; } |
+ void setBottomOffset(float offset) { m_bottomOffset = offset; } |
+ |
+ void setScrollContainerRelativeContainingBlockRect(const FloatRect& rect) { m_scrollContainerRelativeContainingBlockRect = rect; } |
+ |
+ void setScrollContainerRelativeStickyBoxRect(const FloatRect& rect) { m_scrollContainerRelativeStickyBoxRect = rect; } |
+ |
+ bool operator==(const StickyPositionScrollingConstraints& other) const |
+ { |
+ return m_leftOffset == other.m_leftOffset |
+ && m_rightOffset == other.m_rightOffset |
+ && m_topOffset == other.m_topOffset |
+ && m_bottomOffset == other.m_bottomOffset |
+ && m_scrollContainerRelativeContainingBlockRect == other.m_scrollContainerRelativeContainingBlockRect |
+ && m_scrollContainerRelativeStickyBoxRect == other.m_scrollContainerRelativeStickyBoxRect; |
+ } |
+ |
+ bool operator!=(const StickyPositionScrollingConstraints& other) const { return !(*this == other); } |
+ |
+private: |
+ AnchorEdges m_anchorEdges; |
+ float m_leftOffset; |
+ float m_rightOffset; |
+ float m_topOffset; |
+ float m_bottomOffset; |
+ FloatRect m_scrollContainerRelativeContainingBlockRect; |
+ FloatRect m_scrollContainerRelativeStickyBoxRect; |
+}; |
+ |
+} // namespace blink |
+ |
+#endif // StickyPositionScrollingConstraints_h |