• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
3 // found in the LICENSE file.
4 
5 #include "cc/resources/layer_quad.h"
6 
7 #include "base/logging.h"
8 #include "ui/gfx/quad_f.h"
9 
10 namespace cc {
11 
Edge(gfx::PointF p,gfx::PointF q)12 LayerQuad::Edge::Edge(gfx::PointF p, gfx::PointF q) {
13   DCHECK(p != q);
14 
15   gfx::Vector2dF tangent(p.y() - q.y(), q.x() - p.x());
16   float cross2 = p.x() * q.y() - q.x() * p.y();
17 
18   set(tangent.x(), tangent.y(), cross2);
19   scale(1.0f / tangent.Length());
20 }
21 
LayerQuad(const gfx::QuadF & quad)22 LayerQuad::LayerQuad(const gfx::QuadF& quad) {
23   // Create edges.
24   left_ = Edge(quad.p4(), quad.p1());
25   right_ = Edge(quad.p2(), quad.p3());
26   top_ = Edge(quad.p1(), quad.p2());
27   bottom_ = Edge(quad.p3(), quad.p4());
28 
29   float sign = quad.IsCounterClockwise() ? -1 : 1;
30   left_.scale(sign);
31   right_.scale(sign);
32   top_.scale(sign);
33   bottom_.scale(sign);
34 }
35 
LayerQuad(const Edge & left,const Edge & top,const Edge & right,const Edge & bottom)36 LayerQuad::LayerQuad(const Edge& left,
37                      const Edge& top,
38                      const Edge& right,
39                      const Edge& bottom)
40     : left_(left),
41       top_(top),
42       right_(right),
43       bottom_(bottom) {}
44 
ToQuadF() const45 gfx::QuadF LayerQuad::ToQuadF() const {
46   return gfx::QuadF(left_.Intersect(top_),
47                     top_.Intersect(right_),
48                     right_.Intersect(bottom_),
49                     bottom_.Intersect(left_));
50 }
51 
ToFloatArray(float flattened[12]) const52 void LayerQuad::ToFloatArray(float flattened[12]) const {
53   flattened[0] = left_.x();
54   flattened[1] = left_.y();
55   flattened[2] = left_.z();
56   flattened[3] = top_.x();
57   flattened[4] = top_.y();
58   flattened[5] = top_.z();
59   flattened[6] = right_.x();
60   flattened[7] = right_.y();
61   flattened[8] = right_.z();
62   flattened[9] = bottom_.x();
63   flattened[10] = bottom_.y();
64   flattened[11] = bottom_.z();
65 }
66 
67 }  // namespace cc
68