diff options
author | 2011-02-22 19:12:23 +0000 | |
---|---|---|
committer | 2011-02-22 19:12:23 +0000 | |
commit | 5c3d1471e4908706cd053a5e2ea9ded3a6c2eaeb (patch) | |
tree | 7a2307bee8ed086c1657101e22e5e0d1cf2e6e60 /include/core/SkClipStack.h | |
parent | 6034c506bd94ca01e4aeedfb522b06cb7900a367 (diff) |
add clipstack to canvas. not used yet, but will be for devices (e.g. gpu) that
want to see how the clip was built
git-svn-id: http://skia.googlecode.com/svn/trunk@824 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'include/core/SkClipStack.h')
-rw-r--r-- | include/core/SkClipStack.h | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/include/core/SkClipStack.h b/include/core/SkClipStack.h new file mode 100644 index 0000000000..bd64d66df8 --- /dev/null +++ b/include/core/SkClipStack.h @@ -0,0 +1,65 @@ +#ifndef SkClipStack_DEFINED +#define SkClipStack_DEFINED + +#include "SkDeque.h" +#include "SkRegion.h" + +class SkRect; +class SkPath; + +class SkClipStack { +public: + SkClipStack(); + ~SkClipStack() {} + + void reset(); + + int getSaveCount() const { return fSaveCount; } + void save(); + void restore(); + + void clipDevRect(const SkIRect& ir, + SkRegion::Op op = SkRegion::kIntersect_Op) { + SkRect r; + r.set(ir); + this->clipDevRect(r, op); + } + void clipDevRect(const SkRect&, SkRegion::Op = SkRegion::kIntersect_Op); + void clipDevPath(const SkPath&, SkRegion::Op = SkRegion::kIntersect_Op); + + class B2FIter { + public: + B2FIter(const SkClipStack& stack); + + struct Clip { + const SkRect* fRect; // if non-null, this is a rect clip + const SkPath* fPath; // if non-null, this is a path clip + SkRegion::Op fOp; + }; + + /** + * Return the clip for this element in the iterator. If next() returns + * NULL, then the iterator is done. The type of clip is determined by + * the pointers fRect and fPath: + * + * fRect==NULL fPath!=NULL path clip + * fRect!=NULL fPath==NULL rect clip + * fRect==NULL fPath==NULL empty clip + */ + const Clip* next(); + + private: + Clip fClip; + SkDeque::F2BIter fIter; + }; + +private: + friend class B2FIter; + struct Rec; + + SkDeque fDeque; + int fSaveCount; +}; + +#endif + |