Index: Source/core/platform/graphics/GraphicsLayer.h |
diff --git a/Source/core/platform/graphics/GraphicsLayer.h b/Source/core/platform/graphics/GraphicsLayer.h |
deleted file mode 100644 |
index 38569e41c9df67c8ad3334897b30e5100f9f54fa..0000000000000000000000000000000000000000 |
--- a/Source/core/platform/graphics/GraphicsLayer.h |
+++ /dev/null |
@@ -1,419 +0,0 @@ |
-/* |
- * Copyright (C) 2009 Apple Inc. All rights reserved. |
- * Copyright (C) 2013 Intel Corporation. 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 GraphicsLayer_h |
-#define GraphicsLayer_h |
- |
-#include "core/platform/graphics/GraphicsLayerClient.h" |
-#include "core/platform/graphics/OpaqueRectTrackingContentLayerDelegate.h" |
-#include "core/platform/graphics/filters/FilterOperations.h" |
-#include "platform/geometry/FloatPoint.h" |
-#include "platform/geometry/FloatPoint3D.h" |
-#include "platform/geometry/FloatSize.h" |
-#include "platform/geometry/IntRect.h" |
-#include "platform/graphics/Color.h" |
-#include "platform/transforms/TransformationMatrix.h" |
-#include "wtf/OwnPtr.h" |
-#include "wtf/PassOwnPtr.h" |
-#include "wtf/Vector.h" |
- |
-#include "public/platform/WebAnimationDelegate.h" |
-#include "public/platform/WebCompositingReasons.h" |
-#include "public/platform/WebContentLayer.h" |
-#include "public/platform/WebImageLayer.h" |
-#include "public/platform/WebLayerClient.h" |
-#include "public/platform/WebLayerScrollClient.h" |
-#include "public/platform/WebNinePatchLayer.h" |
-#include "public/platform/WebSolidColorLayer.h" |
- |
-namespace blink { |
-class GraphicsLayerFactoryChromium; |
-class WebAnimation; |
-class WebGraphicsLayerDebugInfo; |
-class WebLayer; |
-} |
- |
-namespace WebCore { |
- |
-class FloatRect; |
-class GraphicsContext; |
-class GraphicsLayerFactory; |
-class Image; |
-class ScrollableArea; |
-class TextStream; |
- |
-// FIXME: find a better home for this declaration. |
-class LinkHighlightClient { |
-public: |
- virtual void invalidate() = 0; |
- virtual void clearCurrentGraphicsLayer() = 0; |
- virtual blink::WebLayer* layer() = 0; |
- |
-protected: |
- virtual ~LinkHighlightClient() { } |
-}; |
- |
-// GraphicsLayer is an abstraction for a rendering surface with backing store, |
-// which may have associated transformation and animations. |
- |
-class GraphicsLayer : public GraphicsContextPainter, public blink::WebAnimationDelegate, public blink::WebLayerScrollClient, public blink::WebLayerClient { |
- WTF_MAKE_NONCOPYABLE(GraphicsLayer); WTF_MAKE_FAST_ALLOCATED; |
-public: |
- static PassOwnPtr<GraphicsLayer> create(GraphicsLayerFactory*, GraphicsLayerClient*); |
- |
- virtual ~GraphicsLayer(); |
- |
- GraphicsLayerClient* client() const { return m_client; } |
- |
- // blink::WebLayerClient implementation. |
- virtual blink::WebString debugName(blink::WebLayer*) OVERRIDE; |
- virtual blink::WebGraphicsLayerDebugInfo* takeDebugInfo() OVERRIDE; |
- |
- void setCompositingReasons(blink::WebCompositingReasons); |
- blink::WebCompositingReasons compositingReasons() const { return m_compositingReasons; } |
- |
- GraphicsLayer* parent() const { return m_parent; }; |
- void setParent(GraphicsLayer*); // Internal use only. |
- |
- // Returns true if the layer has the given layer as an ancestor (excluding self). |
- bool hasAncestor(GraphicsLayer*) const; |
- |
- const Vector<GraphicsLayer*>& children() const { return m_children; } |
- // Returns true if the child list changed. |
- bool setChildren(const Vector<GraphicsLayer*>&); |
- |
- // Add child layers. If the child is already parented, it will be removed from its old parent. |
- void addChild(GraphicsLayer*); |
- void addChildAtIndex(GraphicsLayer*, int index); |
- void addChildAbove(GraphicsLayer*, GraphicsLayer* sibling); |
- void addChildBelow(GraphicsLayer*, GraphicsLayer* sibling); |
- bool replaceChild(GraphicsLayer* oldChild, GraphicsLayer* newChild); |
- |
- void removeAllChildren(); |
- void removeFromParent(); |
- |
- GraphicsLayer* maskLayer() const { return m_maskLayer; } |
- void setMaskLayer(GraphicsLayer*); |
- |
- GraphicsLayer* contentsClippingMaskLayer() const { return m_contentsClippingMaskLayer; } |
- void setContentsClippingMaskLayer(GraphicsLayer*); |
- |
- // The given layer will replicate this layer and its children; the replica renders behind this layer. |
- void setReplicatedByLayer(GraphicsLayer*); |
- // Whether this layer is being replicated by another layer. |
- bool isReplicated() const { return m_replicaLayer; } |
- // The layer that replicates this layer (if any). |
- GraphicsLayer* replicaLayer() const { return m_replicaLayer; } |
- // The layer being replicated. |
- GraphicsLayer* replicatedLayer() const { return m_replicatedLayer; } |
- |
- const FloatPoint& replicatedLayerPosition() const { return m_replicatedLayerPosition; } |
- void setReplicatedLayerPosition(const FloatPoint& p) { m_replicatedLayerPosition = p; } |
- |
- enum ShouldSetNeedsDisplay { |
- DontSetNeedsDisplay, |
- SetNeedsDisplay |
- }; |
- |
- // Offset is origin of the renderer minus origin of the graphics layer (so either zero or negative). |
- IntSize offsetFromRenderer() const { return m_offsetFromRenderer; } |
- void setOffsetFromRenderer(const IntSize&, ShouldSetNeedsDisplay = SetNeedsDisplay); |
- |
- // The position of the layer (the location of its top-left corner in its parent) |
- const FloatPoint& position() const { return m_position; } |
- void setPosition(const FloatPoint&); |
- |
- // Anchor point: (0, 0) is top left, (1, 1) is bottom right. The anchor point |
- // affects the origin of the transforms. |
- const FloatPoint3D& anchorPoint() const { return m_anchorPoint; } |
- void setAnchorPoint(const FloatPoint3D&); |
- |
- // The size of the layer. |
- const FloatSize& size() const { return m_size; } |
- void setSize(const FloatSize&); |
- |
- // The boundOrigin affects the offset at which content is rendered, and sublayers are positioned. |
- const FloatPoint& boundsOrigin() const { return m_boundsOrigin; } |
- void setBoundsOrigin(const FloatPoint& origin) { m_boundsOrigin = origin; } |
- |
- const TransformationMatrix& transform() const { return m_transform; } |
- void setTransform(const TransformationMatrix&); |
- |
- const TransformationMatrix& childrenTransform() const { return m_childrenTransform; } |
- void setChildrenTransform(const TransformationMatrix&); |
- |
- bool preserves3D() const { return m_preserves3D; } |
- void setPreserves3D(bool); |
- |
- bool masksToBounds() const { return m_masksToBounds; } |
- void setMasksToBounds(bool); |
- |
- bool drawsContent() const { return m_drawsContent; } |
- void setDrawsContent(bool); |
- |
- bool contentsAreVisible() const { return m_contentsVisible; } |
- void setContentsVisible(bool); |
- |
- void setScrollParent(blink::WebLayer*); |
- void setClipParent(blink::WebLayer*); |
- |
- void setDebugInfo(blink::WebGraphicsLayerDebugInfo*); |
- |
- // For special cases, e.g. drawing missing tiles on Android. |
- // The compositor should never paint this color in normal cases because the RenderLayer |
- // will paint background by itself. |
- const Color& backgroundColor() const { return m_backgroundColor; } |
- void setBackgroundColor(const Color&); |
- |
- // opaque means that we know the layer contents have no alpha |
- bool contentsOpaque() const { return m_contentsOpaque; } |
- void setContentsOpaque(bool); |
- |
- bool backfaceVisibility() const { return m_backfaceVisibility; } |
- void setBackfaceVisibility(bool visible); |
- |
- float opacity() const { return m_opacity; } |
- void setOpacity(float); |
- |
- blink::WebBlendMode blendMode() const { return m_blendMode; } |
- void setBlendMode(blink::WebBlendMode); |
- |
- bool isRootForIsolatedGroup() const { return m_isRootForIsolatedGroup; } |
- void setIsRootForIsolatedGroup(bool); |
- |
- const FilterOperations& filters() const { return m_filters; } |
- |
- // Returns true if filter can be rendered by the compositor |
- bool setFilters(const FilterOperations&); |
- void setBackgroundFilters(const FilterOperations&); |
- |
- // Some GraphicsLayers paint only the foreground or the background content |
- GraphicsLayerPaintingPhase paintingPhase() const { return m_paintingPhase; } |
- void setPaintingPhase(GraphicsLayerPaintingPhase phase) { m_paintingPhase = phase; } |
- |
- void setNeedsDisplay(); |
- // mark the given rect (in layer coords) as needing dispay. Never goes deep. |
- void setNeedsDisplayInRect(const FloatRect&); |
- |
- void setContentsNeedsDisplay(); |
- |
- // Set that the position/size of the contents (image or video). |
- IntRect contentsRect() const { return m_contentsRect; } |
- void setContentsRect(const IntRect&); |
- |
- // Return true if the animation is handled by the compositing system. If this returns |
- // false, the animation will be run by AnimationController. |
- // These methods handle both transitions and keyframe animations. |
- bool addAnimation(PassOwnPtr<blink::WebAnimation>); |
- void pauseAnimation(int animationId, double /*timeOffset*/); |
- void removeAnimation(int animationId); |
- |
- // Layer contents |
- void setContentsToImage(Image*); |
- void setContentsToNinePatch(Image*, const IntRect& aperture); |
- // Pass an invalid color to remove the contents layer. |
- void setContentsToSolidColor(const Color&); |
- void setContentsToPlatformLayer(blink::WebLayer* layer) { setContentsTo(layer); } |
- bool hasContentsLayer() const { return m_contentsLayer; } |
- |
- // Callback from the underlying graphics system to draw layer contents. |
- void paintGraphicsLayerContents(GraphicsContext&, const IntRect& clip); |
- |
- // For hosting this GraphicsLayer in a native layer hierarchy. |
- blink::WebLayer* platformLayer() const; |
- |
- enum CompositingCoordinatesOrientation { CompositingCoordinatesTopDown, CompositingCoordinatesBottomUp }; |
- |
- // Flippedness of the contents of this layer. Does not affect sublayer geometry. |
- void setContentsOrientation(CompositingCoordinatesOrientation orientation) { m_contentsOrientation = orientation; } |
- CompositingCoordinatesOrientation contentsOrientation() const { return m_contentsOrientation; } |
- |
- void dumpLayer(TextStream&, int indent, LayerTreeFlags) const; |
- |
- int paintCount() const { return m_paintCount; } |
- |
- // z-position is the z-equivalent of position(). It's only used for debugging purposes. |
- float zPosition() const { return m_zPosition; } |
- void setZPosition(float); |
- |
- void distributeOpacity(float); |
- float accumulatedOpacity() const; |
- |
- // If the exposed rect of this layer changes, returns true if this or descendant layers need a flush, |
- // for example to allocate new tiles. |
- bool visibleRectChangeRequiresFlush(const FloatRect& /* clipRect */) const { return false; } |
- |
- // Return a string with a human readable form of the layer tree, If debug is true |
- // pointers for the layers and timing data will be included in the returned string. |
- String layerTreeAsText(LayerTreeFlags = LayerTreeNormal) const; |
- |
- // Return an estimate of the backing store memory cost (in bytes). May be incorrect for tiled layers. |
- double backingStoreMemoryEstimate() const; |
- |
- void resetTrackedRepaints(); |
- void addRepaintRect(const FloatRect&); |
- |
- void collectTrackedRepaintRects(Vector<FloatRect>&) const; |
- |
- void addLinkHighlight(LinkHighlightClient*); |
- void removeLinkHighlight(LinkHighlightClient*); |
- // Exposed for tests |
- unsigned numLinkHighlights() { return m_linkHighlights.size(); } |
- LinkHighlightClient* linkHighlight(int i) { return m_linkHighlights[i]; } |
- |
- void setScrollableArea(ScrollableArea*, bool isMainFrame); |
- ScrollableArea* scrollableArea() const { return m_scrollableArea; } |
- |
- blink::WebContentLayer* contentLayer() const { return m_layer.get(); } |
- |
- static void registerContentsLayer(blink::WebLayer*); |
- static void unregisterContentsLayer(blink::WebLayer*); |
- |
- // GraphicsContextPainter implementation. |
- virtual void paint(GraphicsContext&, const IntRect& clip) OVERRIDE; |
- |
- // WebAnimationDelegate implementation. |
- virtual void notifyAnimationStarted(double startTime) OVERRIDE; |
- virtual void notifyAnimationFinished(double finishTime) OVERRIDE; |
- |
- // WebLayerScrollClient implementation. |
- virtual void didScroll() OVERRIDE; |
- |
-protected: |
- explicit GraphicsLayer(GraphicsLayerClient*); |
- // GraphicsLayerFactoryChromium that wants to create a GraphicsLayer need to be friends. |
- friend class blink::GraphicsLayerFactoryChromium; |
- |
- // Exposed for tests. |
- virtual blink::WebLayer* contentsLayer() const { return m_contentsLayer; } |
- |
-private: |
- // Adds a child without calling updateChildList(), so that adding children |
- // can be batched before updating. |
- void addChildInternal(GraphicsLayer*); |
- |
- // This method is used by platform GraphicsLayer classes to clear the filters |
- // when compositing is not done in hardware. It is not virtual, so the caller |
- // needs to notifiy the change to the platform layer as needed. |
- void clearFilters() { m_filters.clear(); } |
- |
- void setReplicatedLayer(GraphicsLayer* layer) { m_replicatedLayer = layer; } |
- |
- int incrementPaintCount() { return ++m_paintCount; } |
- |
- void dumpProperties(TextStream&, int indent, LayerTreeFlags) const; |
- |
- // Helper functions used by settors to keep layer's the state consistent. |
- void updateChildList(); |
- void updateLayerIsDrawable(); |
- void updateContentsRect(); |
- |
- void setContentsTo(blink::WebLayer*); |
- void setupContentsLayer(blink::WebLayer*); |
- void clearContentsLayerIfUnregistered(); |
- blink::WebLayer* contentsLayerIfRegistered(); |
- |
- GraphicsLayerClient* m_client; |
- |
- // Offset from the owning renderer |
- IntSize m_offsetFromRenderer; |
- |
- // Position is relative to the parent GraphicsLayer |
- FloatPoint m_position; |
- FloatPoint3D m_anchorPoint; |
- FloatSize m_size; |
- FloatPoint m_boundsOrigin; |
- |
- TransformationMatrix m_transform; |
- TransformationMatrix m_childrenTransform; |
- |
- Color m_backgroundColor; |
- float m_opacity; |
- float m_zPosition; |
- |
- blink::WebBlendMode m_blendMode; |
- |
- FilterOperations m_filters; |
- |
- bool m_contentsOpaque : 1; |
- bool m_preserves3D: 1; |
- bool m_backfaceVisibility : 1; |
- bool m_masksToBounds : 1; |
- bool m_drawsContent : 1; |
- bool m_contentsVisible : 1; |
- bool m_isRootForIsolatedGroup : 1; |
- |
- bool m_hasScrollParent : 1; |
- bool m_hasClipParent : 1; |
- |
- GraphicsLayerPaintingPhase m_paintingPhase; |
- CompositingCoordinatesOrientation m_contentsOrientation; // affects orientation of layer contents |
- |
- Vector<GraphicsLayer*> m_children; |
- GraphicsLayer* m_parent; |
- |
- GraphicsLayer* m_maskLayer; // Reference to mask layer. We don't own this. |
- GraphicsLayer* m_contentsClippingMaskLayer; // Reference to clipping mask layer. We don't own this. |
- |
- GraphicsLayer* m_replicaLayer; // A layer that replicates this layer. We only allow one, for now. |
- // The replica is not parented; this is the primary reference to it. |
- GraphicsLayer* m_replicatedLayer; // For a replica layer, a reference to the original layer. |
- FloatPoint m_replicatedLayerPosition; // For a replica layer, the position of the replica. |
- |
- IntRect m_contentsRect; |
- |
- int m_paintCount; |
- |
- OwnPtr<blink::WebContentLayer> m_layer; |
- OwnPtr<blink::WebImageLayer> m_imageLayer; |
- OwnPtr<blink::WebNinePatchLayer> m_ninePatchLayer; |
- Color m_contentsSolidColor; |
- OwnPtr<blink::WebSolidColorLayer> m_solidColorLayer; |
- blink::WebLayer* m_contentsLayer; |
- // We don't have ownership of m_contentsLayer, but we do want to know if a given layer is the |
- // same as our current layer in setContentsTo(). Since m_contentsLayer may be deleted at this point, |
- // we stash an ID away when we know m_contentsLayer is alive and use that for comparisons from that point |
- // on. |
- int m_contentsLayerId; |
- |
- Vector<LinkHighlightClient*> m_linkHighlights; |
- |
- OwnPtr<OpaqueRectTrackingContentLayerDelegate> m_opaqueRectTrackingContentLayerDelegate; |
- |
- ScrollableArea* m_scrollableArea; |
- blink::WebCompositingReasons m_compositingReasons; |
- blink::WebGraphicsLayerDebugInfo* m_debugInfo; |
-}; |
- |
- |
-} // namespace WebCore |
- |
-#ifndef NDEBUG |
-// Outside the WebCore namespace for ease of invocation from gdb. |
-void showGraphicsLayerTree(const WebCore::GraphicsLayer* layer); |
-#endif |
- |
-#endif // GraphicsLayer_h |