Index: cc/layer_sorter.h |
diff --git a/cc/layer_sorter.h b/cc/layer_sorter.h |
index 638cbb270ce9b24689d5095baf174ade4f4d1a13..d4ca664abbbbf314daca7b420f98571fa448a7b2 100644 |
--- a/cc/layer_sorter.h |
+++ b/cc/layer_sorter.h |
@@ -1,3 +1,92 @@ |
-// Copyright 2012 The Chromium Authors. All rights reserved. |
+// Copyright 2011 The Chromium Authors. All rights reserved. |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
+ |
+#ifndef CCLayerSorter_h |
+#define CCLayerSorter_h |
+ |
+#include "base/basictypes.h" |
+#include "CCLayerImpl.h" |
+#include "FloatPoint3D.h" |
+#include "FloatQuad.h" |
+#include "FloatRect.h" |
+#include <vector> |
+#include <wtf/HashMap.h> |
+#include <wtf/Vector.h> |
+ |
+namespace WebKit { |
+class WebTransformationMatrix; |
+} |
+ |
+namespace cc { |
+ |
+class CCLayerSorter { |
+public: |
+ CCLayerSorter(); |
+ ~CCLayerSorter(); |
+ |
+ typedef std::vector<CCLayerImpl*> LayerList; |
+ |
+ void sort(LayerList::iterator first, LayerList::iterator last); |
+ |
+ // Holds various useful properties derived from a layer's 3D outline. |
+ struct LayerShape { |
+ LayerShape(); |
+ LayerShape(float width, float height, const WebKit::WebTransformationMatrix& drawTransform); |
+ |
+ float layerZFromProjectedPoint(const FloatPoint&) const; |
+ |
+ FloatPoint3D layerNormal; |
+ FloatPoint3D transformOrigin; |
+ FloatQuad projectedQuad; |
+ FloatRect projectedBounds; |
+ }; |
+ |
+ enum ABCompareResult { |
+ ABeforeB, |
+ BBeforeA, |
+ None |
+ }; |
+ |
+ static ABCompareResult checkOverlap(LayerShape*, LayerShape*, float zThreshold, float& weight); |
+ |
+private: |
+ struct GraphEdge; |
+ |
+ struct GraphNode { |
+ explicit GraphNode(CCLayerImpl* cclayer); |
+ ~GraphNode(); |
+ |
+ CCLayerImpl* layer; |
+ LayerShape shape; |
+ Vector<GraphEdge*> incoming; |
+ Vector<GraphEdge*> outgoing; |
+ float incomingEdgeWeight; |
+ }; |
+ |
+ struct GraphEdge { |
+ GraphEdge(GraphNode* fromNode, GraphNode* toNode, float weight) : from(fromNode), to(toNode), weight(weight) { }; |
+ |
+ GraphNode* from; |
+ GraphNode* to; |
+ float weight; |
+ }; |
+ |
+ typedef Vector<GraphNode> NodeList; |
+ typedef Vector<GraphEdge> EdgeList; |
+ NodeList m_nodes; |
+ EdgeList m_edges; |
+ float m_zRange; |
+ |
+ typedef HashMap<GraphEdge*, GraphEdge*> EdgeMap; |
+ EdgeMap m_activeEdges; |
+ |
+ void createGraphNodes(LayerList::iterator first, LayerList::iterator last); |
+ void createGraphEdges(); |
+ void removeEdgeFromList(GraphEdge*, Vector<GraphEdge*>&); |
+ |
+ DISALLOW_COPY_AND_ASSIGN(CCLayerSorter); |
+}; |
+ |
+} |
+#endif |