9329fbc10254d4ad246f7ed5ad5384d5ea82860c
[WebKit-https.git] / Source / WebCore / platform / graphics / texmap / GraphicsLayerTextureMapper.h
1 /*
2     Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies)
3
4     This library is free software; you can redistribute it and/or
5     modify it under the terms of the GNU Library General Public
6     License as published by the Free Software Foundation; either
7     version 2 of the License, or (at your option) any later version.
8
9     This library is distributed in the hope that it will be useful,
10     but WITHOUT ANY WARRANTY; without even the implied warranty of
11     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12     Library General Public License for more details.
13
14     You should have received a copy of the GNU Library General Public License
15     along with this library; see the file COPYING.LIB.  If not, write to
16     the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17     Boston, MA 02110-1301, USA.
18 */
19
20 #ifndef GraphicsLayerTextureMapper_h
21 #define GraphicsLayerTextureMapper_h
22
23 #include "GraphicsLayer.h"
24 #include "GraphicsLayerClient.h"
25 #include "Image.h"
26 #include "TextureMapperLayer.h"
27 #include "TextureMapperTiledBackingStore.h"
28 #include "Timer.h"
29
30 namespace WebCore {
31
32 class GraphicsLayerTextureMapper : public GraphicsLayer {
33 public:
34     explicit GraphicsLayerTextureMapper(GraphicsLayerClient*);
35     virtual ~GraphicsLayerTextureMapper();
36
37     // reimps from GraphicsLayer.h
38     virtual void setNeedsDisplay();
39     virtual void setContentsNeedsDisplay();
40     virtual void setNeedsDisplayInRect(const FloatRect&);
41     virtual bool setChildren(const Vector<GraphicsLayer*>&);
42     virtual void addChild(GraphicsLayer*);
43     virtual void addChildAtIndex(GraphicsLayer*, int index);
44     virtual void addChildAbove(GraphicsLayer* layer, GraphicsLayer* sibling);
45     virtual void addChildBelow(GraphicsLayer* layer, GraphicsLayer* sibling);
46     virtual bool replaceChild(GraphicsLayer* oldChild, GraphicsLayer* newChild);
47     virtual void setMaskLayer(GraphicsLayer* layer);
48     virtual void setPosition(const FloatPoint& p);
49     virtual void setAnchorPoint(const FloatPoint3D& p);
50     virtual void setSize(const FloatSize& size);
51     virtual void setTransform(const TransformationMatrix& t);
52     virtual void setChildrenTransform(const TransformationMatrix& t);
53     virtual void setPreserves3D(bool b);
54     virtual void setMasksToBounds(bool b);
55     virtual void setDrawsContent(bool b);
56     virtual void setContentsVisible(bool);
57     virtual void setContentsOpaque(bool b);
58     virtual void setBackfaceVisibility(bool b);
59     virtual void setOpacity(float opacity);
60     virtual void setContentsRect(const IntRect& r);
61     virtual void setReplicatedByLayer(GraphicsLayer*);
62     virtual void setContentsToImage(Image*);
63     virtual void setContentsToSolidColor(const Color&);
64     Color solidColor() const { return m_solidColor; }
65     virtual void setContentsToMedia(PlatformLayer*);
66     virtual void setContentsToCanvas(PlatformLayer* canvas) { setContentsToMedia(canvas); }
67     virtual void setShowDebugBorder(bool) OVERRIDE;
68     virtual void setDebugBorder(const Color&, float width) OVERRIDE;
69     virtual void setShowRepaintCounter(bool) OVERRIDE;
70     virtual void flushCompositingState(const FloatRect&);
71     virtual void flushCompositingStateForThisLayerOnly();
72     virtual void setName(const String& name);
73     virtual PlatformLayer* platformLayer() const { return m_contentsLayer; }
74
75     inline int changeMask() const { return m_changeMask; }
76
77     virtual bool addAnimation(const KeyframeValueList&, const IntSize&, const Animation*, const String&, double);
78     virtual void pauseAnimation(const String&, double);
79     virtual void removeAnimation(const String&);
80     void setAnimations(const GraphicsLayerAnimations&);
81
82     TextureMapperLayer* layer() const { return m_layer.get(); }
83
84 #if ENABLE(CSS_FILTERS)
85     virtual bool setFilters(const FilterOperations&);
86 #endif
87
88     // FIXME: It will be removed after removing dependency of CoordinatedGraphicsScene on GraphicsLayerTextureMapper.
89     void setHasOwnBackingStore(bool b) { m_hasOwnBackingStore = b; }
90     void setBackingStore(PassRefPtr<TextureMapperBackingStore>);
91
92     void setFixedToViewport(bool);
93     bool fixedToViewport() const { return m_fixedToViewport; }
94
95     Color debugBorderColor() const { return m_debugBorderColor; }
96     float debugBorderWidth() const { return m_debugBorderWidth; }
97     void setRepaintCount(int);
98
99 private:
100     virtual void willBeDestroyed();
101
102     void commitLayerChanges();
103     void updateDebugBorderAndRepaintCount();
104     void updateBackingStoreIfNeeded();
105     void prepareBackingStoreIfNeeded();
106     bool shouldHaveBackingStore() const;
107
108     // This set of flags help us defer which properties of the layer have been
109     // modified by the compositor, so we can know what to look for in the next flush.
110     enum ChangeMask {
111         NoChanges =                 0,
112
113         ChildrenChange =            (1L << 1),
114         MaskLayerChange =           (1L << 2),
115         ReplicaLayerChange =        (1L << 3),
116
117         ContentChange =             (1L << 4),
118         ContentsRectChange =        (1L << 5),
119         ContentsVisibleChange =     (1L << 6),
120         ContentsOpaqueChange =      (1L << 7),
121
122         PositionChange =            (1L << 8),
123         AnchorPointChange =         (1L << 9),
124         SizeChange =                (1L << 10),
125         TransformChange =           (1L << 11),
126         ChildrenTransformChange =   (1L << 12),
127         Preserves3DChange =         (1L << 13),
128
129         MasksToBoundsChange =       (1L << 14),
130         DrawsContentChange =        (1L << 15),
131         OpacityChange =             (1L << 16),
132         BackfaceVisibilityChange =  (1L << 17),
133
134         BackingStoreChange =        (1L << 18),
135         DisplayChange =             (1L << 19),
136         ContentsDisplayChange =     (1L << 20),
137         BackgroundColorChange =     (1L << 21),
138
139         AnimationChange =           (1L << 22),
140         FilterChange =              (1L << 23),
141
142         DebugVisualsChange =        (1L << 24),
143         RepaintCountChange =        (1L << 25),
144
145         FixedToViewporChange =      (1L << 26),
146         AnimationStarted =          (1L << 27)
147     };
148     void notifyChange(ChangeMask);
149
150     OwnPtr<TextureMapperLayer> m_layer;
151     RefPtr<TextureMapperTiledBackingStore> m_compositedImage;
152     NativeImagePtr m_compositedNativeImagePtr;
153     RefPtr<TextureMapperBackingStore> m_backingStore;
154
155     int m_changeMask;
156     bool m_needsDisplay;
157     bool m_hasOwnBackingStore;
158     bool m_fixedToViewport;
159     Color m_solidColor;
160
161     Color m_debugBorderColor;
162     float m_debugBorderWidth;
163
164     TextureMapperPlatformLayer* m_contentsLayer;
165     FloatRect m_needsDisplayRect;
166     GraphicsLayerAnimations m_animations;
167     double m_animationStartTime;
168 };
169
170 inline static GraphicsLayerTextureMapper* toGraphicsLayerTextureMapper(GraphicsLayer* layer)
171 {
172     return static_cast<GraphicsLayerTextureMapper*>(layer);
173 }
174
175 TextureMapperLayer* toTextureMapperLayer(GraphicsLayer*);
176
177 }
178 #endif // GraphicsLayerTextureMapper_h