Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(769)

Side by Side Diff: include/core/SkClipStack.h

Issue 269693003: SkClipStack::Element tweaks. (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Rebased Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « include/core/SkCanvas.h ('k') | src/core/SkCanvas.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 1
2 /* 2 /*
3 * Copyright 2011 Google Inc. 3 * Copyright 2011 Google Inc.
4 * 4 *
5 * Use of this source code is governed by a BSD-style license that can be 5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file. 6 * found in the LICENSE file.
7 */ 7 */
8 #ifndef SkClipStack_DEFINED 8 #ifndef SkClipStack_DEFINED
9 #define SkClipStack_DEFINED 9 #define SkClipStack_DEFINED
10 10
11 #include "SkDeque.h" 11 #include "SkDeque.h"
12 #include "SkPath.h" 12 #include "SkPath.h"
13 #include "SkRect.h" 13 #include "SkRect.h"
14 #include "SkRRect.h" 14 #include "SkRRect.h"
15 #include "SkRegion.h" 15 #include "SkRegion.h"
16 #include "SkTDArray.h" 16 #include "SkTDArray.h"
17 #include "SkTLazy.h" 17 #include "SkTLazy.h"
18 18
19 class SkCanvasClipVisitor;
19 20
20 // Because a single save/restore state can have multiple clips, this class 21 // Because a single save/restore state can have multiple clips, this class
21 // stores the stack depth (fSaveCount) and clips (fDeque) separately. 22 // stores the stack depth (fSaveCount) and clips (fDeque) separately.
22 // Each clip in fDeque stores the stack state to which it belongs 23 // Each clip in fDeque stores the stack state to which it belongs
23 // (i.e., the fSaveCount in force when it was added). Restores are thus 24 // (i.e., the fSaveCount in force when it was added). Restores are thus
24 // implemented by removing clips from fDeque that have an fSaveCount larger 25 // implemented by removing clips from fDeque that have an fSaveCount larger
25 // then the freshly decremented count. 26 // then the freshly decremented count.
26 class SK_API SkClipStack { 27 class SK_API SkClipStack {
27 public: 28 public:
28 enum BoundsType { 29 enum BoundsType {
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
67 Element(const SkPath& path, SkRegion::Op op, bool doAA) { 68 Element(const SkPath& path, SkRegion::Op op, bool doAA) {
68 this->initPath(0, path, op, doAA); 69 this->initPath(0, path, op, doAA);
69 } 70 }
70 71
71 bool operator== (const Element& element) const; 72 bool operator== (const Element& element) const;
72 bool operator!= (const Element& element) const { return !(*this == eleme nt); } 73 bool operator!= (const Element& element) const { return !(*this == eleme nt); }
73 74
74 //!< Call to get the type of the clip element. 75 //!< Call to get the type of the clip element.
75 Type getType() const { return fType; } 76 Type getType() const { return fType; }
76 77
78 //!< Call to get the save count associated with this clip element.
79 int getSaveCount() const { return fSaveCount; }
80
77 //!< Call if getType() is kPath to get the path. 81 //!< Call if getType() is kPath to get the path.
78 const SkPath& getPath() const { SkASSERT(kPath_Type == fType); return *f Path.get(); } 82 const SkPath& getPath() const { SkASSERT(kPath_Type == fType); return *f Path.get(); }
79 83
80 //!< Call if getType() is kRRect to get the round-rect. 84 //!< Call if getType() is kRRect to get the round-rect.
81 const SkRRect& getRRect() const { SkASSERT(kRRect_Type == fType); return fRRect; } 85 const SkRRect& getRRect() const { SkASSERT(kRRect_Type == fType); return fRRect; }
82 86
83 //!< Call if getType() is kRect to get the rect. 87 //!< Call if getType() is kRect to get the rect.
84 const SkRect& getRect() const { 88 const SkRect& getRect() const {
85 SkASSERT(kRect_Type == fType && (fRRect.isRect() || fRRect.isEmpty() )); 89 SkASSERT(kRect_Type == fType && (fRRect.isRect() || fRRect.isEmpty() ));
86 return fRRect.getBounds(); 90 return fRRect.getBounds();
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
149 } 153 }
150 } 154 }
151 155
152 /** 156 /**
153 * Is the clip shape inverse filled. 157 * Is the clip shape inverse filled.
154 */ 158 */
155 bool isInverseFilled() const { 159 bool isInverseFilled() const {
156 return kPath_Type == fType && fPath.get()->isInverseFillType(); 160 return kPath_Type == fType && fPath.get()->isInverseFillType();
157 } 161 }
158 162
163 /**
164 * Replay this clip into the visitor.
165 */
166 void replay(SkCanvasClipVisitor*) const;
167
159 private: 168 private:
160 friend class SkClipStack; 169 friend class SkClipStack;
161 170
162 SkTLazy<SkPath> fPath; 171 SkTLazy<SkPath> fPath;
163 SkRRect fRRect; 172 SkRRect fRRect;
164 int fSaveCount; // save count of stack when this element was added. 173 int fSaveCount; // save count of stack when this element was added.
165 SkRegion::Op fOp; 174 SkRegion::Op fOp;
166 Type fType; 175 Type fType;
167 bool fDoAA; 176 bool fDoAA;
168 177
(...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after
442 */ 451 */
443 void restoreTo(int saveCount); 452 void restoreTo(int saveCount);
444 453
445 /** 454 /**
446 * Return the next unique generation ID. 455 * Return the next unique generation ID.
447 */ 456 */
448 static int32_t GetNextGenID(); 457 static int32_t GetNextGenID();
449 }; 458 };
450 459
451 #endif 460 #endif
OLDNEW
« no previous file with comments | « include/core/SkCanvas.h ('k') | src/core/SkCanvas.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698