aboutsummaryrefslogtreecommitdiffhomepage
path: root/include/gpu/GrClipIterator.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/gpu/GrClipIterator.h')
-rw-r--r--include/gpu/GrClipIterator.h80
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
+