• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2009 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #ifndef GraphicsLayerAndroid_h
18 #define GraphicsLayerAndroid_h
19 
20 #if USE(ACCELERATED_COMPOSITING)
21 
22 #include "FloatRect.h"
23 #include "Frame.h"
24 #include "GraphicsLayer.h"
25 #include "GraphicsLayerClient.h"
26 #include "LayerContent.h"
27 #include "PicturePile.h"
28 #include "RefPtr.h"
29 #include "ScrollableLayerAndroid.h"
30 #include "SkBitmapRef.h"
31 #include "Vector.h"
32 
33 class SkBitmapRef;
34 class SkRegion;
35 
36 namespace WebCore {
37 
38 class FloatPoint3D;
39 class Image;
40 class LayerAndroid;
41 class FixedBackgroundImageLayerAndroid;
42 class ScrollableLayerAndroid;
43 
44 class GraphicsLayerAndroid : public GraphicsLayer, PicturePainter {
45 public:
46 
47     GraphicsLayerAndroid(GraphicsLayerClient*);
48     virtual ~GraphicsLayerAndroid();
49 
50     // PicturePainter
51 
52     virtual void paintContents(GraphicsContext* gc, IntRect& dirty);
53 
54     /////
55 
56     virtual void setName(const String&);
57 
58     // for hosting this GraphicsLayer in a native layer hierarchy
59     virtual NativeLayer nativeLayer() const;
60 
61     virtual bool setChildren(const Vector<GraphicsLayer*>&);
62     virtual void addChild(GraphicsLayer*);
63     virtual void addChildAtIndex(GraphicsLayer*, int index);
64     virtual void addChildAbove(GraphicsLayer* layer, GraphicsLayer* sibling);
65     virtual void addChildBelow(GraphicsLayer* layer, GraphicsLayer* sibling);
66     virtual bool replaceChild(GraphicsLayer* oldChild, GraphicsLayer* newChild);
67     virtual void setReplicatedLayer(GraphicsLayer* layer);
68 
69     virtual void removeFromParent();
70 
71     virtual void setPosition(const FloatPoint&);
72     virtual void setPreserves3D(bool b);
73     virtual void setAnchorPoint(const FloatPoint3D&);
74     virtual void setSize(const FloatSize&);
75 
76     virtual void setBackfaceVisibility(bool b);
77     virtual void setTransform(const TransformationMatrix&);
78 
79     virtual void setChildrenTransform(const TransformationMatrix&);
80 
81     virtual void setMaskLayer(GraphicsLayer*);
82     virtual void setMasksToBounds(bool);
83     virtual void setDrawsContent(bool);
84 
85     virtual void setBackgroundColor(const Color&);
86     virtual void clearBackgroundColor();
87 
88     virtual void setContentsOpaque(bool);
89 
90     virtual void setOpacity(float);
91 
92     virtual void setNeedsDisplay();
93     virtual void setNeedsDisplayInRect(const FloatRect&);
94 
95     virtual bool addAnimation(const KeyframeValueList& valueList,
96                               const IntSize& boxSize,
97                               const Animation* anim,
98                               const String& keyframesName,
99                               double beginTime);
100     bool createTransformAnimationsFromKeyframes(const KeyframeValueList&,
101                                                 const Animation*,
102                                                 const String& keyframesName,
103                                                 double beginTime,
104                                                 const IntSize& boxSize);
105     bool createAnimationFromKeyframes(const KeyframeValueList&,
106                                       const Animation*,
107                                       const String& keyframesName,
108                                       double beginTime);
109 
110     virtual void removeAnimationsForProperty(AnimatedPropertyID);
111     virtual void removeAnimationsForKeyframes(const String& keyframesName);
112     virtual void pauseAnimation(const String& keyframesName);
113 
114     virtual void suspendAnimations(double time);
115     virtual void resumeAnimations();
116 
117     virtual void setContentsToImage(Image*);
118     virtual void setContentsToMedia(PlatformLayer*);
119     virtual PlatformLayer* platformLayer() const;
120 
121     void pauseDisplay(bool state);
122 
123 #ifndef NDEBUG
124     virtual void setDebugBackgroundColor(const Color&);
125     virtual void setDebugBorder(const Color&, float borderWidth);
126 #endif
127 
128     virtual void setZPosition(float);
129 
130     void gatherRootLayers(Vector<const RenderLayer*>&);
131     virtual void syncCompositingState();
132     virtual void syncCompositingStateForThisLayerOnly();
133     void notifyClientAnimationStarted();
134 
contentLayer()135     LayerAndroid* contentLayer() { return m_contentLayer; }
foregroundLayer()136     LayerAndroid* foregroundLayer() { return m_foregroundLayer; }
137 
138     static int instancesCount();
139 
140     virtual void updateScrollOffset();
141 
142 private:
143 
144     void askForSync();
145     void syncPositionState();
146     void syncChildren();
147     void syncMask();
148 
149     void updatePositionedLayers();
150     void updateScrollingLayers();
151     void updateFixedBackgroundLayers();
152 
153     // with SkPicture, we always repaint the entire layer's content.
154     bool repaint();
155     void needsNotifyClient();
156 
157     bool paintContext(LayerAndroid* layer, PicturePile& picture);
158 
159     bool m_needsSyncChildren;
160     bool m_needsSyncMask;
161     bool m_needsRepaint;
162     bool m_needsNotifyClient;
163 
164     bool m_haveContents;
165     bool m_newImage;
166     Image* m_image;
167 
168     LayerAndroid* m_contentLayer;
169     FixedBackgroundImageLayerAndroid* m_fixedBackgroundLayer;
170     LayerAndroid* m_foregroundLayer;
171     LayerAndroid* m_foregroundClipLayer;
172 
173     PicturePile m_contentLayerContent;
174     PicturePile m_foregroundLayerContent;
175 };
176 
177 } // namespace WebCore
178 
179 
180 #endif // USE(ACCELERATED_COMPOSITING)
181 
182 #endif // GraphicsLayerAndroid_h
183