Index: third_party/WebKit/WebCore/rendering/RenderLayerBacking.h |
=================================================================== |
--- third_party/WebKit/WebCore/rendering/RenderLayerBacking.h (revision 9383) |
+++ third_party/WebKit/WebCore/rendering/RenderLayerBacking.h (working copy) |
@@ -1,173 +1,172 @@ |
-/* |
- * Copyright (C) 2009 Apple Inc. All rights reserved. |
- * |
- * Redistribution and use in source and binary forms, with or without |
- * modification, are permitted provided that the following conditions |
- * are met: |
- * 1. Redistributions of source code must retain the above copyright |
- * notice, this list of conditions and the following disclaimer. |
- * 2. Redistributions in binary form must reproduce the above copyright |
- * notice, this list of conditions and the following disclaimer in the |
- * documentation and/or other materials provided with the distribution. |
- * |
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY |
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR |
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, |
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, |
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR |
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY |
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
- */ |
- |
-#ifndef RenderLayerBacking_h |
-#define RenderLayerBacking_h |
- |
-#if USE(ACCELERATED_COMPOSITING) |
- |
-#include "FloatPoint.h" |
-#include "FloatPoint3D.h" |
-#include "GraphicsLayer.h" |
-#include "GraphicsLayerClient.h" |
-#include "RenderLayer.h" |
-#include "TransformationMatrix.h" |
- |
-namespace WebCore { |
- |
-class KeyframeList; |
-class RenderLayerCompositor; |
- |
-// RenderLayerBacking controls the compositing behavior for a single RenderLayer. |
-// It holds the various GraphicsLayers, and makes decisions about intra-layer rendering |
-// optimizations. |
-// |
-// There is one RenderLayerBacking for each RenderLayer that is composited. |
- |
-class RenderLayerBacking : public GraphicsLayerClient { |
-public: |
- RenderLayerBacking(RenderLayer*); |
- ~RenderLayerBacking(); |
- |
- RenderLayer* owningLayer() const { return m_owningLayer; } |
- |
- void updateAfterLayout(); |
- |
- // Returns true if layer configuration changed. |
- bool updateGraphicsLayers(bool needsContentsLayer, bool needsUpperClippingLayer, bool needsLowerClippingLayer, bool needsRepaint); |
- void updateGraphicsLayerGeometry(); |
- void updateInternalHierarchy(); |
- |
- GraphicsLayer* graphicsLayer() const { return m_graphicsLayer; } |
- |
- // Layer to clip children |
- bool hasClippingLayer() const { return m_clippingLayer != 0; } |
- GraphicsLayer* clippingLayer() const { return m_clippingLayer; } |
- |
- // Layer to get clipped by ancestor |
- bool hasAncestorClippingLayer() const { return m_ancestorClippingLayer != 0; } |
- GraphicsLayer* ancestorClippingLayer() const { return m_ancestorClippingLayer; } |
- |
- bool hasContentsLayer() const { return m_contentsLayer != 0; } |
- GraphicsLayer* contentsLayer() const { return m_contentsLayer; } |
- |
- GraphicsLayer* parentForSublayers() const { return m_clippingLayer ? m_clippingLayer : m_graphicsLayer; } |
- GraphicsLayer* childForSuperlayers() const { return m_ancestorClippingLayer ? m_ancestorClippingLayer : m_graphicsLayer; } |
- |
- // RenderLayers with backing normally short-circuit paintLayer() because |
- // their content is rendered via callbacks from GraphicsLayer. However, the document |
- // layer is special, because it has a GraphicsLayer to act as a container for the GraphicsLayers |
- // for descendants, but its contents usually render into the window (in which case this returns true). |
- // This returns false for other layers, and when the document layer actually needs to paint into its backing store |
- // for some reason. |
- bool paintingGoesToWindow() const; |
- |
- void setContentsNeedDisplay(); |
- // r is in the coordinate space of the layer's render object |
- void setContentsNeedDisplayInRect(const IntRect& r); |
- |
- // Interface to start, finish, suspend and resume animations and transitions |
- bool startAnimation(double beginTime, const Animation* anim, const KeyframeList& keyframes); |
- bool startTransition(double beginTime, int property, const RenderStyle* fromStyle, const RenderStyle* toStyle); |
- void animationFinished(const String& name, int index, bool reset); |
- void transitionFinished(int property); |
- |
- void suspendAnimations(); |
- void resumeAnimations(); |
- |
- FloatPoint graphicsLayerToContentsCoordinates(const GraphicsLayer*, const FloatPoint&); |
- FloatPoint contentsToGraphicsLayerCoordinates(const GraphicsLayer*, const FloatPoint&); |
- |
- void forceCompositingLayer(bool force = true); |
- bool forcedCompositingLayer() const { return m_forceCompositingLayer; } |
- |
- void detectDrawingOptimizations(); |
- void invalidateDrawingOptimizations(); |
- |
- // GraphicsLayerClient interface |
- virtual void notifyAnimationStarted(const GraphicsLayer*, double startTime); |
- |
- virtual void paintContents(const GraphicsLayer*, GraphicsContext&, GraphicsLayerPaintingPhase, const IntRect& clip); |
- |
- virtual IntRect contentsBox(const GraphicsLayer*); |
- |
-private: |
- void createGraphicsLayer(); |
- void destroyGraphicsLayer(); |
- |
- RenderBoxModelObject* renderer() const { return m_owningLayer->renderer(); } |
- RenderLayerCompositor* compositor() const { return m_owningLayer->compositor(); } |
- |
- bool updateClippingLayers(bool needsAncestorClip, bool needsDescendantClip); |
- bool updateContentsLayer(bool needsContentsLayer); |
- |
- IntSize contentOffsetInCompostingLayer(); |
- // Result is transform origin in pixels. |
- FloatPoint computeTransformOrigin(const IntRect& borderBox) const; |
- |
- void updateLayerOpacity(); |
- void updateLayerTransform(); |
- |
- // Return the opacity value that this layer should use for compositing. |
- float compositingOpacity(float rendererOpacity) const; |
- |
- // Returns true if this RenderLayer only has content that can be rendered directly |
- // by the compositing layer, without drawing (e.g. solid background color). |
- bool isSimpleContainerCompositingLayer(); |
- |
- bool rendererHasBackground() const; |
- const Color& rendererBackgroundColor() const; |
- |
- bool canBeSimpleContainerCompositingLayer() const; |
- bool hasNonCompositingContent() const; |
- |
- void paintIntoLayer(RenderLayer* rootLayer, GraphicsContext*, const IntRect& paintDirtyRect, |
- bool haveTransparency, PaintRestriction paintRestriction, GraphicsLayerPaintingPhase, RenderObject* paintingRoot); |
- |
- static int graphicsLayerToCSSProperty(AnimatedPropertyID); |
- static AnimatedPropertyID cssToGraphicsLayerProperty(int); |
- |
-private: |
- RenderLayer* m_owningLayer; |
- |
- GraphicsLayer* m_ancestorClippingLayer; // only used if we are clipped by an ancestor which is not a stacking context |
- GraphicsLayer* m_graphicsLayer; |
- GraphicsLayer* m_contentsLayer; // only used in cases where we need to draw the foreground separately |
- GraphicsLayer* m_clippingLayer; // only used if we have clipping on a stacking context, with compositing children |
- |
- IntSize m_compositingContentOffset; |
- |
- bool m_forceCompositingLayer : 1; // set if we need a compositing layer because of some external requirement |
- bool m_isSimpleContainerCompositingLayer : 1; // is this compositing layer able to be simplified |
- bool m_simpleCompositingLayerStatusDirty : 1; // set if the test for simple layers needs to be redone |
- |
- bool m_compositingContentOffsetDirty: 1; |
-}; |
- |
-} // namespace WebCore |
- |
-#endif // USE(ACCELERATED_COMPOSITING) |
- |
-#endif // RenderLayerBacking_h |
+/* |
+ * Copyright (C) 2009 Apple Inc. All rights reserved. |
+ * |
+ * Redistribution and use in source and binary forms, with or without |
+ * modification, are permitted provided that the following conditions |
+ * are met: |
+ * 1. Redistributions of source code must retain the above copyright |
+ * notice, this list of conditions and the following disclaimer. |
+ * 2. Redistributions in binary form must reproduce the above copyright |
+ * notice, this list of conditions and the following disclaimer in the |
+ * documentation and/or other materials provided with the distribution. |
+ * |
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY |
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR |
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, |
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, |
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR |
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY |
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
+ */ |
+ |
+#ifndef RenderLayerBacking_h |
+#define RenderLayerBacking_h |
+ |
+#if USE(ACCELERATED_COMPOSITING) |
+ |
+#include "FloatPoint.h" |
+#include "FloatPoint3D.h" |
+#include "GraphicsLayer.h" |
+#include "GraphicsLayerClient.h" |
+#include "RenderLayer.h" |
+#include "TransformationMatrix.h" |
+ |
+namespace WebCore { |
+ |
+class RenderLayerCompositor; |
+ |
+// RenderLayerBacking controls the compositing behavior for a single RenderLayer. |
+// It holds the various GraphicsLayers, and makes decisions about intra-layer rendering |
+// optimizations. |
+// |
+// There is one RenderLayerBacking for each RenderLayer that is composited. |
+ |
+class RenderLayerBacking : public GraphicsLayerClient { |
+public: |
+ RenderLayerBacking(RenderLayer*); |
+ ~RenderLayerBacking(); |
+ |
+ RenderLayer* owningLayer() const { return m_owningLayer; } |
+ |
+ void updateAfterLayout(); |
+ |
+ // Returns true if layer configuration changed. |
+ bool updateGraphicsLayers(bool needsContentsLayer, bool needsUpperClippingLayer, bool needsLowerClippingLayer, bool needsRepaint); |
+ void updateGraphicsLayerGeometry(); |
+ void updateInternalHierarchy(); |
+ |
+ GraphicsLayer* graphicsLayer() const { return m_graphicsLayer; } |
+ |
+ // Layer to clip children |
+ bool hasClippingLayer() const { return m_clippingLayer != 0; } |
+ GraphicsLayer* clippingLayer() const { return m_clippingLayer; } |
+ |
+ // Layer to get clipped by ancestor |
+ bool hasAncestorClippingLayer() const { return m_ancestorClippingLayer != 0; } |
+ GraphicsLayer* ancestorClippingLayer() const { return m_ancestorClippingLayer; } |
+ |
+ bool hasContentsLayer() const { return m_contentsLayer != 0; } |
+ GraphicsLayer* contentsLayer() const { return m_contentsLayer; } |
+ |
+ GraphicsLayer* parentForSublayers() const { return m_clippingLayer ? m_clippingLayer : m_graphicsLayer; } |
+ GraphicsLayer* childForSuperlayers() const { return m_ancestorClippingLayer ? m_ancestorClippingLayer : m_graphicsLayer; } |
+ |
+ // RenderLayers with backing normally short-circuit paintLayer() because |
+ // their content is rendered via callbacks from GraphicsLayer. However, the document |
+ // layer is special, because it has a GraphicsLayer to act as a container for the GraphicsLayers |
+ // for descendants, but its contents usually render into the window (in which case this returns true). |
+ // This returns false for other layers, and when the document layer actually needs to paint into its backing store |
+ // for some reason. |
+ bool paintingGoesToWindow() const; |
+ |
+ void setContentsNeedDisplay(); |
+ // r is in the coordinate space of the layer's render object |
+ void setContentsNeedDisplayInRect(const IntRect& r); |
+ |
+ // Interface to start, finish, suspend and resume animations and transitions |
+ bool startAnimation(double beginTime, const Animation* anim, const KeyframeList& keyframes); |
+ bool startTransition(double beginTime, int property, const RenderStyle* fromStyle, const RenderStyle* toStyle); |
+ void animationFinished(const String& name, int index, bool reset); |
+ void transitionFinished(int property); |
+ |
+ void suspendAnimations(); |
+ void resumeAnimations(); |
+ |
+ FloatPoint graphicsLayerToContentsCoordinates(const GraphicsLayer*, const FloatPoint&); |
+ FloatPoint contentsToGraphicsLayerCoordinates(const GraphicsLayer*, const FloatPoint&); |
+ |
+ void forceCompositingLayer(bool force = true); |
+ bool forcedCompositingLayer() const { return m_forceCompositingLayer; } |
+ |
+ void detectDrawingOptimizations(); |
+ void invalidateDrawingOptimizations(); |
+ |
+ // GraphicsLayerClient interface |
+ virtual void notifyAnimationStarted(const GraphicsLayer*, double startTime); |
+ |
+ virtual void paintContents(const GraphicsLayer*, GraphicsContext&, GraphicsLayerPaintingPhase, const IntRect& clip); |
+ |
+ virtual IntRect contentsBox(const GraphicsLayer*); |
+ |
+private: |
+ void createGraphicsLayer(); |
+ void destroyGraphicsLayer(); |
+ |
+ RenderBox* renderer() const { return m_owningLayer->renderer(); } |
+ RenderLayerCompositor* compositor() const { return m_owningLayer->compositor(); } |
+ |
+ bool updateClippingLayers(bool needsAncestorClip, bool needsDescendantClip); |
+ bool updateContentsLayer(bool needsContentsLayer); |
+ |
+ IntSize contentOffsetInCompostingLayer(); |
+ // Result is transform origin in pixels. |
+ FloatPoint computeTransformOrigin(const IntRect& borderBox) const; |
+ |
+ void updateLayerOpacity(); |
+ void updateLayerTransform(); |
+ |
+ // Return the opacity value that this layer should use for compositing. |
+ float compositingOpacity(float rendererOpacity) const; |
+ |
+ // Returns true if this RenderLayer only has content that can be rendered directly |
+ // by the compositing layer, without drawing (e.g. solid background color). |
+ bool isSimpleContainerCompositingLayer(); |
+ |
+ bool rendererHasBackground() const; |
+ const Color& rendererBackgroundColor() const; |
+ |
+ bool canBeSimpleContainerCompositingLayer() const; |
+ bool hasNonCompositingContent() const; |
+ |
+ void paintIntoLayer(RenderLayer* rootLayer, GraphicsContext*, const IntRect& paintDirtyRect, |
+ bool haveTransparency, PaintRestriction paintRestriction, GraphicsLayerPaintingPhase, RenderObject* paintingRoot); |
+ |
+ static int graphicsLayerToCSSProperty(AnimatedPropertyID); |
+ static AnimatedPropertyID cssToGraphicsLayerProperty(int); |
+ |
+private: |
+ RenderLayer* m_owningLayer; |
+ |
+ GraphicsLayer* m_ancestorClippingLayer; // only used if we are clipped by an ancestor which is not a stacking context |
+ GraphicsLayer* m_graphicsLayer; |
+ GraphicsLayer* m_contentsLayer; // only used in cases where we need to draw the foreground separately |
+ GraphicsLayer* m_clippingLayer; // only used if we have clipping on a stacking context, with compositing children |
+ |
+ IntSize m_compositingContentOffset; |
+ |
+ bool m_forceCompositingLayer : 1; // set if we need a compositing layer because of some external requirement |
+ bool m_isSimpleContainerCompositingLayer : 1; // is this compositing layer able to be simplified |
+ bool m_simpleCompositingLayerStatusDirty : 1; // set if the test for simple layers needs to be redone |
+ |
+ bool m_compositingContentOffsetDirty: 1; |
+}; |
+ |
+} // namespace WebCore |
+ |
+#endif // USE(ACCELERATED_COMPOSITING) |
+ |
+#endif // RenderLayerBacking_h |