• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2015 Google Inc.
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  */
7 
8 #ifndef GrQuad_DEFINED
9 #define GrQuad_DEFINED
10 
11 #include "SkPoint.h"
12 #include "SkMatrix.h"
13 
14 /**
15  * GrQuad is a collection of 4 points which can be used to represent an arbitrary quadrilateral
16  */
17 class GrQuad {
18 public:
GrQuad()19     GrQuad() {}
20 
GrQuad(const GrQuad & that)21     GrQuad(const GrQuad& that) {
22         *this = that;
23     }
24 
GrQuad(const SkRect & rect)25     explicit GrQuad(const SkRect& rect) {
26         this->set(rect);
27     }
28 
set(const SkRect & rect)29     void set(const SkRect& rect) {
30         fPoints->setRectFan(rect.fLeft, rect.fTop, rect.fRight, rect.fBottom);
31     }
32 
map(const SkMatrix & matrix)33     void map(const SkMatrix& matrix) {
34         matrix.mapPoints(fPoints, kNumPoints);
35     }
36 
setFromMappedRect(const SkRect & rect,const SkMatrix & matrix)37     void setFromMappedRect(const SkRect& rect, const SkMatrix& matrix) {
38         this->set(rect);
39         matrix.mapPoints(fPoints, kNumPoints);
40     }
41 
42     const GrQuad& operator=(const GrQuad& that) {
43         memcpy(fPoints, that.fPoints, sizeof(SkPoint) * kNumPoints);
44         return *this;
45     }
46 
points()47     SkPoint* points() {
48         return fPoints;
49     }
50 
points()51     const SkPoint* points() const {
52         return fPoints;
53     }
54 
point(int i)55     const SkPoint& point(int i) const {
56         SkASSERT(i < kNumPoints);
57         return fPoints[i];
58     }
59 
60 private:
61     static const int kNumPoints = 4;
62     SkPoint fPoints[kNumPoints];
63 };
64 
65 #endif
66