diff options
Diffstat (limited to 'include/gpu/GrClipIterator.h')
-rw-r--r-- | include/gpu/GrClipIterator.h | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/include/gpu/GrClipIterator.h b/include/gpu/GrClipIterator.h new file mode 100644 index 0000000000..4a5cc7135f --- /dev/null +++ b/include/gpu/GrClipIterator.h @@ -0,0 +1,80 @@ + +/* + * Copyright 2010 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + + + +#ifndef GrClipIterator_DEFINED +#define GrClipIterator_DEFINED + +#include "GrPath.h" +#include "GrRect.h" + +/** + * A clip is a list of paths and/or rects with set operations to combine them. + */ +class GrClipIterator { +public: + virtual ~GrClipIterator() {} + + /** + * Returns true if there are no more rects to process + */ + virtual bool isDone() const = 0; + + /** + * Rewind the iterator to replay the set of clip elements again + */ + virtual void rewind() = 0; + + /** + * Get the type of the current clip element + */ + virtual GrClipType getType() const = 0; + + /** + * Return the current path. It is an error to call this when isDone() is + * true or when getType() is kRect_Type. + */ + virtual const GrPath* getPath() = 0; + + /** + * Return the fill rule for the path. It is an error to call this when + * isDone() is true or when getType is kRect_Type. + */ + virtual GrPathFill getPathFill() const = 0; + + /** + * Return the current rect. It is an error to call this when isDone is true + * or when getType() is kPath_Type. + */ + virtual void getRect(GrRect* rect) const = 0; + + /** + * Gets the operation used to apply the current item to previously iterated + * items. Iterators should not produce a Replace op. + */ + virtual GrSetOp getOp() const = 0; + + /** + * Call to move to the next element in the list, previous path iter can be + * made invalid. + */ + virtual void next() = 0; +}; + +/** + * Call to rewind iter, first checking to see if iter is NULL + */ +static inline void GrSafeRewind(GrClipIterator* iter) { + if (iter) { + iter->rewind(); + } +} + +#endif + |