18f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian/* 2f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch * Copyright (C) 2010 Apple Inc. All rights reserved. 38f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * 48f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * Redistribution and use in source and binary forms, with or without 58f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * modification, are permitted provided that the following conditions 68f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * are met: 78f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * 1. Redistributions of source code must retain the above copyright 88f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * notice, this list of conditions and the following disclaimer. 98f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * 2. Redistributions in binary form must reproduce the above copyright 108f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * notice, this list of conditions and the following disclaimer in the 118f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * documentation and/or other materials provided with the distribution. 128f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * 138f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY 148f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 158f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 168f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 178f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 188f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 198f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 208f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 218f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 228f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 238f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 248f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian */ 258f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 26f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#ifndef GraphicsLayerCA_h 27f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#define GraphicsLayerCA_h 288f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 298f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#if USE(ACCELERATED_COMPOSITING) 308f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 318f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#include "GraphicsLayer.h" 32f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#include "Image.h" 33f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#include "PlatformCAAnimation.h" 34cad810f21b803229eb11403f9209855525a25d57Steve Block#include "PlatformCALayerClient.h" 35d0825bca7fe65beaee391d30da42e937db621564Steve Block#include <wtf/HashMap.h> 360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include <wtf/HashSet.h> 378f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#include <wtf/RetainPtr.h> 38f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick#include <wtf/text/StringHash.h> 398f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 408f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qiannamespace WebCore { 418f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 42f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochclass PlatformCALayer; 43f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 44cad810f21b803229eb11403f9209855525a25d57Steve Blockclass GraphicsLayerCA : public GraphicsLayer, public PlatformCALayerClient { 458f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qianpublic: 46f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch // The width and height of a single tile in a tiled layer. Should be large enough to 47f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch // avoid lots of small tiles (and therefore lots of drawing callbacks), but small enough 48f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch // to keep the overall tile cost low. 49f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch static const int kTiledLayerTileSize = 512; 508f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 51f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch GraphicsLayerCA(GraphicsLayerClient*); 52f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch virtual ~GraphicsLayerCA(); 538f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 548f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual void setName(const String&); 558f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 56f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch virtual PlatformLayer* platformLayer() const; 57cad810f21b803229eb11403f9209855525a25d57Steve Block virtual PlatformCALayer* platformCALayer() const { return primaryLayer(); } 588f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 5965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch virtual float contentsScale() const { return m_contentsScale; } 6065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch virtual void setContentsScale(float); 6165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 62643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual bool setChildren(const Vector<GraphicsLayer*>&); 638f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual void addChild(GraphicsLayer*); 648f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual void addChildAtIndex(GraphicsLayer*, int index); 658f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual void addChildAbove(GraphicsLayer* layer, GraphicsLayer* sibling); 668f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual void addChildBelow(GraphicsLayer* layer, GraphicsLayer* sibling); 678f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual bool replaceChild(GraphicsLayer* oldChild, GraphicsLayer* newChild); 688f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 698f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual void removeFromParent(); 708f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 71231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block virtual void setMaskLayer(GraphicsLayer*); 72d0825bca7fe65beaee391d30da42e937db621564Steve Block virtual void setReplicatedLayer(GraphicsLayer*); 73231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 748f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual void setPosition(const FloatPoint&); 758f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual void setAnchorPoint(const FloatPoint3D&); 768f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual void setSize(const FloatSize&); 778f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 788f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual void setTransform(const TransformationMatrix&); 798f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 808f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual void setChildrenTransform(const TransformationMatrix&); 818f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 828f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual void setPreserves3D(bool); 838f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual void setMasksToBounds(bool); 848f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual void setDrawsContent(bool); 85f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch virtual void setAcceleratesDrawing(bool); 868f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch virtual void setBackgroundColor(const Color&); 888f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual void clearBackgroundColor(); 898f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 908f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual void setContentsOpaque(bool); 918f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual void setBackfaceVisibility(bool); 928f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 938f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // return true if we started an animation 940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch virtual void setOpacity(float); 958f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 968f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual void setNeedsDisplay(); 978f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual void setNeedsDisplayInRect(const FloatRect&); 9806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen virtual void setContentsNeedsDisplay(); 99231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch virtual void setContentsRect(const IntRect&); 1010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch virtual void suspendAnimations(double time); 1038f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual void resumeAnimations(); 1048f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 105bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen virtual bool addAnimation(const KeyframeValueList&, const IntSize& boxSize, const Animation*, const String& animationName, double timeOffset); 106bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen virtual void pauseAnimation(const String& animationName, double timeOffset); 107bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen virtual void removeAnimation(const String& animationName); 108bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1098f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual void setContentsToImage(Image*); 110d0825bca7fe65beaee391d30da42e937db621564Steve Block virtual void setContentsToMedia(PlatformLayer*); 111dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch virtual void setContentsToCanvas(PlatformLayer*); 112dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 113967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch virtual bool hasContentsLayer() const { return m_contentsLayer; } 1148f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 1158f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual void setDebugBackgroundColor(const Color&); 1168f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual void setDebugBorder(const Color&, float borderWidth); 1178f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 118cad810f21b803229eb11403f9209855525a25d57Steve Block virtual void layerDidDisplay(PlatformLayer*); 119d0825bca7fe65beaee391d30da42e937db621564Steve Block 1200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch void recursiveCommitChanges(); 1210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch virtual void syncCompositingState(); 123ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block virtual void syncCompositingStateForThisLayerOnly(); 1240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1252daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch bool allowTiledLayer() const { return m_allowTiledLayer; } 1262daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch virtual void setAllowTiledLayer(bool b); 1272daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 1280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochprotected: 1290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch virtual void setOpacityInternal(float); 1300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1318f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qianprivate: 132cad810f21b803229eb11403f9209855525a25d57Steve Block // PlatformCALayerClient overrides 133cad810f21b803229eb11403f9209855525a25d57Steve Block virtual void platformCALayerLayoutSublayersOfLayer(PlatformCALayer*) { } 134cad810f21b803229eb11403f9209855525a25d57Steve Block virtual bool platformCALayerRespondsToLayoutChanges() const { return false; } 135cad810f21b803229eb11403f9209855525a25d57Steve Block 136cad810f21b803229eb11403f9209855525a25d57Steve Block virtual void platformCALayerAnimationStarted(CFTimeInterval beginTime); 137cad810f21b803229eb11403f9209855525a25d57Steve Block virtual CompositingCoordinatesOrientation platformCALayerContentsOrientation() const { return contentsOrientation(); } 138cad810f21b803229eb11403f9209855525a25d57Steve Block virtual void platformCALayerPaintContents(GraphicsContext& context, const IntRect& clip) { paintGraphicsLayerContents(context, clip); } 139cad810f21b803229eb11403f9209855525a25d57Steve Block virtual bool platformCALayerShowDebugBorders() const { return showDebugBorders(); } 140cad810f21b803229eb11403f9209855525a25d57Steve Block virtual bool platformCALayerShowRepaintCounter() const { return showRepaintCounter(); } 141cad810f21b803229eb11403f9209855525a25d57Steve Block virtual int platformCALayerIncrementRepaintCount() { return incrementRepaintCount(); } 142cad810f21b803229eb11403f9209855525a25d57Steve Block 143cad810f21b803229eb11403f9209855525a25d57Steve Block virtual bool platformCALayerContentsOpaque() const { return contentsOpaque(); } 144cad810f21b803229eb11403f9209855525a25d57Steve Block virtual bool platformCALayerDrawsContent() const { return drawsContent(); } 145cad810f21b803229eb11403f9209855525a25d57Steve Block virtual void platformCALayerLayerDidDisplay(PlatformLayer* layer) { return layerDidDisplay(layer); } 146cad810f21b803229eb11403f9209855525a25d57Steve Block 1470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch void updateOpacityOnLayer(); 1480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 149f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch PlatformCALayer* primaryLayer() const { return m_structuralLayer.get() ? m_structuralLayer.get() : m_layer.get(); } 150f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch PlatformCALayer* hostLayerForSublayers() const; 151f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch PlatformCALayer* layerForSuperlayer() const; 152f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch PlatformCALayer* animatedLayer(AnimatedPropertyID) const; 1538f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 154d0825bca7fe65beaee391d30da42e937db621564Steve Block typedef String CloneID; // Identifier for a given clone, based on original/replica branching down the tree. 155d0825bca7fe65beaee391d30da42e937db621564Steve Block static bool isReplicatedRootClone(const CloneID& cloneID) { return cloneID[0U] & 1; } 156d0825bca7fe65beaee391d30da42e937db621564Steve Block 157f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch typedef HashMap<CloneID, RefPtr<PlatformCALayer> > LayerMap; 158d0825bca7fe65beaee391d30da42e937db621564Steve Block LayerMap* primaryLayerClones() const { return m_structuralLayer.get() ? m_structuralLayerClones.get() : m_layerClones.get(); } 159bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen LayerMap* animatedLayerClones(AnimatedPropertyID) const; 160d0825bca7fe65beaee391d30da42e937db621564Steve Block 161bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen bool createAnimationFromKeyframes(const KeyframeValueList&, const Animation*, const String& animationName, double timeOffset); 162bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen bool createTransformAnimationsFromKeyframes(const KeyframeValueList&, const Animation*, const String& animationName, double timeOffset, const IntSize& boxSize); 1638f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 1640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // Return autoreleased animation (use RetainPtr?) 165f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch PassRefPtr<PlatformCAAnimation> createBasicAnimation(const Animation*, AnimatedPropertyID, bool additive); 166f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch PassRefPtr<PlatformCAAnimation> createKeyframeAnimation(const Animation*, AnimatedPropertyID, bool additive); 167f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch void setupAnimation(PlatformCAAnimation*, const Animation*, bool additive); 1680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 169f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch const TimingFunction* timingFunctionForAnimationValue(const AnimationValue*, const Animation*); 1700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 171f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch bool setAnimationEndpoints(const KeyframeValueList&, const Animation*, PlatformCAAnimation*); 172f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch bool setAnimationKeyframes(const KeyframeValueList&, const Animation*, PlatformCAAnimation*); 1738f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 174f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch bool setTransformAnimationEndpoints(const KeyframeValueList&, const Animation*, PlatformCAAnimation*, int functionIndex, TransformOperation::OperationType, bool isMatrixAnimation, const IntSize& boxSize); 175f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch bool setTransformAnimationKeyframes(const KeyframeValueList&, const Animation*, PlatformCAAnimation*, int functionIndex, TransformOperation::OperationType, bool isMatrixAnimation, const IntSize& boxSize); 1760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 177bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen bool animationIsRunning(const String& animationName) const 1780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { 179bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return m_runningAnimations.find(animationName) != m_runningAnimations.end(); 1800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 1818f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 182d0825bca7fe65beaee391d30da42e937db621564Steve Block void commitLayerChangesBeforeSublayers(); 183d0825bca7fe65beaee391d30da42e937db621564Steve Block void commitLayerChangesAfterSublayers(); 184d0825bca7fe65beaee391d30da42e937db621564Steve Block 185e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block FloatSize constrainedSize() const; 186e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block 1878f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian bool requiresTiledLayer(const FloatSize&) const; 1888f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian void swapFromOrToTiledLayer(bool useTiledLayer); 1898f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 1900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch CompositingCoordinatesOrientation defaultContentsOrientation() const; 1910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch void updateContentsTransform(); 1928f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 193f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch void setupContentsLayer(PlatformCALayer*); 194f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch PlatformCALayer* contentsLayer() const { return m_contentsLayer.get(); } 195d0825bca7fe65beaee391d30da42e937db621564Steve Block 196d0825bca7fe65beaee391d30da42e937db621564Steve Block virtual void setReplicatedByLayer(GraphicsLayer*); 197d0825bca7fe65beaee391d30da42e937db621564Steve Block 198d0825bca7fe65beaee391d30da42e937db621564Steve Block // Used to track the path down the tree for replica layers. 199d0825bca7fe65beaee391d30da42e937db621564Steve Block struct ReplicaState { 200d0825bca7fe65beaee391d30da42e937db621564Steve Block static const size_t maxReplicaDepth = 16; 201d0825bca7fe65beaee391d30da42e937db621564Steve Block enum ReplicaBranchType { ChildBranch = 0, ReplicaBranch = 1 }; 202d0825bca7fe65beaee391d30da42e937db621564Steve Block ReplicaState(ReplicaBranchType firstBranch) 203d0825bca7fe65beaee391d30da42e937db621564Steve Block : m_replicaDepth(0) 204d0825bca7fe65beaee391d30da42e937db621564Steve Block { 205d0825bca7fe65beaee391d30da42e937db621564Steve Block push(firstBranch); 206d0825bca7fe65beaee391d30da42e937db621564Steve Block } 207d0825bca7fe65beaee391d30da42e937db621564Steve Block 208d0825bca7fe65beaee391d30da42e937db621564Steve Block // Called as we walk down the tree to build replicas. 209d0825bca7fe65beaee391d30da42e937db621564Steve Block void push(ReplicaBranchType branchType) 210d0825bca7fe65beaee391d30da42e937db621564Steve Block { 211d0825bca7fe65beaee391d30da42e937db621564Steve Block m_replicaBranches.append(branchType); 212d0825bca7fe65beaee391d30da42e937db621564Steve Block if (branchType == ReplicaBranch) 213d0825bca7fe65beaee391d30da42e937db621564Steve Block ++m_replicaDepth; 214d0825bca7fe65beaee391d30da42e937db621564Steve Block } 215d0825bca7fe65beaee391d30da42e937db621564Steve Block 216d0825bca7fe65beaee391d30da42e937db621564Steve Block void setBranchType(ReplicaBranchType branchType) 217d0825bca7fe65beaee391d30da42e937db621564Steve Block { 218d0825bca7fe65beaee391d30da42e937db621564Steve Block ASSERT(!m_replicaBranches.isEmpty()); 219d0825bca7fe65beaee391d30da42e937db621564Steve Block 220d0825bca7fe65beaee391d30da42e937db621564Steve Block if (m_replicaBranches.last() != branchType) { 221d0825bca7fe65beaee391d30da42e937db621564Steve Block if (branchType == ReplicaBranch) 222d0825bca7fe65beaee391d30da42e937db621564Steve Block ++m_replicaDepth; 223d0825bca7fe65beaee391d30da42e937db621564Steve Block else 224d0825bca7fe65beaee391d30da42e937db621564Steve Block --m_replicaDepth; 225d0825bca7fe65beaee391d30da42e937db621564Steve Block } 226d0825bca7fe65beaee391d30da42e937db621564Steve Block 227d0825bca7fe65beaee391d30da42e937db621564Steve Block m_replicaBranches.last() = branchType; 228d0825bca7fe65beaee391d30da42e937db621564Steve Block } 229d0825bca7fe65beaee391d30da42e937db621564Steve Block 230d0825bca7fe65beaee391d30da42e937db621564Steve Block void pop() 231d0825bca7fe65beaee391d30da42e937db621564Steve Block { 232d0825bca7fe65beaee391d30da42e937db621564Steve Block if (m_replicaBranches.last() == ReplicaBranch) 233d0825bca7fe65beaee391d30da42e937db621564Steve Block --m_replicaDepth; 234d0825bca7fe65beaee391d30da42e937db621564Steve Block m_replicaBranches.removeLast(); 235d0825bca7fe65beaee391d30da42e937db621564Steve Block } 236d0825bca7fe65beaee391d30da42e937db621564Steve Block 237d0825bca7fe65beaee391d30da42e937db621564Steve Block size_t depth() const { return m_replicaBranches.size(); } 238d0825bca7fe65beaee391d30da42e937db621564Steve Block size_t replicaDepth() const { return m_replicaDepth; } 239d0825bca7fe65beaee391d30da42e937db621564Steve Block 240d0825bca7fe65beaee391d30da42e937db621564Steve Block CloneID cloneID() const; 241d0825bca7fe65beaee391d30da42e937db621564Steve Block 242d0825bca7fe65beaee391d30da42e937db621564Steve Block private: 243d0825bca7fe65beaee391d30da42e937db621564Steve Block Vector<ReplicaBranchType> m_replicaBranches; 244d0825bca7fe65beaee391d30da42e937db621564Steve Block size_t m_replicaDepth; 245d0825bca7fe65beaee391d30da42e937db621564Steve Block }; 246f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch PassRefPtr<PlatformCALayer>replicatedLayerRoot(ReplicaState&); 247d0825bca7fe65beaee391d30da42e937db621564Steve Block 248d0825bca7fe65beaee391d30da42e937db621564Steve Block enum CloneLevel { RootCloneLevel, IntermediateCloneLevel }; 249f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch PassRefPtr<PlatformCALayer> fetchCloneLayers(GraphicsLayer* replicaRoot, ReplicaState&, CloneLevel); 250d0825bca7fe65beaee391d30da42e937db621564Steve Block 251f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch PassRefPtr<PlatformCALayer> cloneLayer(PlatformCALayer *, CloneLevel); 252f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch PassRefPtr<PlatformCALayer> findOrMakeClone(CloneID, PlatformCALayer *, LayerMap*, CloneLevel); 253d0825bca7fe65beaee391d30da42e937db621564Steve Block 254f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch void ensureCloneLayers(CloneID cloneID, RefPtr<PlatformCALayer>& primaryLayer, RefPtr<PlatformCALayer>& structuralLayer, RefPtr<PlatformCALayer>& contentsLayer, CloneLevel cloneLevel); 255d0825bca7fe65beaee391d30da42e937db621564Steve Block 256d0825bca7fe65beaee391d30da42e937db621564Steve Block bool hasCloneLayers() const { return m_layerClones; } 257d0825bca7fe65beaee391d30da42e937db621564Steve Block void removeCloneLayers(); 258d0825bca7fe65beaee391d30da42e937db621564Steve Block FloatPoint positionForCloneRootLayer() const; 259d0825bca7fe65beaee391d30da42e937db621564Steve Block 260d0825bca7fe65beaee391d30da42e937db621564Steve Block void propagateLayerChangeToReplicas(); 2610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 2620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // All these "update" methods will be called inside a BEGIN_BLOCK_OBJC_EXCEPTIONS/END_BLOCK_OBJC_EXCEPTIONS block. 263d0825bca7fe65beaee391d30da42e937db621564Steve Block void updateLayerNames(); 2640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch void updateSublayerList(); 2650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch void updateLayerPosition(); 2660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch void updateLayerSize(); 2670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch void updateAnchorPoint(); 2680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch void updateTransform(); 2690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch void updateChildrenTransform(); 2700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch void updateMasksToBounds(); 2710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch void updateContentsOpaque(); 2720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch void updateBackfaceVisibility(); 273d0825bca7fe65beaee391d30da42e937db621564Steve Block void updateStructuralLayer(); 2740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch void updateLayerDrawsContent(); 2750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch void updateLayerBackgroundColor(); 2760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 2770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch void updateContentsImage(); 278d0825bca7fe65beaee391d30da42e937db621564Steve Block void updateContentsMediaLayer(); 279dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch void updateContentsCanvasLayer(); 2800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch void updateContentsRect(); 281231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block void updateMaskLayer(); 282d0825bca7fe65beaee391d30da42e937db621564Steve Block void updateReplicatedLayers(); 2830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 2840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch void updateLayerAnimations(); 28506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen void updateContentsNeedsDisplay(); 286f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch void updateAcceleratesDrawing(); 28765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch void updateContentsScale(); 288d0825bca7fe65beaee391d30da42e937db621564Steve Block 289d0825bca7fe65beaee391d30da42e937db621564Steve Block enum StructuralLayerPurpose { 290d0825bca7fe65beaee391d30da42e937db621564Steve Block NoStructuralLayer = 0, 291d0825bca7fe65beaee391d30da42e937db621564Steve Block StructuralLayerForPreserves3D, 292d0825bca7fe65beaee391d30da42e937db621564Steve Block StructuralLayerForReplicaFlattening 293d0825bca7fe65beaee391d30da42e937db621564Steve Block }; 294d0825bca7fe65beaee391d30da42e937db621564Steve Block void ensureStructuralLayer(StructuralLayerPurpose); 295d0825bca7fe65beaee391d30da42e937db621564Steve Block StructuralLayerPurpose structuralLayerPurpose() const; 2960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 297f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch void setAnimationOnLayer(PlatformCAAnimation*, AnimatedPropertyID, const String& animationName, int index, double timeOffset); 298bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen bool removeCAAnimationFromLayer(AnimatedPropertyID, const String& animationName, int index); 299bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen void pauseCAAnimationOnLayer(AnimatedPropertyID, const String& animationName, int index, double timeOffset); 3000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 301d0825bca7fe65beaee391d30da42e937db621564Steve Block enum MoveOrCopy { Move, Copy }; 302f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch static void moveOrCopyLayerAnimation(MoveOrCopy, const String& animationIdentifier, PlatformCALayer *fromLayer, PlatformCALayer *toLayer); 303f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch void moveOrCopyAnimationsForProperty(MoveOrCopy, AnimatedPropertyID, PlatformCALayer * fromLayer, PlatformCALayer * toLayer); 304d0825bca7fe65beaee391d30da42e937db621564Steve Block 3050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch enum LayerChange { 3060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch NoChange = 0, 3070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch NameChanged = 1 << 1, 308f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch ChildrenChanged = 1 << 2, // also used for content layer, and preserves-3d, and size if tiling changes? 3090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch PositionChanged = 1 << 3, 3100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch AnchorPointChanged = 1 << 4, 3110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch SizeChanged = 1 << 5, 3120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch TransformChanged = 1 << 6, 3130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch ChildrenTransformChanged = 1 << 7, 3140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Preserves3DChanged = 1 << 8, 3150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch MasksToBoundsChanged = 1 << 9, 316f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch DrawsContentChanged = 1 << 10, // need this? 3170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch BackgroundColorChanged = 1 << 11, 3180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch ContentsOpaqueChanged = 1 << 12, 3190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch BackfaceVisibilityChanged = 1 << 13, 3200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch OpacityChanged = 1 << 14, 3210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch AnimationChanged = 1 << 15, 3220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch DirtyRectsChanged = 1 << 16, 3230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch ContentsImageChanged = 1 << 17, 324d0825bca7fe65beaee391d30da42e937db621564Steve Block ContentsMediaLayerChanged = 1 << 18, 325dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch ContentsCanvasLayerChanged = 1 << 19, 326231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block ContentsRectChanged = 1 << 20, 32768513a70bcd92384395513322f1b801e7bf9c729Steve Block MaskLayerChanged = 1 << 21, 32868513a70bcd92384395513322f1b801e7bf9c729Steve Block ReplicatedLayerChanged = 1 << 22, 329f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch ContentsNeedsDisplay = 1 << 23, 33065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch AcceleratesDrawingChanged = 1 << 24, 33165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ContentsScaleChanged = 1 << 25 3320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch }; 3330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch typedef unsigned LayerChangeFlags; 3340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch void noteLayerPropertyChanged(LayerChangeFlags flags); 335d0825bca7fe65beaee391d30da42e937db621564Steve Block void noteSublayersChanged(); 3360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 3370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch void repaintLayerDirtyRects(); 3380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 339f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch RefPtr<PlatformCALayer> m_layer; // The main layer 340f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch RefPtr<PlatformCALayer> m_structuralLayer; // A layer used for structural reasons, like preserves-3d or replica-flattening. Is the parent of m_layer. 341f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch RefPtr<PlatformCALayer> m_contentsLayer; // A layer used for inner content, like image and video 342d0825bca7fe65beaee391d30da42e937db621564Steve Block 343d0825bca7fe65beaee391d30da42e937db621564Steve Block // References to clones of our layers, for replicated layers. 344d0825bca7fe65beaee391d30da42e937db621564Steve Block OwnPtr<LayerMap> m_layerClones; 345d0825bca7fe65beaee391d30da42e937db621564Steve Block OwnPtr<LayerMap> m_structuralLayerClones; 346d0825bca7fe65beaee391d30da42e937db621564Steve Block OwnPtr<LayerMap> m_contentsLayerClones; 3470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 3480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch enum ContentsLayerPurpose { 3490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch NoContentsLayer = 0, 3500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch ContentsLayerForImage, 351dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch ContentsLayerForMedia, 352dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch ContentsLayerForCanvas 3530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch }; 3540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 3550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch ContentsLayerPurpose m_contentsLayerPurpose; 3560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch bool m_contentsLayerHasBackgroundColor : 1; 3578f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 358dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block RetainPtr<CGImageRef> m_uncorrectedContentsImage; 3590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch RetainPtr<CGImageRef> m_pendingContentsImage; 3600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 361bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen // This represents the animation of a single property. There may be multiple transform animations for 362bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen // a single transition or keyframe animation, so index is used to distinguish these. 363bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen struct LayerPropertyAnimation { 364f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch LayerPropertyAnimation(PassRefPtr<PlatformCAAnimation> caAnimation, const String& animationName, AnimatedPropertyID property, int index, double timeOffset) 365bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen : m_animation(caAnimation) 366bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen , m_name(animationName) 3670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch , m_property(property) 3680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch , m_index(index) 369d0825bca7fe65beaee391d30da42e937db621564Steve Block , m_timeOffset(timeOffset) 3700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { } 3710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 372f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch RefPtr<PlatformCAAnimation> m_animation; 373bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen String m_name; 3740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch AnimatedPropertyID m_property; 3750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch int m_index; 376d0825bca7fe65beaee391d30da42e937db621564Steve Block double m_timeOffset; 3770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch }; 3780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 379bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen // Uncommitted transitions and animations. 380bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen Vector<LayerPropertyAnimation> m_uncomittedAnimations; 3810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 382d0825bca7fe65beaee391d30da42e937db621564Steve Block enum Action { Remove, Pause }; 383d0825bca7fe65beaee391d30da42e937db621564Steve Block struct AnimationProcessingAction { 384d0825bca7fe65beaee391d30da42e937db621564Steve Block AnimationProcessingAction(Action action = Remove, double timeOffset = 0) 385d0825bca7fe65beaee391d30da42e937db621564Steve Block : action(action) 386d0825bca7fe65beaee391d30da42e937db621564Steve Block , timeOffset(timeOffset) 387d0825bca7fe65beaee391d30da42e937db621564Steve Block { 388d0825bca7fe65beaee391d30da42e937db621564Steve Block } 389d0825bca7fe65beaee391d30da42e937db621564Steve Block Action action; 390bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen double timeOffset; // only used for pause 391d0825bca7fe65beaee391d30da42e937db621564Steve Block }; 3920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch typedef HashMap<String, AnimationProcessingAction> AnimationsToProcessMap; 393bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen AnimationsToProcessMap m_animationsToProcess; 394bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 395bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen // Map of animation names to their associated lists of property animations, so we can remove/pause them. 396bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen typedef HashMap<String, Vector<LayerPropertyAnimation> > AnimationsMap; 397bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen AnimationsMap m_runningAnimations; 3980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 3990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Vector<FloatRect> m_dirtyRects; 4000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 4010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch LayerChangeFlags m_uncommittedChanges; 40265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 40365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch float clampedContentsScaleForScale(float) const; 40465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch float m_contentsScale; 4052daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 4062daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch bool m_allowTiledLayer; 4078f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian}; 4088f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 4098f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian} // namespace WebCore 4108f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 4118f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 4128f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#endif // USE(ACCELERATED_COMPOSITING) 4138f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 414f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#endif // GraphicsLayerCA_h 415