| |
| /* |
| * Copyright 2006 The Android Open Source Project |
| * |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| |
| #ifndef SkPerspIter_DEFINED |
| #define SkPerspIter_DEFINED |
| |
| #include "SkMatrix.h" |
| |
| class SkPerspIter { |
| public: |
| /** Iterate a line through the matrix [x,y] ... [x+count-1, y]. |
| @param m The matrix we will be iterating a line through |
| @param x The initial X coordinate to be mapped through the matrix |
| @param y The initial Y coordinate to be mapped through the matrix |
| @param count The number of points (x,y) (x+1,y) (x+2,y) ... we will eventually map |
| */ |
| SkPerspIter(const SkMatrix& m, SkScalar x, SkScalar y, int count); |
| |
| /** Return the buffer of [x,y] fixed point values we will be filling. |
| This always returns the same value, so it can be saved across calls to |
| next(). |
| */ |
| const SkFixed* getXY() const { return fStorage; } |
| |
| /** Return the number of [x,y] pairs that have been filled in the getXY() buffer. |
| When this returns 0, the iterator is finished. |
| */ |
| int next(); |
| |
| private: |
| enum { |
| kShift = 4, |
| kCount = (1 << kShift) |
| }; |
| const SkMatrix& fMatrix; |
| SkFixed fStorage[kCount * 2]; |
| SkFixed fX, fY; |
| SkScalar fSX, fSY; |
| int fCount; |
| }; |
| |
| #endif |