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"
26b3f4d3af0b06dc168453641e249d0cb9eec9b570Nicolas Roard#include "LayerContent.h"
2799e11cfb571223b4736e9fa4f4ae277ad98fe643Nicolas Roard#include "PicturePile.h"
28797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard#include "RefPtr.h"
29dea0c131566f424923425970fe5621305d136e5aJohn Reck#include "ScrollableLayerAndroid.h"
308755df31f6fd87d890d58d86eb8a4ec0088285cbNicolas Roard#include "SkBitmapRef.h"
31797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard#include "Vector.h"
32797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
338755df31f6fd87d890d58d86eb8a4ec0088285cbNicolas Roardclass SkBitmapRef;
34fa807bd31774157959640810e564fbe64338e8e3Nicolas Roardclass SkRegion;
35797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
36797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roardnamespace WebCore {
37797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
386baa213e1806af132b1f0b1170343c5ac2bf75d3Nicolas Roardclass FloatPoint3D;
396baa213e1806af132b1f0b1170343c5ac2bf75d3Nicolas Roardclass Image;
40594c6b805969c2673c84d1d1d1a3556ce376ac7aChris Craikclass LayerAndroid;
41576098317db607e1d3b32a0e53d2551ea0e7ef21Nicolas Roardclass FixedBackgroundImageLayerAndroid;
42fe812d40b53dc52d5c929e39b5e293af8b6cb4e4Patrick Scottclass ScrollableLayerAndroid;
43fe812d40b53dc52d5c929e39b5e293af8b6cb4e4Patrick Scott
4499e11cfb571223b4736e9fa4f4ae277ad98fe643Nicolas Roardclass GraphicsLayerAndroid : public GraphicsLayer, PicturePainter {
45797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roardpublic:
46797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
47797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    GraphicsLayerAndroid(GraphicsLayerClient*);
48797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual ~GraphicsLayerAndroid();
49797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
5099e11cfb571223b4736e9fa4f4ae277ad98fe643Nicolas Roard    // PicturePainter
5199e11cfb571223b4736e9fa4f4ae277ad98fe643Nicolas Roard
5299e11cfb571223b4736e9fa4f4ae277ad98fe643Nicolas Roard    virtual void paintContents(GraphicsContext* gc, IntRect& dirty);
5399e11cfb571223b4736e9fa4f4ae277ad98fe643Nicolas Roard
5499e11cfb571223b4736e9fa4f4ae277ad98fe643Nicolas Roard    /////
5599e11cfb571223b4736e9fa4f4ae277ad98fe643Nicolas Roard
56797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual void setName(const String&);
57797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
58797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    // for hosting this GraphicsLayer in a native layer hierarchy
59797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual NativeLayer nativeLayer() const;
60797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
61797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual bool setChildren(const Vector<GraphicsLayer*>&);
62797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual void addChild(GraphicsLayer*);
63797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual void addChildAtIndex(GraphicsLayer*, int index);
64797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual void addChildAbove(GraphicsLayer* layer, GraphicsLayer* sibling);
65797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual void addChildBelow(GraphicsLayer* layer, GraphicsLayer* sibling);
66797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual bool replaceChild(GraphicsLayer* oldChild, GraphicsLayer* newChild);
67cedc69e9625169d4d585fcd019af2ea5597f0ed1Nicolas Roard    virtual void setReplicatedLayer(GraphicsLayer* layer);
68797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
69797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual void removeFromParent();
70797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
71797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual void setPosition(const FloatPoint&);
72211482b53e73a386e2aabb0d3acb92e0e7ea22d4Nicolas Roard    virtual void setPreserves3D(bool b);
73797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual void setAnchorPoint(const FloatPoint3D&);
74797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual void setSize(const FloatSize&);
75797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
76f8d1bcaf8c8b020e80856c8df5417a37db4f8919Nicolas Roard    virtual void setBackfaceVisibility(bool b);
77797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual void setTransform(const TransformationMatrix&);
78797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
79797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual void setChildrenTransform(const TransformationMatrix&);
80797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
81797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual void setMaskLayer(GraphicsLayer*);
82797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual void setMasksToBounds(bool);
83797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual void setDrawsContent(bool);
84797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
85797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual void setBackgroundColor(const Color&);
86797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual void clearBackgroundColor();
87797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
88797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual void setContentsOpaque(bool);
89797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
90797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual void setOpacity(float);
91797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
92797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual void setNeedsDisplay();
93797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual void setNeedsDisplayInRect(const FloatRect&);
94797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
95797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual bool addAnimation(const KeyframeValueList& valueList,
96797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard                              const IntSize& boxSize,
97797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard                              const Animation* anim,
98797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard                              const String& keyframesName,
99797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard                              double beginTime);
100797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    bool createTransformAnimationsFromKeyframes(const KeyframeValueList&,
101797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard                                                const Animation*,
102797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard                                                const String& keyframesName,
103797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard                                                double beginTime,
104797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard                                                const IntSize& boxSize);
105797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    bool createAnimationFromKeyframes(const KeyframeValueList&,
106797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard                                      const Animation*,
107797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard                                      const String& keyframesName,
108797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard                                      double beginTime);
109797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
110797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual void removeAnimationsForProperty(AnimatedPropertyID);
111797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual void removeAnimationsForKeyframes(const String& keyframesName);
112797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual void pauseAnimation(const String& keyframesName);
113797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
114797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual void suspendAnimations(double time);
115797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual void resumeAnimations();
116797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
117797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual void setContentsToImage(Image*);
1186ca0f0452f06325e4abd3acca40a0a2f13fb644cDerek Sollenberger    virtual void setContentsToMedia(PlatformLayer*);
119797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual PlatformLayer* platformLayer() const;
120797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
121797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    void pauseDisplay(bool state);
122797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
123797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard#ifndef NDEBUG
124797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual void setDebugBackgroundColor(const Color&);
125797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual void setDebugBorder(const Color&, float borderWidth);
126797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard#endif
127797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
128797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual void setZPosition(float);
129797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
130adf365552d1a6b55782fa3b3c722f5ea914deb40Nicolas Roard    void gatherRootLayers(Vector<const RenderLayer*>&);
131797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    virtual void syncCompositingState();
132adf365552d1a6b55782fa3b3c722f5ea914deb40Nicolas Roard    virtual void syncCompositingStateForThisLayerOnly();
133ec745133ebaf0e3ede2d6656a96399f960a95876Nicolas Roard    void notifyClientAnimationStarted();
134797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
135be24d84c76bb32c72d597fce1c9de599ced95565Mike Reed    LayerAndroid* contentLayer() { return m_contentLayer; }
136a15d30f54c6edc68da7e82c198b5916dd023ac4dNicolas Roard    LayerAndroid* foregroundLayer() { return m_foregroundLayer; }
137797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
138797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    static int instancesCount();
139797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
1405b0a8b4c05b332cd6cac21d4dae8fac868f81ec8Michael Kolb    virtual void updateScrollOffset();
1415b0a8b4c05b332cd6cac21d4dae8fac868f81ec8Michael Kolb
142797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roardprivate:
143797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
1446d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba    void askForSync();
1456d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba    void syncPositionState();
1466d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba    void syncChildren();
1476d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba    void syncMask();
1486d43b9ceb777071c088fe12ee94af80e34816bcfGrace Kloba
149b3bd98d469e54700d3ec2ab372dfab59bbb63204Nicolas Roard    void updatePositionedLayers();
150a06ac8116d6d5d82316f450445453171cd7add1cPatrick Scott    void updateScrollingLayers();
151a15d30f54c6edc68da7e82c198b5916dd023ac4dNicolas Roard    void updateFixedBackgroundLayers();
1528ff99dc8bb0a50c117e493be7f1fba4668c2cf91Nicolas Roard
153e27ce86d74110353e4b3ab3726fea15ff0c67cc5Grace Kloba    // with SkPicture, we always repaint the entire layer's content.
154e27ce86d74110353e4b3ab3726fea15ff0c67cc5Grace Kloba    bool repaint();
155ec745133ebaf0e3ede2d6656a96399f960a95876Nicolas Roard    void needsNotifyClient();
156797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
157d38abfbac01ae23acad018d42382d604a45bc005John Reck    bool paintContext(LayerAndroid* layer, PicturePile& picture);
158a8d0e5a36718ee59b84a577053458bded49e369aPatrick Scott
159797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    bool m_needsSyncChildren;
160797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    bool m_needsSyncMask;
161797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    bool m_needsRepaint;
162ec745133ebaf0e3ede2d6656a96399f960a95876Nicolas Roard    bool m_needsNotifyClient;
163797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
164797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard    bool m_haveContents;
1658755df31f6fd87d890d58d86eb8a4ec0088285cbNicolas Roard    bool m_newImage;
16654e75f0875a8376c1119b019431921bc58295b79Nicolas Roard    Image* m_image;
167797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
168be24d84c76bb32c72d597fce1c9de599ced95565Mike Reed    LayerAndroid* m_contentLayer;
169576098317db607e1d3b32a0e53d2551ea0e7ef21Nicolas Roard    FixedBackgroundImageLayerAndroid* m_fixedBackgroundLayer;
170a15d30f54c6edc68da7e82c198b5916dd023ac4dNicolas Roard    LayerAndroid* m_foregroundLayer;
17182f247bdbb98dd80c44209d87692c650c3704617Patrick Scott    LayerAndroid* m_foregroundClipLayer;
172d38abfbac01ae23acad018d42382d604a45bc005John Reck
173d38abfbac01ae23acad018d42382d604a45bc005John Reck    PicturePile m_contentLayerContent;
174d38abfbac01ae23acad018d42382d604a45bc005John Reck    PicturePile m_foregroundLayerContent;
175797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard};
176797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
177797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard} // namespace WebCore
178797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
179797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
180797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard#endif // USE(ACCELERATED_COMPOSITING)
181797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard
182797e4f1087e408060f2812c79bddcd2b73a3830dNicolas Roard#endif // GraphicsLayerAndroid_h
183