Home | History | Annotate | Download | only in resources
      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