/* * 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 "GrRect.h" #include "SkPath.h" #include "SkRegion.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 SkPath* 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 SkRegion::Op getOp() const = 0; /** * Gets anti-aliasing setting desired for the current clip */ virtual bool getDoAA() 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