4ccd38e615f050af7350ab4d93d5b3d530c868ed
[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 #if !USE(COORDINATED_GRAPHICS)
24
25 #include "GraphicsLayer.h"
26 #include "GraphicsLayerClient.h"
27 #include "Image.h"
28 #include "TextureMapperLayer.h"
29 #include "TextureMapperPlatformLayer.h"
30 #include "TextureMapperTiledBackingStore.h"
31 #include "Timer.h"
32
33 namespace WebCore {
34
35 class GraphicsLayerTextureMapper final : public GraphicsLayer, TextureMapperPlatformLayer::Client {
36 public:
37     explicit GraphicsLayerTextureMapper(Type, GraphicsLayerClient&);
38     virtual ~GraphicsLayerTextureMapper();
39
40     void setScrollClient(TextureMapperLayer::ScrollingClient* client) { m_layer.setScrollClient(client); }
41     void setID(uint32_t id) { m_layer.setID(id); }
42
43     // GraphicsLayer
44     bool setChildren(const Vector<GraphicsLayer*>&) override;
45     void addChild(GraphicsLayer*) override;
46     void addChildAtIndex(GraphicsLayer*, int index) override;
47     void addChildAbove(GraphicsLayer*, GraphicsLayer* sibling) override;
48     void addChildBelow(GraphicsLayer*, GraphicsLayer* sibling) override;
49     bool replaceChild(GraphicsLayer* oldChild, GraphicsLayer* newChild) override;
50
51     void setMaskLayer(GraphicsLayer*) override;
52     void setReplicatedByLayer(GraphicsLayer*) override;
53     void setPosition(const FloatPoint&) override;
54     void setAnchorPoint(const FloatPoint3D&) override;
55     void setSize(const FloatSize&) override;
56     void setTransform(const TransformationMatrix&) override;
57     void setChildrenTransform(const TransformationMatrix&) override;
58     void setPreserves3D(bool) override;
59     void setMasksToBounds(bool) override;
60     void setDrawsContent(bool) override;
61     void setContentsVisible(bool) override;
62     void setContentsOpaque(bool) override;
63     void setBackfaceVisibility(bool) override;
64     void setOpacity(float) override;
65     bool setFilters(const FilterOperations&) override;
66
67     void setNeedsDisplay() override;
68     void setNeedsDisplayInRect(const FloatRect&, ShouldClipToLayer = ClipToLayer) override;
69     void setContentsNeedsDisplay() override;
70     void setContentsRect(const FloatRect&) override;
71
72     bool addAnimation(const KeyframeValueList&, const FloatSize&, const Animation*, const String&, double) override;
73     void pauseAnimation(const String&, double) override;
74     void removeAnimation(const String&) override;
75
76     void setContentsToImage(Image*) override;
77     void setContentsToSolidColor(const Color&) override;
78     void setContentsToPlatformLayer(PlatformLayer*, ContentsLayerPurpose) override;
79     bool usesContentsLayer() const override { return m_contentsLayer; }
80     PlatformLayer* platformLayer() const override { return m_contentsLayer; }
81
82     void setShowDebugBorder(bool) override;
83     void setDebugBorder(const Color&, float width) override;
84     void setShowRepaintCounter(bool) override;
85
86     void flushCompositingState(const FloatRect&, bool) override;
87     void flushCompositingStateForThisLayerOnly(bool) override;
88
89     void updateBackingStoreIncludingSubLayers();
90
91     TextureMapperLayer& layer() { return m_layer; }
92
93     void didCommitScrollOffset(const IntSize&);
94     void setIsScrollable(bool);
95     bool isScrollable() const { return m_isScrollable; }
96
97     void setFixedToViewport(bool);
98     bool fixedToViewport() const { return m_fixedToViewport; }
99
100     Color debugBorderColor() const { return m_debugBorderColor; }
101     float debugBorderWidth() const { return m_debugBorderWidth; }
102     void setRepaintCount(int);
103
104     void setAnimations(const TextureMapperAnimations&);
105
106 private:
107     // GraphicsLayer
108     bool isGraphicsLayerTextureMapper() const override { return true; }
109
110     // TextureMapperPlatformLayer::Client
111     void platformLayerWillBeDestroyed() override { setContentsToPlatformLayer(0, NoContentsLayer); }
112     void setPlatformLayerNeedsDisplay() override { setContentsNeedsDisplay(); }
113
114     void commitLayerChanges();
115     void updateDebugBorderAndRepaintCount();
116     void updateBackingStoreIfNeeded();
117     void prepareBackingStoreIfNeeded();
118     bool shouldHaveBackingStore() const;
119
120     // This set of flags help us defer which properties of the layer have been
121     // modified by the compositor, so we can know what to look for in the next flush.
122     enum ChangeMask {
123         NoChanges =                 0,
124
125         ChildrenChange =            (1L << 1),
126         MaskLayerChange =           (1L << 2),
127         ReplicaLayerChange =        (1L << 3),
128
129         ContentChange =             (1L << 4),
130         ContentsRectChange =        (1L << 5),
131         ContentsVisibleChange =     (1L << 6),
132         ContentsOpaqueChange =      (1L << 7),
133
134         PositionChange =            (1L << 8),
135         AnchorPointChange =         (1L << 9),
136         SizeChange =                (1L << 10),
137         TransformChange =           (1L << 11),
138         ChildrenTransformChange =   (1L << 12),
139         Preserves3DChange =         (1L << 13),
140
141         MasksToBoundsChange =       (1L << 14),
142         DrawsContentChange =        (1L << 15),
143         OpacityChange =             (1L << 16),
144         BackfaceVisibilityChange =  (1L << 17),
145
146         BackingStoreChange =        (1L << 18),
147         DisplayChange =             (1L << 19),
148         ContentsDisplayChange =     (1L << 20),
149         BackgroundColorChange =     (1L << 21),
150
151         AnimationChange =           (1L << 22),
152         FilterChange =              (1L << 23),
153
154         DebugVisualsChange =        (1L << 24),
155         RepaintCountChange =        (1L << 25),
156
157         FixedToViewporChange =      (1L << 26),
158         AnimationStarted =          (1L << 27),
159
160         CommittedScrollOffsetChange =     (1L << 28),
161         IsScrollableChange =              (1L << 29)
162     };
163     void notifyChange(ChangeMask);
164
165     TextureMapperLayer m_layer;
166     RefPtr<TextureMapperTiledBackingStore> m_compositedImage;
167     NativeImagePtr m_compositedNativeImagePtr;
168     RefPtr<TextureMapperBackingStore> m_backingStore;
169
170     int m_changeMask;
171     bool m_needsDisplay;
172     bool m_fixedToViewport;
173     Color m_solidColor;
174
175     Color m_debugBorderColor;
176     float m_debugBorderWidth;
177
178     TextureMapperPlatformLayer* m_contentsLayer;
179     FloatRect m_needsDisplayRect;
180     TextureMapperAnimations m_animations;
181     double m_animationStartTime;
182
183     IntSize m_committedScrollOffset;
184     bool m_isScrollable;
185 };
186
187 } // namespace WebCore
188
189 SPECIALIZE_TYPE_TRAITS_GRAPHICSLAYER(WebCore::GraphicsLayerTextureMapper, isGraphicsLayerTextureMapper())
190
191 #endif
192
193 #endif // GraphicsLayerTextureMapper_h