Index: skia/effects/SkLayerDrawLooper.cpp |
=================================================================== |
--- skia/effects/SkLayerDrawLooper.cpp (revision 16859) |
+++ skia/effects/SkLayerDrawLooper.cpp (working copy) |
@@ -1,130 +0,0 @@ |
-#include "SkCanvas.h" |
-#include "SkLayerDrawLooper.h" |
-#include "SkPaint.h" |
- |
-SkLayerDrawLooper::SkLayerDrawLooper() { |
- fRecs = NULL; |
- fCount = 0; |
-} |
- |
-SkLayerDrawLooper::~SkLayerDrawLooper() { |
- Rec* rec = fRecs; |
- while (rec) { |
- Rec* next = rec->fNext; |
- SkDELETE(rec); |
- rec = next; |
- } |
-} |
- |
-SkPaint* SkLayerDrawLooper::addLayer(SkScalar dx, SkScalar dy) { |
- fCount += 1; |
- |
- Rec* rec = SkNEW(Rec); |
- rec->fNext = fRecs; |
- rec->fOffset.set(dx, dy); |
- fRecs = rec; |
- |
- return &rec->fPaint; |
-} |
- |
-void SkLayerDrawLooper::init(SkCanvas* canvas, SkPaint* paint) { |
- fIter.fSavedPaint = *paint; |
- fIter.fPaint = paint; |
- fIter.fCanvas = canvas; |
- fIter.fRec = fRecs; |
- canvas->save(SkCanvas::kMatrix_SaveFlag); |
-} |
- |
-bool SkLayerDrawLooper::next() { |
- Rec* rec = fIter.fRec; |
- if (rec) { |
- *fIter.fPaint = rec->fPaint; |
- fIter.fCanvas->restore(); |
- fIter.fCanvas->save(SkCanvas::kMatrix_SaveFlag); |
- fIter.fCanvas->translate(rec->fOffset.fX, rec->fOffset.fY); |
- |
- fIter.fRec = rec->fNext; |
- return true; |
- } |
- return false; |
-} |
- |
-void SkLayerDrawLooper::restore() { |
- fIter.fCanvas->restore(); |
- *fIter.fPaint = fIter.fSavedPaint; |
-} |
- |
-SkLayerDrawLooper::Rec* SkLayerDrawLooper::Rec::Reverse(Rec* head) { |
- Rec* rec = head; |
- Rec* prev = NULL; |
- while (rec) { |
- Rec* next = rec->fNext; |
- rec->fNext = prev; |
- prev = rec; |
- rec = next; |
- } |
- return prev; |
-} |
- |
-/////////////////////////////////////////////////////////////////////////////// |
- |
-void SkLayerDrawLooper::flatten(SkFlattenableWriteBuffer& buffer) { |
- this->INHERITED::flatten(buffer); |
- |
-#ifdef SK_DEBUG |
- { |
- Rec* rec = fRecs; |
- int count = 0; |
- while (rec) { |
- rec = rec->fNext; |
- count += 1; |
- } |
- SkASSERT(count == fCount); |
- } |
-#endif |
- |
- buffer.writeInt(fCount); |
- |
- Rec* rec = fRecs; |
- for (int i = 0; i < fCount; i++) { |
- buffer.writeScalar(rec->fOffset.fX); |
- buffer.writeScalar(rec->fOffset.fY); |
- rec->fPaint.flatten(buffer); |
- rec = rec->fNext; |
- } |
-} |
- |
-SkLayerDrawLooper::SkLayerDrawLooper(SkFlattenableReadBuffer& buffer) |
- : INHERITED(buffer) { |
- fRecs = NULL; |
- fCount = 0; |
- |
- int count = buffer.readInt(); |
- |
- for (int i = 0; i < count; i++) { |
- SkScalar dx = buffer.readScalar(); |
- SkScalar dy = buffer.readScalar(); |
- this->addLayer(dx, dy)->unflatten(buffer); |
- } |
- SkASSERT(count == fCount); |
- |
- // we're in reverse order, so fix it now |
- fRecs = Rec::Reverse(fRecs); |
- |
-#ifdef SK_DEBUG |
- { |
- Rec* rec = fRecs; |
- int n = 0; |
- while (rec) { |
- rec = rec->fNext; |
- n += 1; |
- } |
- SkASSERT(count == n); |
- } |
-#endif |
-} |
- |
-/////////////////////////////////////////////////////////////////////////////// |
- |
-static SkFlattenable::Registrar gReg("SkLayerDrawLooper", |
- SkLayerDrawLooper::CreateProc); |