18f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian/* 28f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * Copyright (C) 2009 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 268f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#ifndef RenderLayerBacking_h 278f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#define RenderLayerBacking_h 288f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 298f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#if USE(ACCELERATED_COMPOSITING) 308f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 318f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#include "FloatPoint.h" 328f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#include "FloatPoint3D.h" 338f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#include "GraphicsLayer.h" 348f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#include "GraphicsLayerClient.h" 358f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#include "RenderLayer.h" 368f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#include "TransformationMatrix.h" 378f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 388f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qiannamespace WebCore { 398f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 408f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qianclass KeyframeList; 418f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qianclass RenderLayerCompositor; 428f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 43967717af5423377c967781471ee106e2bb4e11c8Ben Murdochenum CompositingLayerType { 44967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch NormalCompositingLayer, // non-tiled layer with backing store 45967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch TiledCompositingLayer, // tiled layer (always has backing store) 46967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch MediaCompositingLayer, // layer that contains an image, video, webGL or plugin 47967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch ContainerCompositingLayer // layer with no backing store 48967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch}; 49967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch 508f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian// RenderLayerBacking controls the compositing behavior for a single RenderLayer. 518f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian// It holds the various GraphicsLayers, and makes decisions about intra-layer rendering 528f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian// optimizations. 538f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian// 548f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian// There is one RenderLayerBacking for each RenderLayer that is composited. 558f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 56ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochclass RenderLayerBacking : public GraphicsLayerClient { 57ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch WTF_MAKE_NONCOPYABLE(RenderLayerBacking); WTF_MAKE_FAST_ALLOCATED; 588f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qianpublic: 598f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian RenderLayerBacking(RenderLayer*); 608f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian ~RenderLayerBacking(); 618f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 627e6e4dd41950ef98c67ee99be2d67daf563009caShimeng (Simon) Wang#if PLATFORM(ANDROID) 637e6e4dd41950ef98c67ee99be2d67daf563009caShimeng (Simon) Wang virtual 647e6e4dd41950ef98c67ee99be2d67daf563009caShimeng (Simon) Wang#endif 658f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian RenderLayer* owningLayer() const { return m_owningLayer; } 668f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch enum UpdateDepth { CompositingChildren, AllDescendants }; 68cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block void updateAfterLayout(UpdateDepth, bool isUpdateRoot); 698f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 708f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // Returns true if layer configuration changed. 715f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian bool updateGraphicsLayerConfiguration(); 720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // Update graphics layer position and bounds. 730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch void updateGraphicsLayerGeometry(); // make private 740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // Update contents and clipping structure. 756c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen void updateDrawsContent(); 768f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 77231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block GraphicsLayer* graphicsLayer() const { return m_graphicsLayer.get(); } 788f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 798f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // Layer to clip children 808f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian bool hasClippingLayer() const { return m_clippingLayer != 0; } 81231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block GraphicsLayer* clippingLayer() const { return m_clippingLayer.get(); } 828f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 838f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // Layer to get clipped by ancestor 848f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian bool hasAncestorClippingLayer() const { return m_ancestorClippingLayer != 0; } 85231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block GraphicsLayer* ancestorClippingLayer() const { return m_ancestorClippingLayer.get(); } 868f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch bool hasContentsLayer() const { return m_foregroundLayer != 0; } 88231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block GraphicsLayer* foregroundLayer() const { return m_foregroundLayer.get(); } 898f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 90231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block bool hasMaskLayer() const { return m_maskLayer != 0; } 91231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 92231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block GraphicsLayer* parentForSublayers() const { return m_clippingLayer ? m_clippingLayer.get() : m_graphicsLayer.get(); } 93231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block GraphicsLayer* childForSuperlayers() const { return m_ancestorClippingLayer ? m_ancestorClippingLayer.get() : m_graphicsLayer.get(); } 948f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 958f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // RenderLayers with backing normally short-circuit paintLayer() because 968f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // their content is rendered via callbacks from GraphicsLayer. However, the document 978f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // layer is special, because it has a GraphicsLayer to act as a container for the GraphicsLayers 988f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // for descendants, but its contents usually render into the window (in which case this returns true). 998f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // This returns false for other layers, and when the document layer actually needs to paint into its backing store 1008f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // for some reason. 1018f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian bool paintingGoesToWindow() const; 1028f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 1038f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian void setContentsNeedDisplay(); 1048f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // r is in the coordinate space of the layer's render object 1058f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian void setContentsNeedDisplayInRect(const IntRect& r); 1068f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 107f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch // Notification from the renderer that its content changed. 108f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch void contentChanged(RenderLayer::ContentChangeType); 1098f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 1108f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // Interface to start, finish, suspend and resume animations and transitions 111d0825bca7fe65beaee391d30da42e937db621564Steve Block bool startTransition(double timeOffset, int property, const RenderStyle* fromStyle, const RenderStyle* toStyle); 112bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen void transitionPaused(double timeOffset, int property); 1138f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian void transitionFinished(int property); 1148f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 115bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen bool startAnimation(double timeOffset, const Animation* anim, const KeyframeList& keyframes); 116bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen void animationPaused(double timeOffset, const String& name); 117bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen void animationFinished(const String& name); 118bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch void suspendAnimations(double time = 0); 1208f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian void resumeAnimations(); 1218f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 1220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch IntRect compositedBounds() const; 1230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch void setCompositedBounds(const IntRect&); 124231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block void updateCompositedBounds(); 125e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke 126e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke void updateAfterWidgetResize(); 1270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1288f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // GraphicsLayerClient interface 1298f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual void notifyAnimationStarted(const GraphicsLayer*, double startTime); 1300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch virtual void notifySyncRequired(const GraphicsLayer*); 1318f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 1328f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual void paintContents(const GraphicsLayer*, GraphicsContext&, GraphicsLayerPaintingPhase, const IntRect& clip); 1338f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 134643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual bool showDebugBorders() const; 135643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual bool showRepaintCounter() const; 136643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 1370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch IntRect contentsBox() const; 1388f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 139967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch // For informative purposes only. 140967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch CompositingLayerType compositingLayerType() const; 141967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch 14265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch void updateContentsScale(float); 14365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 1442daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch GraphicsLayer* layerForHorizontalScrollbar() const { return m_layerForHorizontalScrollbar.get(); } 1452daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch GraphicsLayer* layerForVerticalScrollbar() const { return m_layerForVerticalScrollbar.get(); } 1462daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch GraphicsLayer* layerForScrollCorner() const { return m_layerForScrollCorner.get(); } 1472daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 1488f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qianprivate: 1498f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian void createGraphicsLayer(); 1508f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian void destroyGraphicsLayer(); 1518f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 1528f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian RenderBoxModelObject* renderer() const { return m_owningLayer->renderer(); } 1538f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian RenderLayerCompositor* compositor() const { return m_owningLayer->compositor(); } 1548f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 1552daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch void updateInternalHierarchy(); 1568f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian bool updateClippingLayers(bool needsAncestorClip, bool needsDescendantClip); 1572daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch bool updateOverflowControlsLayers(bool needsHorizontalScrollbarLayer, bool needsVerticalScrollbarLayer, bool needsScrollCornerLayer); 1580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch bool updateForegroundLayer(bool needsForegroundLayer); 159231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block bool updateMaskLayer(bool needsMaskLayer); 1602daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch bool requiresHorizontalScrollbarLayer() const; 1612daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch bool requiresVerticalScrollbarLayer() const; 1622daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch bool requiresScrollCornerLayer() const; 1638f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 164231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block GraphicsLayerPaintingPhase paintingPhaseForPrimaryLayer() const; 165231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch IntSize contentOffsetInCompostingLayer() const; 1678f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // Result is transform origin in pixels. 1688f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian FloatPoint3D computeTransformOrigin(const IntRect& borderBox) const; 1698f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // Result is perspective origin in pixels. 1708f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian FloatPoint computePerspectiveOrigin(const IntRect& borderBox) const; 1718f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 172cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block void updateLayerOpacity(const RenderStyle*); 173cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block void updateLayerTransform(const RenderStyle*); 1748f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 1758f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // Return the opacity value that this layer should use for compositing. 1768f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian float compositingOpacity(float rendererOpacity) const; 1778f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 178d0825bca7fe65beaee391d30da42e937db621564Steve Block // Returns true if this compositing layer has no visible content. 1795f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian bool isSimpleContainerCompositingLayer() const; 180d0825bca7fe65beaee391d30da42e937db621564Steve Block // Returns true if this layer has content that needs to be rendered by painting into the backing store. 181d0825bca7fe65beaee391d30da42e937db621564Steve Block bool containsPaintedContent() const; 182d0825bca7fe65beaee391d30da42e937db621564Steve Block // Returns true if the RenderLayer just contains an image that we can composite directly. 183d0825bca7fe65beaee391d30da42e937db621564Steve Block bool isDirectlyCompositedImage() const; 1848f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian void updateImageContents(); 1858f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 1868f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian bool rendererHasBackground() const; 187e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block const Color rendererBackgroundColor() const; 1888f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 189db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block bool hasNonCompositingDescendants() const; 1908f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 1918f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian void paintIntoLayer(RenderLayer* rootLayer, GraphicsContext*, const IntRect& paintDirtyRect, 192643ca7872b450ea4efacab6188849e5aac2ba161Steve Block PaintBehavior paintBehavior, GraphicsLayerPaintingPhase, RenderObject* paintingRoot); 1938f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 1948f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian static int graphicsLayerToCSSProperty(AnimatedPropertyID); 1958f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian static AnimatedPropertyID cssToGraphicsLayerProperty(int); 1968f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 197e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block#ifndef NDEBUG 198e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block String nameForLayer() const; 199e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block#endif 200e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block 2018f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qianprivate: 2028f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian RenderLayer* m_owningLayer; 2038f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 204231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block OwnPtr<GraphicsLayer> m_ancestorClippingLayer; // only used if we are clipped by an ancestor which is not a stacking context 205231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block OwnPtr<GraphicsLayer> m_graphicsLayer; 206231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block OwnPtr<GraphicsLayer> m_foregroundLayer; // only used in cases where we need to draw the foreground separately 207231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block OwnPtr<GraphicsLayer> m_clippingLayer; // only used if we have clipping on a stacking context, with compositing children 208231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block OwnPtr<GraphicsLayer> m_maskLayer; // only used if we have a mask 2098f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 2102daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch OwnPtr<GraphicsLayer> m_layerForHorizontalScrollbar; 2112daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch OwnPtr<GraphicsLayer> m_layerForVerticalScrollbar; 2122daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch OwnPtr<GraphicsLayer> m_layerForScrollCorner; 2132daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 2140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch IntRect m_compositedBounds; 2158f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 216231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block bool m_artificiallyInflatedBounds; // bounds had to be made non-zero to make transform-origin work 2178f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian}; 2188f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 2198f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian} // namespace WebCore 2208f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 2218f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#endif // USE(ACCELERATED_COMPOSITING) 2228f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 2238f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#endif // RenderLayerBacking_h 224