3d919fa46035151e59a4522ab58dc503dee8ccdb
[WebKit-https.git] / Source / WebKit / chromium / public / platform / WebLayer.h
1 /*
2  * Copyright (C) 2011 Google Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  *
8  * 1.  Redistributions of source code must retain the above copyright
9  *     notice, this list of conditions and the following disclaimer.
10  * 2.  Redistributions in binary form must reproduce the above copyright
11  *     notice, this list of conditions and the following disclaimer in the
12  *     documentation and/or other materials provided with the distribution.
13  *
14  * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
15  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
16  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
17  * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
18  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
19  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
20  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
21  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
23  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #ifndef WebLayer_h
27 #define WebLayer_h
28
29 #include "WebColor.h"
30 #include "WebCommon.h"
31 #include "WebPrivatePtr.h"
32
33 class SkMatrix44;
34 namespace WebCore { class LayerChromium; }
35
36 namespace WebKit {
37 struct WebFloatPoint;
38 struct WebSize;
39
40 class WebLayer {
41 public:
42     WEBKIT_EXPORT static WebLayer create();
43
44     WebLayer() { }
45     WebLayer(const WebLayer& layer) { assign(layer); }
46     virtual ~WebLayer() { reset(); }
47     WebLayer& operator=(const WebLayer& layer)
48     {
49         assign(layer);
50         return *this;
51     }
52     bool isNull() { return m_private.isNull(); }
53     WEBKIT_EXPORT void reset();
54     WEBKIT_EXPORT void assign(const WebLayer&);
55     WEBKIT_EXPORT bool equals(const WebLayer&) const;
56
57     WEBKIT_EXPORT WebLayer rootLayer() const;
58     WEBKIT_EXPORT WebLayer parent() const;
59     WEBKIT_EXPORT void addChild(const WebLayer&);
60     WEBKIT_EXPORT void insertChild(const WebLayer&, size_t index);
61     WEBKIT_EXPORT void replaceChild(const WebLayer& reference, const WebLayer& newLayer);
62     WEBKIT_EXPORT void removeFromParent();
63     WEBKIT_EXPORT void removeAllChildren();
64
65     WEBKIT_EXPORT void setAnchorPoint(const WebFloatPoint&);
66     WEBKIT_EXPORT WebFloatPoint anchorPoint() const;
67
68     WEBKIT_EXPORT void setAnchorPointZ(float);
69     WEBKIT_EXPORT float anchorPointZ() const;
70
71     WEBKIT_EXPORT void setBounds(const WebSize&);
72     WEBKIT_EXPORT WebSize bounds() const;
73
74     WEBKIT_EXPORT void setMasksToBounds(bool);
75     WEBKIT_EXPORT bool masksToBounds() const;
76
77     WEBKIT_EXPORT void setMaskLayer(const WebLayer&);
78     WEBKIT_EXPORT WebLayer maskLayer() const;
79
80     WEBKIT_EXPORT void setOpacity(float);
81     WEBKIT_EXPORT float opacity() const;
82
83     WEBKIT_EXPORT void setOpaque(bool);
84     WEBKIT_EXPORT bool opaque() const;
85
86     WEBKIT_EXPORT void setPosition(const WebFloatPoint&);
87     WEBKIT_EXPORT WebFloatPoint position() const;
88
89     WEBKIT_EXPORT void setSublayerTransform(const SkMatrix44&);
90     WEBKIT_EXPORT SkMatrix44 sublayerTransform() const;
91
92     WEBKIT_EXPORT void setTransform(const SkMatrix44&);
93     WEBKIT_EXPORT SkMatrix44 transform() const;
94
95     WEBKIT_EXPORT void setDebugBorderColor(const WebColor&);
96     WEBKIT_EXPORT void setDebugBorderWidth(float);
97
98     template<typename T> T to()
99     {
100         T res;
101         res.WebLayer::assign(*this);
102         return res;
103     }
104
105     template<typename T> const T toConst() const
106     {
107         T res;
108         res.WebLayer::assign(*this);
109         return res;
110     }
111
112 #if WEBKIT_IMPLEMENTATION
113     WebLayer(const WTF::PassRefPtr<WebCore::LayerChromium>&);
114     WebLayer& operator=(const WTF::PassRefPtr<WebCore::LayerChromium>&);
115     operator WTF::PassRefPtr<WebCore::LayerChromium>() const;
116     template<typename T> T* unwrap()
117     {
118         return static_cast<T*>(m_private.get());
119     }
120
121     template<typename T> const T* constUnwrap() const
122     {
123         return static_cast<const T*>(m_private.get());
124     }
125 #endif
126
127 protected:
128     WebPrivatePtr<WebCore::LayerChromium> m_private;
129 };
130
131 inline bool operator==(const WebLayer& a, const WebLayer& b)
132 {
133     return a.equals(b);
134 }
135
136 inline bool operator!=(const WebLayer& a, const WebLayer& b)
137 {
138     return !(a == b);
139 }
140
141 } // namespace WebKit
142
143 #endif // WebLayer_h