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