11cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
20910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project/*
31cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Copyright 2006 The Android Open Source Project
40910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project *
51cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Use of this source code is governed by a BSD-style license that can be
61cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * found in the LICENSE file.
70910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project */
80910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
91cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifndef SkPerspIter_DEFINED
110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#define SkPerspIter_DEFINED
120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkMatrix.h"
140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectclass SkPerspIter {
160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectpublic:
170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    /** Iterate a line through the matrix [x,y] ... [x+count-1, y].
180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        @param m    The matrix we will be iterating a line through
190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        @param x    The initial X coordinate to be mapped through the matrix
200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        @param y    The initial Y coordinate to be mapped through the matrix
210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        @param count The number of points (x,y) (x+1,y) (x+2,y) ... we will eventually map
220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    */
230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkPerspIter(const SkMatrix& m, SkScalar x, SkScalar y, int count);
240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    /** Return the buffer of [x,y] fixed point values we will be filling.
260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        This always returns the same value, so it can be saved across calls to
270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        next().
280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    */
290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    const SkFixed* getXY() const { return fStorage; }
300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    /** Return the number of [x,y] pairs that have been filled in the getXY() buffer.
320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        When this returns 0, the iterator is finished.
330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    */
340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    int next();
350910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectprivate:
370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    enum {
380910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        kShift  = 4,
390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        kCount  = (1 << kShift)
400910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    };
410910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    const SkMatrix& fMatrix;
420910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkFixed         fStorage[kCount * 2];
430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkFixed         fX, fY;
440910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkScalar        fSX, fSY;
450910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    int             fCount;
460910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project};
470910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
480910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif
49