1797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard/*
2797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard * Copyright (C) 2009 The Android Open Source Project
3797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard *
4797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard * Licensed under the Apache License, Version 2.0 (the "License");
5797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard * you may not use this file except in compliance with the License.
6797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard * You may obtain a copy of the License at
7797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard *
8797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard *      http://www.apache.org/licenses/LICENSE-2.0
9797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard *
10797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard * Unless required by applicable law or agreed to in writing, software
11797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard * distributed under the License is distributed on an "AS IS" BASIS,
12797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard * See the License for the specific language governing permissions and
14797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard * limitations under the License.
15797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard */
16797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
17797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard#ifndef GraphicsLayerAndroid_h
18797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard#define GraphicsLayerAndroid_h
19797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
20797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard#if USE(ACCELERATED_COMPOSITING)
21797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
22797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard#include "FloatRect.h"
23797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard#include "Frame.h"
24797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard#include "GraphicsLayer.h"
25797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard#include "GraphicsLayerClient.h"
26797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard#include "LayerAndroid.h"
27797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard#include "RefPtr.h"
288755df31f6fd87d890d58d86eb8a4ec0088285cbNicolas Roard#include "SkBitmapRef.h"
29797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard#include "Vector.h"
30797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
31797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roardclass FloatPoint3D;
32797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roardclass Image;
338755df31f6fd87d890d58d86eb8a4ec0088285cbNicolas Roardclass SkBitmapRef;
34fa807bd31774157959640810e564fbe64338e8e3Nicolas Roardclass SkRegion;
35797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
36797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roardnamespace WebCore {
37797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
38fe812d40b53dc52d5c929e39b5e293af8b6cb4e4Patrick Scottclass ScrollableLayerAndroid;
39fe812d40b53dc52d5c929e39b5e293af8b6cb4e4Patrick Scott
40797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roardclass GraphicsLayerAndroid : public GraphicsLayer {
41797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roardpublic:
42797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
43797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    GraphicsLayerAndroid(GraphicsLayerClient*);
44797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual ~GraphicsLayerAndroid();
45797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
46797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual void setName(const String&);
47797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
48797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    // for hosting this GraphicsLayer in a native layer hierarchy
49797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual NativeLayer nativeLayer() const;
50797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
51797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual bool setChildren(const Vector<GraphicsLayer*>&);
52797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual void addChild(GraphicsLayer*);
53797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual void addChildAtIndex(GraphicsLayer*, int index);
54797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual void addChildAbove(GraphicsLayer* layer, GraphicsLayer* sibling);
55797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual void addChildBelow(GraphicsLayer* layer, GraphicsLayer* sibling);
56797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual bool replaceChild(GraphicsLayer* oldChild, GraphicsLayer* newChild);
57797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
58797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual void removeFromParent();
59797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
60797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual void setPosition(const FloatPoint&);
61211482b53e73a386e2aabb0d3acb92e0e7ea22d4Nicolas Roard    virtual void setPreserves3D(bool b);
62797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual void setAnchorPoint(const FloatPoint3D&);
63797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual void setSize(const FloatSize&);
64797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
65f8d1bcaf8c8b020e80856c8df5417a37db4f8919Nicolas Roard    virtual void setBackfaceVisibility(bool b);
66797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual void setTransform(const TransformationMatrix&);
67797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
68797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual void setChildrenTransform(const TransformationMatrix&);
69797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
70797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual void setMaskLayer(GraphicsLayer*);
71797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual void setMasksToBounds(bool);
72797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual void setDrawsContent(bool);
73797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
74797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual void setBackgroundColor(const Color&);
75797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual void clearBackgroundColor();
76797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
77797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual void setContentsOpaque(bool);
78797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
79797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual void setOpacity(float);
80797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
81797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual void setNeedsDisplay();
82797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual void setNeedsDisplayInRect(const FloatRect&);
83797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
84797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual bool addAnimation(const KeyframeValueList& valueList,
85797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard                              const IntSize& boxSize,
86797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard                              const Animation* anim,
87797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard                              const String& keyframesName,
88797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard                              double beginTime);
89797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    bool createTransformAnimationsFromKeyframes(const KeyframeValueList&,
90797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard                                                const Animation*,
91797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard                                                const String& keyframesName,
92797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard                                                double beginTime,
93797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard                                                const IntSize& boxSize);
94797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    bool createAnimationFromKeyframes(const KeyframeValueList&,
95797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard                                      const Animation*,
96797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard                                      const String& keyframesName,
97797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard                                      double beginTime);
98797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
99797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual void removeAnimationsForProperty(AnimatedPropertyID);
100797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual void removeAnimationsForKeyframes(const String& keyframesName);
101797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual void pauseAnimation(const String& keyframesName);
102797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
103797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual void suspendAnimations(double time);
104797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual void resumeAnimations();
105797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
106797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual void setContentsToImage(Image*);
1076ca0f0452f06325e4abd3acca40a0a2f13fb644cDerek Sollenberger    virtual void setContentsToMedia(PlatformLayer*);
108797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual PlatformLayer* platformLayer() const;
109797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
110797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    void pauseDisplay(bool state);
111797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
112797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard#ifndef NDEBUG
113797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual void setDebugBackgroundColor(const Color&);
114797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual void setDebugBorder(const Color&, float borderWidth);
115797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard#endif
116797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
117797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual void setZPosition(float);
118797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
11961e0d189f2b74650bf72a6a2820f66a8b17c3d06Nicolas Roard    void gatherRootLayers(Vector<const RenderLayer*>&);
120797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual void syncCompositingState();
12161e0d189f2b74650bf72a6a2820f66a8b17c3d06Nicolas Roard    virtual void syncCompositingStateForThisLayerOnly();
122ec745133ebaf0e3ede2d6656a96399f960a95876Nicolas Roard    void notifyClientAnimationStarted();
123797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
124be24d84c76bb32c72d597fce1c9de599ced95565Mike Reed    LayerAndroid* contentLayer() { return m_contentLayer; }
125797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
126797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    static int instancesCount();
127797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
128797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roardprivate:
129797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
1306d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba    void askForSync();
1316d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba    void syncPositionState();
1326d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba    void syncChildren();
1336d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba    void syncMask();
1346d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba
1358ff99dc8bb0a50c117e493be7f1fba4668c2cf91Nicolas Roard    void updateFixedPosition();
136a06ac8116d6d5d82316f450445453171cd7add1cPatrick Scott    void updateScrollingLayers();
1378ff99dc8bb0a50c117e493be7f1fba4668c2cf91Nicolas Roard
138e27ce86d74110353e4b3ab3726fea15ff0c67cc5Grace Kloba    // with SkPicture, we always repaint the entire layer's content.
139e27ce86d74110353e4b3ab3726fea15ff0c67cc5Grace Kloba    bool repaint();
140ec745133ebaf0e3ede2d6656a96399f960a95876Nicolas Roard    void needsNotifyClient();
141797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
142a8d0e5a36718ee59b84a577053458bded49e369aPatrick Scott    bool paintContext(SkPicture* context, const IntRect& rect);
143a8d0e5a36718ee59b84a577053458bded49e369aPatrick Scott
144797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    bool m_needsSyncChildren;
145797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    bool m_needsSyncMask;
146797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    bool m_needsRepaint;
147ec745133ebaf0e3ede2d6656a96399f960a95876Nicolas Roard    bool m_needsNotifyClient;
148797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
149797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    bool m_haveContents;
1508755df31f6fd87d890d58d86eb8a4ec0088285cbNicolas Roard    bool m_newImage;
15154e75f0875a8376c1119b019431921bc58295b79Nicolas Roard    Image* m_image;
152797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
153fa807bd31774157959640810e564fbe64338e8e3Nicolas Roard    SkRegion m_dirtyRegion;
154797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
155be24d84c76bb32c72d597fce1c9de599ced95565Mike Reed    LayerAndroid* m_contentLayer;
156fe812d40b53dc52d5c929e39b5e293af8b6cb4e4Patrick Scott    ScrollableLayerAndroid* m_foregroundLayer;
15782f247bdbb98dd80c44209d87692c650c3704617Patrick Scott    LayerAndroid* m_foregroundClipLayer;
158797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard};
159797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
160797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard} // namespace WebCore
161797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
162797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
163797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard#endif // USE(ACCELERATED_COMPOSITING)
164797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
165797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard#endif // GraphicsLayerAndroid_h
166