summaryrefslogtreecommitdiffstats
path: root/WebCore/platform/graphics/mac/GraphicsLayerMac.h
diff options
context:
space:
mode:
Diffstat (limited to 'WebCore/platform/graphics/mac/GraphicsLayerMac.h')
-rw-r--r--WebCore/platform/graphics/mac/GraphicsLayerMac.h388
1 files changed, 0 insertions, 388 deletions
diff --git a/WebCore/platform/graphics/mac/GraphicsLayerMac.h b/WebCore/platform/graphics/mac/GraphicsLayerMac.h
deleted file mode 100644
index 5d4dfe2..0000000
--- a/WebCore/platform/graphics/mac/GraphicsLayerMac.h
+++ /dev/null
@@ -1,388 +0,0 @@
-/*
- * 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 GraphicsLayerMac_h
-#define GraphicsLayerMac_h
-
-#if USE(ACCELERATED_COMPOSITING)
-
-#include "GraphicsLayer.h"
-#include "WebLayer.h"
-#include <wtf/HashMap.h>
-#include <wtf/HashSet.h>
-#include <wtf/RetainPtr.h>
-#include <wtf/text/StringHash.h>
-
-@class CABasicAnimation;
-@class CAKeyframeAnimation;
-@class CAMediaTimingFunction;
-@class CAPropertyAnimation;
-@class WebAnimationDelegate;
-
-namespace WebCore {
-
-class GraphicsLayerMac : public GraphicsLayer {
-public:
-
- GraphicsLayerMac(GraphicsLayerClient*);
- virtual ~GraphicsLayerMac();
-
- virtual void setName(const String&);
-
- // for hosting this GraphicsLayer in a native layer hierarchy
- virtual NativeLayer nativeLayer() const;
-
- virtual bool setChildren(const Vector<GraphicsLayer*>&);
- virtual void addChild(GraphicsLayer*);
- virtual void addChildAtIndex(GraphicsLayer*, int index);
- virtual void addChildAbove(GraphicsLayer* layer, GraphicsLayer* sibling);
- virtual void addChildBelow(GraphicsLayer* layer, GraphicsLayer* sibling);
- virtual bool replaceChild(GraphicsLayer* oldChild, GraphicsLayer* newChild);
-
- virtual void removeFromParent();
-
- virtual void setMaskLayer(GraphicsLayer*);
- virtual void setReplicatedLayer(GraphicsLayer*);
-
- virtual void setPosition(const FloatPoint&);
- virtual void setAnchorPoint(const FloatPoint3D&);
- virtual void setSize(const FloatSize&);
-
- virtual void setTransform(const TransformationMatrix&);
-
- virtual void setChildrenTransform(const TransformationMatrix&);
-
- virtual void setPreserves3D(bool);
- virtual void setMasksToBounds(bool);
- virtual void setDrawsContent(bool);
-
- virtual void setBackgroundColor(const Color&);
- virtual void clearBackgroundColor();
-
- virtual void setContentsOpaque(bool);
- virtual void setBackfaceVisibility(bool);
-
- // return true if we started an animation
- virtual void setOpacity(float);
-
- virtual void setNeedsDisplay();
- virtual void setNeedsDisplayInRect(const FloatRect&);
- virtual void setContentsNeedsDisplay();
-
- virtual void setContentsRect(const IntRect&);
-
- virtual void suspendAnimations(double time);
- virtual void resumeAnimations();
-
- virtual bool addAnimation(const KeyframeValueList&, const IntSize& boxSize, const Animation*, const String& animationName, double timeOffset);
- virtual void pauseAnimation(const String& animationName, double timeOffset);
- virtual void removeAnimation(const String& animationName);
-
- virtual void setContentsToImage(Image*);
- virtual void setContentsToMedia(PlatformLayer*);
- virtual void setContentsToCanvas(PlatformLayer*);
-
- virtual bool hasContentsLayer() const { return m_contentsLayer; }
-
- virtual PlatformLayer* platformLayer() const;
-
- virtual void setDebugBackgroundColor(const Color&);
- virtual void setDebugBorder(const Color&, float borderWidth);
-
- virtual void didDisplay(PlatformLayer*);
-
- void recursiveCommitChanges();
-
- virtual void syncCompositingState();
- virtual void syncCompositingStateForThisLayerOnly();
-
- // Should only be called by animationDidStart: callback
- void animationDidStart(CAAnimation*);
-
-protected:
- virtual void setOpacityInternal(float);
-
-private:
- void updateOpacityOnLayer();
-
- CALayer* primaryLayer() const { return m_structuralLayer.get() ? m_structuralLayer.get() : m_layer.get(); }
- CALayer* hostLayerForSublayers() const;
- CALayer* layerForSuperlayer() const;
- CALayer* animatedLayer(AnimatedPropertyID) const;
-
- typedef String CloneID; // Identifier for a given clone, based on original/replica branching down the tree.
- static bool isReplicatedRootClone(const CloneID& cloneID) { return cloneID[0U] & 1; }
-
- typedef HashMap<CloneID, RetainPtr<CALayer> > LayerMap;
- LayerMap* primaryLayerClones() const { return m_structuralLayer.get() ? m_structuralLayerClones.get() : m_layerClones.get(); }
- LayerMap* animatedLayerClones(AnimatedPropertyID) const;
-
- bool createAnimationFromKeyframes(const KeyframeValueList&, const Animation*, const String& animationName, double timeOffset);
- bool createTransformAnimationsFromKeyframes(const KeyframeValueList&, const Animation*, const String& animationName, double timeOffset, const IntSize& boxSize);
-
- // Return autoreleased animation (use RetainPtr?)
- CABasicAnimation* createBasicAnimation(const Animation*, AnimatedPropertyID, bool additive);
- CAKeyframeAnimation* createKeyframeAnimation(const Animation*, AnimatedPropertyID, bool additive);
- void setupAnimation(CAPropertyAnimation*, const Animation*, bool additive);
-
- CAMediaTimingFunction* timingFunctionForAnimationValue(const AnimationValue*, const Animation*);
-
- bool setAnimationEndpoints(const KeyframeValueList&, const Animation*, CABasicAnimation*);
- bool setAnimationKeyframes(const KeyframeValueList&, const Animation*, CAKeyframeAnimation*);
-
- bool setTransformAnimationEndpoints(const KeyframeValueList&, const Animation*, CABasicAnimation*, int functionIndex, TransformOperation::OperationType, bool isMatrixAnimation, const IntSize& boxSize);
- bool setTransformAnimationKeyframes(const KeyframeValueList&, const Animation*, CAKeyframeAnimation*, int functionIndex, TransformOperation::OperationType, bool isMatrixAnimation, const IntSize& boxSize);
-
- bool animationIsRunning(const String& animationName) const
- {
- return m_runningAnimations.find(animationName) != m_runningAnimations.end();
- }
-
- void commitLayerChangesBeforeSublayers();
- void commitLayerChangesAfterSublayers();
-
- FloatSize constrainedSize() const;
-
- bool requiresTiledLayer(const FloatSize&) const;
- void swapFromOrToTiledLayer(bool useTiledLayer);
-
- CompositingCoordinatesOrientation defaultContentsOrientation() const;
- void updateContentsTransform();
-
- void setupContentsLayer(CALayer*);
- CALayer* contentsLayer() const { return m_contentsLayer.get(); }
-
- virtual void setReplicatedByLayer(GraphicsLayer*);
-
- // Used to track the path down the tree for replica layers.
- struct ReplicaState {
- static const size_t maxReplicaDepth = 16;
- enum ReplicaBranchType { ChildBranch = 0, ReplicaBranch = 1 };
- ReplicaState(ReplicaBranchType firstBranch)
- : m_replicaDepth(0)
- {
- push(firstBranch);
- }
-
- // Called as we walk down the tree to build replicas.
- void push(ReplicaBranchType branchType)
- {
- m_replicaBranches.append(branchType);
- if (branchType == ReplicaBranch)
- ++m_replicaDepth;
- }
-
- void setBranchType(ReplicaBranchType branchType)
- {
- ASSERT(!m_replicaBranches.isEmpty());
-
- if (m_replicaBranches.last() != branchType) {
- if (branchType == ReplicaBranch)
- ++m_replicaDepth;
- else
- --m_replicaDepth;
- }
-
- m_replicaBranches.last() = branchType;
- }
-
- void pop()
- {
- if (m_replicaBranches.last() == ReplicaBranch)
- --m_replicaDepth;
- m_replicaBranches.removeLast();
- }
-
- size_t depth() const { return m_replicaBranches.size(); }
- size_t replicaDepth() const { return m_replicaDepth; }
-
- CloneID cloneID() const;
-
- private:
- Vector<ReplicaBranchType> m_replicaBranches;
- size_t m_replicaDepth;
- };
- CALayer *replicatedLayerRoot(ReplicaState&);
-
- enum CloneLevel { RootCloneLevel, IntermediateCloneLevel };
- CALayer *fetchCloneLayers(GraphicsLayer* replicaRoot, ReplicaState&, CloneLevel);
-
- CALayer *cloneLayer(CALayer *, CloneLevel);
- CALayer *findOrMakeClone(CloneID, CALayer *, LayerMap*, CloneLevel);
-
- void ensureCloneLayers(CloneID index, CALayer *& primaryLayer, CALayer *& structuralLayer, CALayer *& contentsLayer, CloneLevel);
-
- bool hasCloneLayers() const { return m_layerClones; }
- void removeCloneLayers();
- FloatPoint positionForCloneRootLayer() const;
-
- void propagateLayerChangeToReplicas();
-
- // All these "update" methods will be called inside a BEGIN_BLOCK_OBJC_EXCEPTIONS/END_BLOCK_OBJC_EXCEPTIONS block.
- void updateLayerNames();
- void updateSublayerList();
- void updateLayerPosition();
- void updateLayerSize();
- void updateAnchorPoint();
- void updateTransform();
- void updateChildrenTransform();
- void updateMasksToBounds();
- void updateContentsOpaque();
- void updateBackfaceVisibility();
- void updateStructuralLayer();
- void updateLayerDrawsContent();
- void updateLayerBackgroundColor();
-
- void updateContentsImage();
- void updateContentsMediaLayer();
- void updateContentsCanvasLayer();
- void updateContentsRect();
- void updateMaskLayer();
- void updateReplicatedLayers();
-
- void updateLayerAnimations();
- void updateContentsNeedsDisplay();
-
- enum StructuralLayerPurpose {
- NoStructuralLayer = 0,
- StructuralLayerForPreserves3D,
- StructuralLayerForReplicaFlattening
- };
- void ensureStructuralLayer(StructuralLayerPurpose);
- StructuralLayerPurpose structuralLayerPurpose() const;
-
- void setCAAnimationOnLayer(CAPropertyAnimation*, AnimatedPropertyID, const String& animationName, int index, double timeOffset);
- bool removeCAAnimationFromLayer(AnimatedPropertyID, const String& animationName, int index);
- void pauseCAAnimationOnLayer(AnimatedPropertyID, const String& animationName, int index, double timeOffset);
-
- enum MoveOrCopy { Move, Copy };
- static void moveOrCopyLayerAnimation(MoveOrCopy, const String& animationIdentifier, CALayer *fromLayer, CALayer *toLayer);
- void moveOrCopyAnimationsForProperty(MoveOrCopy, AnimatedPropertyID, CALayer * fromLayer, CALayer * toLayer);
-
- enum LayerChange {
- NoChange = 0,
- NameChanged = 1 << 1,
- ChildrenChanged = 1 << 2, // also used for content layer, and preserves-3d, and size if tiling changes?
- PositionChanged = 1 << 3,
- AnchorPointChanged = 1 << 4,
- SizeChanged = 1 << 5,
- TransformChanged = 1 << 6,
- ChildrenTransformChanged = 1 << 7,
- Preserves3DChanged = 1 << 8,
- MasksToBoundsChanged = 1 << 9,
- DrawsContentChanged = 1 << 10, // need this?
- BackgroundColorChanged = 1 << 11,
- ContentsOpaqueChanged = 1 << 12,
- BackfaceVisibilityChanged = 1 << 13,
- OpacityChanged = 1 << 14,
- AnimationChanged = 1 << 15,
- DirtyRectsChanged = 1 << 16,
- ContentsImageChanged = 1 << 17,
- ContentsMediaLayerChanged = 1 << 18,
- ContentsCanvasLayerChanged = 1 << 19,
- ContentsRectChanged = 1 << 20,
- MaskLayerChanged = 1 << 21,
- ReplicatedLayerChanged = 1 << 22,
- ContentsNeedsDisplay = 1 << 23
- };
- typedef unsigned LayerChangeFlags;
- void noteLayerPropertyChanged(LayerChangeFlags flags);
- void noteSublayersChanged();
-
- void repaintLayerDirtyRects();
-
- RetainPtr<WebLayer> m_layer; // The main layer
- RetainPtr<CALayer> m_structuralLayer; // A layer used for structural reasons, like preserves-3d or replica-flattening. Is the parent of m_layer.
- RetainPtr<CALayer> m_contentsLayer; // A layer used for inner content, like image and video
-
- // References to clones of our layers, for replicated layers.
- OwnPtr<LayerMap> m_layerClones;
- OwnPtr<LayerMap> m_structuralLayerClones;
- OwnPtr<LayerMap> m_contentsLayerClones;
-
- enum ContentsLayerPurpose {
- NoContentsLayer = 0,
- ContentsLayerForImage,
- ContentsLayerForMedia,
- ContentsLayerForCanvas
- };
-
- ContentsLayerPurpose m_contentsLayerPurpose;
- bool m_contentsLayerHasBackgroundColor : 1;
-
- RetainPtr<WebAnimationDelegate> m_animationDelegate;
-
- RetainPtr<CGImageRef> m_uncorrectedContentsImage;
- RetainPtr<CGImageRef> m_pendingContentsImage;
-
- // This represents the animation of a single property. There may be multiple transform animations for
- // a single transition or keyframe animation, so index is used to distinguish these.
- struct LayerPropertyAnimation {
- LayerPropertyAnimation(CAPropertyAnimation* caAnimation, const String& animationName, AnimatedPropertyID property, int index, double timeOffset)
- : m_animation(caAnimation)
- , m_name(animationName)
- , m_property(property)
- , m_index(index)
- , m_timeOffset(timeOffset)
- { }
-
- RetainPtr<CAPropertyAnimation*> m_animation;
- String m_name;
- AnimatedPropertyID m_property;
- int m_index;
- double m_timeOffset;
- };
-
- // Uncommitted transitions and animations.
- Vector<LayerPropertyAnimation> m_uncomittedAnimations;
-
- enum Action { Remove, Pause };
- struct AnimationProcessingAction {
- AnimationProcessingAction(Action action = Remove, double timeOffset = 0)
- : action(action)
- , timeOffset(timeOffset)
- {
- }
- Action action;
- double timeOffset; // only used for pause
- };
- typedef HashMap<String, AnimationProcessingAction> AnimationsToProcessMap;
- AnimationsToProcessMap m_animationsToProcess;
-
- // Map of animation names to their associated lists of property animations, so we can remove/pause them.
- typedef HashMap<String, Vector<LayerPropertyAnimation> > AnimationsMap;
- AnimationsMap m_runningAnimations;
-
- Vector<FloatRect> m_dirtyRects;
-
- LayerChangeFlags m_uncommittedChanges;
-};
-
-} // namespace WebCore
-
-
-#endif // USE(ACCELERATED_COMPOSITING)
-
-#endif // GraphicsLayerMac_h