• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2014 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 BackgroundImageGeometry_h
6 #define BackgroundImageGeometry_h
7 
8 #include "platform/geometry/IntPoint.h"
9 #include "platform/geometry/IntRect.h"
10 #include "platform/geometry/IntSize.h"
11 
12 namespace blink {
13 
14 class BackgroundImageGeometry {
15 public:
BackgroundImageGeometry()16     BackgroundImageGeometry()
17         : m_hasNonLocalGeometry(false)
18     { }
19 
destOrigin()20     IntPoint destOrigin() const { return m_destOrigin; }
setDestOrigin(const IntPoint & destOrigin)21     void setDestOrigin(const IntPoint& destOrigin)
22     {
23         m_destOrigin = destOrigin;
24     }
25 
destRect()26     IntRect destRect() const { return m_destRect; }
setDestRect(const IntRect & destRect)27     void setDestRect(const IntRect& destRect)
28     {
29         m_destRect = destRect;
30     }
31 
32     // Returns the phase relative to the destination rectangle.
33     IntPoint relativePhase() const;
34 
phase()35     IntPoint phase() const { return m_phase; }
setPhase(const IntPoint & phase)36     void setPhase(const IntPoint& phase)
37     {
38         m_phase = phase;
39     }
40 
tileSize()41     IntSize tileSize() const { return m_tileSize; }
setTileSize(const IntSize & tileSize)42     void setTileSize(const IntSize& tileSize)
43     {
44         m_tileSize = tileSize;
45     }
46 
47     // Space-size represents extra width and height that may be added to
48     // the image if used as a pattern with repeat: space
spaceSize()49     IntSize spaceSize() const { return m_repeatSpacing; }
setSpaceSize(const IntSize & repeatSpacing)50     void setSpaceSize(const IntSize& repeatSpacing)
51     {
52         m_repeatSpacing = repeatSpacing;
53     }
54 
setPhaseX(int x)55     void setPhaseX(int x) { m_phase.setX(x); }
setPhaseY(int y)56     void setPhaseY(int y) { m_phase.setY(y); }
57 
58     void setNoRepeatX(int xOffset);
59     void setNoRepeatY(int yOffset);
60 
61     void useFixedAttachment(const IntPoint& attachmentPoint);
62 
63     void clip(const IntRect&);
64 
65     void setHasNonLocalGeometry(bool hasNonLocalGeometry = true) { m_hasNonLocalGeometry = hasNonLocalGeometry; }
hasNonLocalGeometry()66     bool hasNonLocalGeometry() const { return m_hasNonLocalGeometry; }
67 
68 private:
69     IntRect m_destRect;
70     IntPoint m_destOrigin;
71     IntPoint m_phase;
72     IntSize m_tileSize;
73     IntSize m_repeatSpacing;
74     bool m_hasNonLocalGeometry; // Has background-attachment: fixed. Implies that we can't always cheaply compute destRect.
75 };
76 
77 #endif // BackgroundImageGeometry_h
78 
79 } // namespace blink
80