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