OLD | NEW |
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2012 Google Inc. | 3 * Copyright 2012 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 | 8 |
9 #include "SkPictureStateTree.h" | 9 #include "SkPictureStateTree.h" |
10 #include "SkCanvas.h" | 10 #include "SkCanvas.h" |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
107 } | 107 } |
108 | 108 |
109 // The matrix is in recording space, but we also inherit | 109 // The matrix is in recording space, but we also inherit |
110 // a playback matrix from out target canvas. | 110 // a playback matrix from out target canvas. |
111 SkMatrix m = *matrix; | 111 SkMatrix m = *matrix; |
112 m.postConcat(fPlaybackMatrix); | 112 m.postConcat(fPlaybackMatrix); |
113 fCanvas->setMatrix(m); | 113 fCanvas->setMatrix(m); |
114 fCurrentMatrix = matrix; | 114 fCurrentMatrix = matrix; |
115 } | 115 } |
116 | 116 |
117 uint32_t SkPictureStateTree::Iterator::peekDraw() { | |
118 SkASSERT(this->isValid()); | |
119 if (fPlaybackIndex >= fDraws->count()) { | |
120 return kDrawComplete; | |
121 } | |
122 | |
123 Draw* draw = static_cast<Draw*>((*fDraws)[fPlaybackIndex]); | |
124 return draw->fOffset; | |
125 } | |
126 | |
127 uint32_t SkPictureStateTree::Iterator::skipDraw() { | |
128 SkASSERT(this->isValid()); | |
129 if (fPlaybackIndex >= fDraws->count()) { | |
130 return this->finish(); | |
131 } | |
132 | |
133 Draw* draw = static_cast<Draw*>((*fDraws)[fPlaybackIndex]); | |
134 | |
135 if (fSave) { | |
136 fCanvas->save(); | |
137 fSave = false; | |
138 } | |
139 | |
140 fNodes.rewind(); | |
141 | |
142 ++fPlaybackIndex; | |
143 return draw->fOffset; | |
144 } | |
145 | |
146 uint32_t SkPictureStateTree::Iterator::finish() { | 117 uint32_t SkPictureStateTree::Iterator::finish() { |
147 if (fCurrentNode->fFlags & Node::kSaveLayer_Flag) { | 118 if (fCurrentNode->fFlags & Node::kSaveLayer_Flag) { |
148 fCanvas->restore(); | 119 fCanvas->restore(); |
149 } | 120 } |
150 | 121 |
151 for (fCurrentNode = fCurrentNode->fParent; fCurrentNode; | 122 for (fCurrentNode = fCurrentNode->fParent; fCurrentNode; |
152 fCurrentNode = fCurrentNode->fParent) { | 123 fCurrentNode = fCurrentNode->fParent) { |
153 // Note: we call restore() twice when both flags are set. | 124 // Note: we call restore() twice when both flags are set. |
154 if (fCurrentNode->fFlags & Node::kSave_Flag) { | 125 if (fCurrentNode->fFlags & Node::kSave_Flag) { |
155 fCanvas->restore(); | 126 fCanvas->restore(); |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
236 } | 207 } |
237 } | 208 } |
238 | 209 |
239 // If we got this far, the clip/saveLayer state is all set, so we can procee
d to set the matrix | 210 // If we got this far, the clip/saveLayer state is all set, so we can procee
d to set the matrix |
240 // for the draw, and return its offset. | 211 // for the draw, and return its offset. |
241 this->setCurrentMatrix(draw->fMatrix); | 212 this->setCurrentMatrix(draw->fMatrix); |
242 | 213 |
243 ++fPlaybackIndex; | 214 ++fPlaybackIndex; |
244 return draw->fOffset; | 215 return draw->fOffset; |
245 } | 216 } |
OLD | NEW |