blob: 3a202c61cb47da623493dd4da242fc3d01a61c47 [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"
reed6a882062016-08-24 04:22:08 -070013#include "SkMatrixPriv.h"
joshualittae5b2c62015-08-19 08:48:41 -070014
15/**
16 * GrQuad is a collection of 4 points which can be used to represent an arbitrary quadrilateral
17 */
18class GrQuad {
19public:
joshualitt8cce8f12015-08-26 06:23:39 -070020 GrQuad() {}
21
joshualittae5b2c62015-08-19 08:48:41 -070022 GrQuad(const GrQuad& that) {
23 *this = that;
24 }
25
26 explicit GrQuad(const SkRect& rect) {
27 this->set(rect);
28 }
29
30 void set(const SkRect& rect) {
31 fPoints->setRectFan(rect.fLeft, rect.fTop, rect.fRight, rect.fBottom);
32 }
33
34 void map(const SkMatrix& matrix) {
35 matrix.mapPoints(fPoints, kNumPoints);
36 }
37
38 void setFromMappedRect(const SkRect& rect, const SkMatrix& matrix) {
reed6a882062016-08-24 04:22:08 -070039 SkMatrixPriv::SetMappedRectFan(matrix, rect, fPoints);
joshualittae5b2c62015-08-19 08:48:41 -070040 }
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