12880df2609eba09b555ca37be04b6ad89290c765Tom Hudson/* 22880df2609eba09b555ca37be04b6ad89290c765Tom Hudson * Copyright 2015 Google Inc. 32880df2609eba09b555ca37be04b6ad89290c765Tom Hudson * 42880df2609eba09b555ca37be04b6ad89290c765Tom Hudson * Use of this source code is governed by a BSD-style license that can be 52880df2609eba09b555ca37be04b6ad89290c765Tom Hudson * found in the LICENSE file. 62880df2609eba09b555ca37be04b6ad89290c765Tom Hudson */ 72880df2609eba09b555ca37be04b6ad89290c765Tom Hudson 82880df2609eba09b555ca37be04b6ad89290c765Tom Hudson#ifndef GrQuad_DEFINED 92880df2609eba09b555ca37be04b6ad89290c765Tom Hudson#define GrQuad_DEFINED 102880df2609eba09b555ca37be04b6ad89290c765Tom Hudson 112880df2609eba09b555ca37be04b6ad89290c765Tom Hudson#include "SkPoint.h" 122880df2609eba09b555ca37be04b6ad89290c765Tom Hudson#include "SkMatrix.h" 132880df2609eba09b555ca37be04b6ad89290c765Tom Hudson 142880df2609eba09b555ca37be04b6ad89290c765Tom Hudson/** 152880df2609eba09b555ca37be04b6ad89290c765Tom Hudson * GrQuad is a collection of 4 points which can be used to represent an arbitrary quadrilateral 162880df2609eba09b555ca37be04b6ad89290c765Tom Hudson */ 172880df2609eba09b555ca37be04b6ad89290c765Tom Hudsonclass GrQuad { 182880df2609eba09b555ca37be04b6ad89290c765Tom Hudsonpublic: 192880df2609eba09b555ca37be04b6ad89290c765Tom Hudson GrQuad() {} 202880df2609eba09b555ca37be04b6ad89290c765Tom Hudson 212880df2609eba09b555ca37be04b6ad89290c765Tom Hudson GrQuad(const GrQuad& that) { 222880df2609eba09b555ca37be04b6ad89290c765Tom Hudson *this = that; 232880df2609eba09b555ca37be04b6ad89290c765Tom Hudson } 242880df2609eba09b555ca37be04b6ad89290c765Tom Hudson 252880df2609eba09b555ca37be04b6ad89290c765Tom Hudson explicit GrQuad(const SkRect& rect) { 262880df2609eba09b555ca37be04b6ad89290c765Tom Hudson this->set(rect); 272880df2609eba09b555ca37be04b6ad89290c765Tom Hudson } 282880df2609eba09b555ca37be04b6ad89290c765Tom Hudson 292880df2609eba09b555ca37be04b6ad89290c765Tom Hudson void set(const SkRect& rect) { 302880df2609eba09b555ca37be04b6ad89290c765Tom Hudson fPoints->setRectFan(rect.fLeft, rect.fTop, rect.fRight, rect.fBottom); 312880df2609eba09b555ca37be04b6ad89290c765Tom Hudson } 322880df2609eba09b555ca37be04b6ad89290c765Tom Hudson 332880df2609eba09b555ca37be04b6ad89290c765Tom Hudson void map(const SkMatrix& matrix) { 342880df2609eba09b555ca37be04b6ad89290c765Tom Hudson matrix.mapPoints(fPoints, kNumPoints); 352880df2609eba09b555ca37be04b6ad89290c765Tom Hudson } 362880df2609eba09b555ca37be04b6ad89290c765Tom Hudson 372880df2609eba09b555ca37be04b6ad89290c765Tom Hudson void setFromMappedRect(const SkRect& rect, const SkMatrix& matrix) { 382880df2609eba09b555ca37be04b6ad89290c765Tom Hudson this->set(rect); 392880df2609eba09b555ca37be04b6ad89290c765Tom Hudson matrix.mapPoints(fPoints, kNumPoints); 402880df2609eba09b555ca37be04b6ad89290c765Tom Hudson } 412880df2609eba09b555ca37be04b6ad89290c765Tom Hudson 422880df2609eba09b555ca37be04b6ad89290c765Tom Hudson const GrQuad& operator=(const GrQuad& that) { 432880df2609eba09b555ca37be04b6ad89290c765Tom Hudson memcpy(fPoints, that.fPoints, sizeof(SkPoint) * kNumPoints); 442880df2609eba09b555ca37be04b6ad89290c765Tom Hudson return *this; 452880df2609eba09b555ca37be04b6ad89290c765Tom Hudson } 462880df2609eba09b555ca37be04b6ad89290c765Tom Hudson 472880df2609eba09b555ca37be04b6ad89290c765Tom Hudson SkPoint* points() { 482880df2609eba09b555ca37be04b6ad89290c765Tom Hudson return fPoints; 492880df2609eba09b555ca37be04b6ad89290c765Tom Hudson } 502880df2609eba09b555ca37be04b6ad89290c765Tom Hudson 512880df2609eba09b555ca37be04b6ad89290c765Tom Hudson const SkPoint* points() const { 522880df2609eba09b555ca37be04b6ad89290c765Tom Hudson return fPoints; 532880df2609eba09b555ca37be04b6ad89290c765Tom Hudson } 542880df2609eba09b555ca37be04b6ad89290c765Tom Hudson 552880df2609eba09b555ca37be04b6ad89290c765Tom Hudson const SkPoint& point(int i) const { 562880df2609eba09b555ca37be04b6ad89290c765Tom Hudson SkASSERT(i < kNumPoints); 572880df2609eba09b555ca37be04b6ad89290c765Tom Hudson return fPoints[i]; 582880df2609eba09b555ca37be04b6ad89290c765Tom Hudson } 592880df2609eba09b555ca37be04b6ad89290c765Tom Hudson 602880df2609eba09b555ca37be04b6ad89290c765Tom Hudsonprivate: 612880df2609eba09b555ca37be04b6ad89290c765Tom Hudson static const int kNumPoints = 4; 622880df2609eba09b555ca37be04b6ad89290c765Tom Hudson SkPoint fPoints[kNumPoints]; 632880df2609eba09b555ca37be04b6ad89290c765Tom Hudson}; 642880df2609eba09b555ca37be04b6ad89290c765Tom Hudson 652880df2609eba09b555ca37be04b6ad89290c765Tom Hudson#endif 66