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