1f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger
2f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger/*
3f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger * Copyright 2006 The Android Open Source Project
4f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger *
5f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger * Use of this source code is governed by a BSD-style license that can be
6f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger * found in the LICENSE file.
7f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger */
8f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger
9f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger
10f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#ifndef SkPerspIter_DEFINED
11f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#define SkPerspIter_DEFINED
12f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger
13f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#include "SkMatrix.h"
14f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger
15f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenbergerclass SkPerspIter {
16f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenbergerpublic:
17f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger    /** Iterate a line through the matrix [x,y] ... [x+count-1, y].
18f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger        @param m    The matrix we will be iterating a line through
19f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger        @param x    The initial X coordinate to be mapped through the matrix
20f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger        @param y    The initial Y coordinate to be mapped through the matrix
21f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger        @param count The number of points (x,y) (x+1,y) (x+2,y) ... we will eventually map
22f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger    */
23f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger    SkPerspIter(const SkMatrix& m, SkScalar x, SkScalar y, int count);
24f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger
25f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger    /** Return the buffer of [x,y] fixed point values we will be filling.
26f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger        This always returns the same value, so it can be saved across calls to
27f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger        next().
28f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger    */
29f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger    const SkFixed* getXY() const { return fStorage; }
30f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger
31f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger    /** Return the number of [x,y] pairs that have been filled in the getXY() buffer.
32f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger        When this returns 0, the iterator is finished.
33f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger    */
34f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger    int next();
35f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger
36f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenbergerprivate:
37f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger    enum {
38f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger        kShift  = 4,
39f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger        kCount  = (1 << kShift)
40f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger    };
41f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger    const SkMatrix& fMatrix;
42f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger    SkFixed         fStorage[kCount * 2];
43f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger    SkFixed         fX, fY;
44f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger    SkScalar        fSX, fSY;
45f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger    int             fCount;
46f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger};
47f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger
48f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#endif
49