diff options
author | enne@chromium.org <enne@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-12 22:43:41 +0000 |
---|---|---|
committer | enne@chromium.org <enne@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-12 22:43:41 +0000 |
commit | cd57cc5a246367c2558fefa04ae9eca8f4d545d2 (patch) | |
tree | a2235045e9c5e4ff028d641b76f5d01aa5461b26 /cc/layer_sorter.h | |
parent | 3fe7ba055be580443445895c0ee01ada3b628487 (diff) | |
download | chromium_src-cd57cc5a246367c2558fefa04ae9eca8f4d545d2.zip chromium_src-cd57cc5a246367c2558fefa04ae9eca8f4d545d2.tar.gz chromium_src-cd57cc5a246367c2558fefa04ae9eca8f4d545d2.tar.bz2 |
[cc] Rename all cc/ filenames to Chromium style
BUG=155413
Review URL: https://codereview.chromium.org/11122003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@161671 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'cc/layer_sorter.h')
-rw-r--r-- | cc/layer_sorter.h | 91 |
1 files changed, 90 insertions, 1 deletions
diff --git a/cc/layer_sorter.h b/cc/layer_sorter.h index 638cbb2..d4ca664 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 |