| /* |
| * Copyright 2015 Google Inc. |
| * |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| #ifndef GrQuad_DEFINED |
| #define GrQuad_DEFINED |
| |
| #include "SkPoint.h" |
| #include "SkMatrix.h" |
| |
| /** |
| * GrQuad is a collection of 4 points which can be used to represent an arbitrary quadrilateral |
| */ |
| class GrQuad { |
| public: |
| GrQuad() {} |
| |
| GrQuad(const GrQuad& that) { |
| *this = that; |
| } |
| |
| explicit GrQuad(const SkRect& rect) { |
| this->set(rect); |
| } |
| |
| void set(const SkRect& rect) { |
| fPoints->setRectFan(rect.fLeft, rect.fTop, rect.fRight, rect.fBottom); |
| } |
| |
| void map(const SkMatrix& matrix) { |
| matrix.mapPoints(fPoints, kNumPoints); |
| } |
| |
| void setFromMappedRect(const SkRect& rect, const SkMatrix& matrix) { |
| this->set(rect); |
| matrix.mapPoints(fPoints, kNumPoints); |
| } |
| |
| const GrQuad& operator=(const GrQuad& that) { |
| memcpy(fPoints, that.fPoints, sizeof(SkPoint) * kNumPoints); |
| return *this; |
| } |
| |
| SkPoint* points() { |
| return fPoints; |
| } |
| |
| const SkPoint* points() const { |
| return fPoints; |
| } |
| |
| const SkPoint& point(int i) const { |
| SkASSERT(i < kNumPoints); |
| return fPoints[i]; |
| } |
| |
| private: |
| static const int kNumPoints = 4; |
| SkPoint fPoints[kNumPoints]; |
| }; |
| |
| #endif |