• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 
2 /*
3  * Copyright 2010 Google Inc.
4  *
5  * Use of this source code is governed by a BSD-style license that can be
6  * found in the LICENSE file.
7  */
8 
9 
10 
11 #ifndef GrClipIterator_DEFINED
12 #define GrClipIterator_DEFINED
13 
14 #include "GrPath.h"
15 #include "GrRect.h"
16 
17 /**
18  * A clip is a list of paths and/or rects with set operations to combine them.
19  */
20 class GrClipIterator {
21 public:
~GrClipIterator()22     virtual ~GrClipIterator() {}
23 
24     /**
25      *  Returns true if there are no more rects to process
26      */
27     virtual bool isDone() const = 0;
28 
29     /**
30      *  Rewind the iterator to replay the set of clip elements again
31      */
32     virtual void rewind() = 0;
33 
34     /**
35      * Get the type of the current clip element
36      */
37     virtual GrClipType getType() const = 0;
38 
39     /**
40      * Return the current path. It is an error to call this when isDone() is
41      * true or when getType() is kRect_Type.
42      */
43     virtual const GrPath* getPath() = 0;
44 
45     /**
46      * Return the fill rule for the path. It is an error to call this when
47      * isDone() is true or when getType is kRect_Type.
48      */
49     virtual GrPathFill getPathFill() const = 0;
50 
51     /**
52     * Return the current rect. It is an error to call this when isDone is true
53     * or when getType() is kPath_Type.
54     */
55     virtual void getRect(GrRect* rect) const = 0;
56 
57     /**
58      * Gets the operation used to apply the current item to previously iterated
59      * items. Iterators should not produce a Replace op.
60      */
61     virtual GrSetOp getOp() const = 0;
62 
63     /**
64      *  Call to move to the next element in the list, previous path iter can be
65      *  made invalid.
66      */
67     virtual void next() = 0;
68 };
69 
70 /**
71  *  Call to rewind iter, first checking to see if iter is NULL
72  */
GrSafeRewind(GrClipIterator * iter)73 static inline void GrSafeRewind(GrClipIterator* iter) {
74     if (iter) {
75         iter->rewind();
76     }
77 }
78 
79 #endif
80 
81