OLD | NEW |
1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "cc/layer_sorter.h" | 5 #include "cc/layer_sorter.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <deque> | 8 #include <deque> |
9 #include <limits> | 9 #include <limits> |
10 #include <vector> | 10 #include <vector> |
11 | 11 |
12 #include "base/logging.h" | 12 #include "base/logging.h" |
13 #include "cc/math_util.h" | 13 #include "cc/math_util.h" |
14 #include "cc/render_surface_impl.h" | 14 #include "cc/render_surface_impl.h" |
15 #include <public/WebTransformationMatrix.h> | 15 #include "ui/gfx/transform.h" |
16 | 16 |
17 using namespace std; | 17 using namespace std; |
18 using WebKit::WebTransformationMatrix; | |
19 | 18 |
20 namespace cc { | 19 namespace cc { |
21 | 20 |
22 inline static float perpProduct(const gfx::Vector2dF& u, const gfx::Vector2dF& v
) | 21 inline static float perpProduct(const gfx::Vector2dF& u, const gfx::Vector2dF& v
) |
23 { | 22 { |
24 return u.x() * v.y() - u.y() * v.x(); | 23 return u.x() * v.y() - u.y() * v.x(); |
25 } | 24 } |
26 | 25 |
27 // Tests if two edges defined by their endpoints (a,b) and (c,d) intersect. Retu
rns true and the | 26 // Tests if two edges defined by their endpoints (a,b) and (c,d) intersect. Retu
rns true and the |
28 // point of intersection if they do and false otherwise. | 27 // point of intersection if they do and false otherwise. |
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
139 if (maxDiff <= 0) | 138 if (maxDiff <= 0) |
140 return ABeforeB; | 139 return ABeforeB; |
141 | 140 |
142 return BBeforeA; | 141 return BBeforeA; |
143 } | 142 } |
144 | 143 |
145 LayerShape::LayerShape() | 144 LayerShape::LayerShape() |
146 { | 145 { |
147 } | 146 } |
148 | 147 |
149 LayerShape::LayerShape(float width, float height, const WebTransformationMatrix&
drawTransform) | 148 LayerShape::LayerShape(float width, float height, const gfx::Transform& drawTran
sform) |
150 { | 149 { |
151 gfx::QuadF layerQuad(gfx::RectF(0, 0, width, height)); | 150 gfx::QuadF layerQuad(gfx::RectF(0, 0, width, height)); |
152 | 151 |
153 // Compute the projection of the layer quad onto the z = 0 plane. | 152 // Compute the projection of the layer quad onto the z = 0 plane. |
154 | 153 |
155 gfx::PointF clippedQuad[8]; | 154 gfx::PointF clippedQuad[8]; |
156 int numVerticesInClippedQuad; | 155 int numVerticesInClippedQuad; |
157 MathUtil::mapClippedQuad(drawTransform, layerQuad, clippedQuad, numVerticesI
nClippedQuad); | 156 MathUtil::mapClippedQuad(drawTransform, layerQuad, clippedQuad, numVerticesI
nClippedQuad); |
158 | 157 |
159 if (numVerticesInClippedQuad < 3) { | 158 if (numVerticesInClippedQuad < 3) { |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
223 float maxZ = -FLT_MAX; | 222 float maxZ = -FLT_MAX; |
224 for (LayerList::const_iterator it = first; it < last; it++) { | 223 for (LayerList::const_iterator it = first; it < last; it++) { |
225 m_nodes.push_back(GraphNode(*it)); | 224 m_nodes.push_back(GraphNode(*it)); |
226 GraphNode& node = m_nodes.at(m_nodes.size() - 1); | 225 GraphNode& node = m_nodes.at(m_nodes.size() - 1); |
227 RenderSurfaceImpl* renderSurface = node.layer->renderSurface(); | 226 RenderSurfaceImpl* renderSurface = node.layer->renderSurface(); |
228 if (!node.layer->drawsContent() && !renderSurface) | 227 if (!node.layer->drawsContent() && !renderSurface) |
229 continue; | 228 continue; |
230 | 229 |
231 DVLOG(2) << "Layer " << node.layer->id() << " (" << node.layer->bounds()
.width() << " x " << node.layer->bounds().height() << ")"; | 230 DVLOG(2) << "Layer " << node.layer->id() << " (" << node.layer->bounds()
.width() << " x " << node.layer->bounds().height() << ")"; |
232 | 231 |
233 WebTransformationMatrix drawTransform; | 232 gfx::Transform drawTransform; |
234 float layerWidth, layerHeight; | 233 float layerWidth, layerHeight; |
235 if (renderSurface) { | 234 if (renderSurface) { |
236 drawTransform = renderSurface->drawTransform(); | 235 drawTransform = renderSurface->drawTransform(); |
237 layerWidth = renderSurface->contentRect().width(); | 236 layerWidth = renderSurface->contentRect().width(); |
238 layerHeight = renderSurface->contentRect().height(); | 237 layerHeight = renderSurface->contentRect().height(); |
239 } else { | 238 } else { |
240 drawTransform = node.layer->drawTransform(); | 239 drawTransform = node.layer->drawTransform(); |
241 layerWidth = node.layer->contentBounds().width(); | 240 layerWidth = node.layer->contentBounds().width(); |
242 layerHeight = node.layer->contentBounds().height(); | 241 layerHeight = node.layer->contentBounds().height(); |
243 } | 242 } |
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
406 *it = sortedList[count++]->layer; | 405 *it = sortedList[count++]->layer; |
407 | 406 |
408 DVLOG(2) << "Sorting end ----"; | 407 DVLOG(2) << "Sorting end ----"; |
409 | 408 |
410 m_nodes.clear(); | 409 m_nodes.clear(); |
411 m_edges.clear(); | 410 m_edges.clear(); |
412 m_activeEdges.clear(); | 411 m_activeEdges.clear(); |
413 } | 412 } |
414 | 413 |
415 } // namespace cc | 414 } // namespace cc |
OLD | NEW |