Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1202)

Unified Diff: Source/core/platform/graphics/GraphicsLayer.h

Issue 99103006: Moving GraphicsContext and dependencies from core to platform. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Final patch - fixes Android Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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
« no previous file with comments | « Source/core/platform/graphics/GraphicsContextTest.cpp ('k') | Source/core/platform/graphics/GraphicsLayer.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698