/* * 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