1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
|
// 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;
}
const FloatRect& scrollContainerRelativeContainingBlockRect() const {
return m_scrollContainerRelativeContainingBlockRect;
}
void setScrollContainerRelativeStickyBoxRect(const FloatRect& rect) {
m_scrollContainerRelativeStickyBoxRect = rect;
}
const FloatRect& scrollContainerRelativeStickyBoxRect() const {
return m_scrollContainerRelativeStickyBoxRect;
}
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
|