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