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 6 #ifndef CC_RESOURCES_LAYER_QUAD_H_ 7 #define CC_RESOURCES_LAYER_QUAD_H_ 8 9 #include "base/basictypes.h" 10 #include "cc/base/cc_export.h" 11 #include "ui/gfx/point_f.h" 12 13 namespace gfx { 14 class QuadF; 15 } 16 17 static const float kAntiAliasingInflateDistance = 0.5f; 18 19 namespace cc { 20 21 class CC_EXPORT LayerQuad { 22 public: 23 class Edge { 24 public: 25 Edge() : x_(0), y_(0), z_(0) {} 26 Edge(gfx::PointF p, gfx::PointF q); 27 28 float x() const { return x_; } 29 float y() const { return y_; } 30 float z() const { return z_; } 31 32 void set_x(float x) { x_ = x; } 33 void set_y(float y) { y_ = y; } 34 void set_z(float z) { z_ = z; } 35 void set(float x, float y, float z) { 36 x_ = x; 37 y_ = y; 38 z_ = z; 39 } 40 41 void move_x(float dx) { x_ += dx; } 42 void move_y(float dy) { y_ += dy; } 43 void move_z(float dz) { z_ += dz; } 44 void move(float dx, float dy, float dz) { 45 x_ += dx; 46 y_ += dy; 47 z_ += dz; 48 } 49 50 void scale_x(float sx) { x_ *= sx; } 51 void scale_y(float sy) { y_ *= sy; } 52 void scale_z(float sz) { z_ *= sz; } 53 void scale(float sx, float sy, float sz) { 54 x_ *= sx; 55 y_ *= sy; 56 z_ *= sz; 57 } 58 void scale(float s) { scale(s, s, s); } 59 60 gfx::PointF Intersect(const Edge& e) const { 61 return gfx::PointF( 62 (y() * e.z() - e.y() * z()) / (x() * e.y() - e.x() * y()), 63 (x() * e.z() - e.x() * z()) / (e.x() * y() - x() * e.y())); 64 } 65 66 private: 67 float x_; 68 float y_; 69 float z_; 70 }; 71 72 LayerQuad(const Edge& left, 73 const Edge& top, 74 const Edge& right, 75 const Edge& bottom); 76 explicit LayerQuad(const gfx::QuadF& quad); 77 78 Edge left() const { return left_; } 79 Edge top() const { return top_; } 80 Edge right() const { return right_; } 81 Edge bottom() const { return bottom_; } 82 83 void InflateX(float dx) { 84 left_.move_z(dx); 85 right_.move_z(dx); 86 } 87 void InflateY(float dy) { 88 top_.move_z(dy); 89 bottom_.move_z(dy); 90 } 91 void Inflate(float d) { 92 InflateX(d); 93 InflateY(d); 94 } 95 void InflateAntiAliasingDistance() { 96 Inflate(kAntiAliasingInflateDistance); 97 } 98 99 gfx::QuadF ToQuadF() const; 100 101 void ToFloatArray(float flattened[12]) const; 102 103 private: 104 Edge left_; 105 Edge top_; 106 Edge right_; 107 Edge bottom_; 108 109 DISALLOW_COPY_AND_ASSIGN(LayerQuad); 110 }; 111 112 } // namespace cc 113 114 #endif // CC_RESOURCES_LAYER_QUAD_H_ 115