blob: 9a8d1f3a4a37a1d421b83ceb52700ce593a0391d [file] [log] [blame]
joshualittae5b2c62015-08-19 08:48:41 -07001/*
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 */
17class GrQuad {
18public:
joshualitt8cce8f12015-08-26 06:23:39 -070019 GrQuad() {}
20
joshualittae5b2c62015-08-19 08:48:41 -070021 GrQuad(const GrQuad& that) {
22 *this = that;
23 }
24
25 explicit GrQuad(const SkRect& rect) {
26 this->set(rect);
27 }
28
29 void set(const SkRect& rect) {
30 fPoints->setRectFan(rect.fLeft, rect.fTop, rect.fRight, rect.fBottom);
31 }
32
33 void map(const SkMatrix& matrix) {
34 matrix.mapPoints(fPoints, kNumPoints);
35 }
36
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
47 SkPoint* points() {
48 return fPoints;
49 }
50
51 const SkPoint* points() const {
52 return fPoints;
53 }
54
joshualitt8cce8f12015-08-26 06:23:39 -070055 const SkPoint& point(int i) const {
56 SkASSERT(i < kNumPoints);
57 return fPoints[i];
58 }
59
joshualittae5b2c62015-08-19 08:48:41 -070060private:
61 static const int kNumPoints = 4;
62 SkPoint fPoints[kNumPoints];
63};
64
65#endif