OLD | NEW |
(Empty) | |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #ifndef StickyPositionScrollingConstraints_h |
| 6 #define StickyPositionScrollingConstraints_h |
| 7 |
| 8 #include "platform/geometry/FloatRect.h" |
| 9 |
| 10 namespace blink { |
| 11 |
| 12 class StickyPositionScrollingConstraints final { |
| 13 public: |
| 14 enum AnchorEdgeFlags { |
| 15 AnchorEdgeLeft = 1 << 0, |
| 16 AnchorEdgeRight = 1 << 1, |
| 17 AnchorEdgeTop = 1 << 2, |
| 18 AnchorEdgeBottom = 1 << 3 |
| 19 }; |
| 20 typedef unsigned AnchorEdges; |
| 21 |
| 22 StickyPositionScrollingConstraints() |
| 23 : m_anchorEdges(0) |
| 24 , m_leftOffset(0) |
| 25 , m_rightOffset(0) |
| 26 , m_topOffset(0) |
| 27 , m_bottomOffset(0) |
| 28 { } |
| 29 |
| 30 StickyPositionScrollingConstraints(const StickyPositionScrollingConstraints&
other) |
| 31 : m_anchorEdges(other.m_anchorEdges) |
| 32 , m_leftOffset(other.m_leftOffset) |
| 33 , m_rightOffset(other.m_rightOffset) |
| 34 , m_topOffset(other.m_topOffset) |
| 35 , m_bottomOffset(other.m_bottomOffset) |
| 36 , m_scrollContainerRelativeContainingBlockRect(other.m_scrollContainerRe
lativeContainingBlockRect) |
| 37 , m_scrollContainerRelativeStickyBoxRect(other.m_scrollContainerRelative
StickyBoxRect) |
| 38 { } |
| 39 |
| 40 FloatSize computeStickyOffset(const FloatRect& viewportRect) const; |
| 41 |
| 42 AnchorEdges anchorEdges() const { return m_anchorEdges; } |
| 43 bool hasAnchorEdge(AnchorEdgeFlags flag) const { return m_anchorEdges & flag
; } |
| 44 void addAnchorEdge(AnchorEdgeFlags edgeFlag) { m_anchorEdges |= edgeFlag; } |
| 45 void setAnchorEdges(AnchorEdges edges) { m_anchorEdges = edges; } |
| 46 |
| 47 float leftOffset() const { return m_leftOffset; } |
| 48 float rightOffset() const { return m_rightOffset; } |
| 49 float topOffset() const { return m_topOffset; } |
| 50 float bottomOffset() const { return m_bottomOffset; } |
| 51 |
| 52 void setLeftOffset(float offset) { m_leftOffset = offset; } |
| 53 void setRightOffset(float offset) { m_rightOffset = offset; } |
| 54 void setTopOffset(float offset) { m_topOffset = offset; } |
| 55 void setBottomOffset(float offset) { m_bottomOffset = offset; } |
| 56 |
| 57 void setScrollContainerRelativeContainingBlockRect(const FloatRect& rect) {
m_scrollContainerRelativeContainingBlockRect = rect; } |
| 58 |
| 59 void setScrollContainerRelativeStickyBoxRect(const FloatRect& rect) { m_scro
llContainerRelativeStickyBoxRect = rect; } |
| 60 |
| 61 bool operator==(const StickyPositionScrollingConstraints& other) const |
| 62 { |
| 63 return m_leftOffset == other.m_leftOffset |
| 64 && m_rightOffset == other.m_rightOffset |
| 65 && m_topOffset == other.m_topOffset |
| 66 && m_bottomOffset == other.m_bottomOffset |
| 67 && m_scrollContainerRelativeContainingBlockRect == other.m_scrollCon
tainerRelativeContainingBlockRect |
| 68 && m_scrollContainerRelativeStickyBoxRect == other.m_scrollContainer
RelativeStickyBoxRect; |
| 69 } |
| 70 |
| 71 bool operator!=(const StickyPositionScrollingConstraints& other) const { ret
urn !(*this == other); } |
| 72 |
| 73 private: |
| 74 AnchorEdges m_anchorEdges; |
| 75 float m_leftOffset; |
| 76 float m_rightOffset; |
| 77 float m_topOffset; |
| 78 float m_bottomOffset; |
| 79 FloatRect m_scrollContainerRelativeContainingBlockRect; |
| 80 FloatRect m_scrollContainerRelativeStickyBoxRect; |
| 81 }; |
| 82 |
| 83 } // namespace blink |
| 84 |
| 85 #endif // StickyPositionScrollingConstraints_h |
OLD | NEW |