OLD | NEW |
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 #include "SkCanvas.h" | 8 #include "SkCanvas.h" |
9 #include "SkColor.h" | 9 #include "SkColor.h" |
10 #include "SkReadBuffer.h" | 10 #include "SkReadBuffer.h" |
(...skipping 18 matching lines...) Expand all Loading... |
29 | 29 |
30 SkLayerDrawLooper::~SkLayerDrawLooper() { | 30 SkLayerDrawLooper::~SkLayerDrawLooper() { |
31 Rec* rec = fRecs; | 31 Rec* rec = fRecs; |
32 while (rec) { | 32 while (rec) { |
33 Rec* next = rec->fNext; | 33 Rec* next = rec->fNext; |
34 SkDELETE(rec); | 34 SkDELETE(rec); |
35 rec = next; | 35 rec = next; |
36 } | 36 } |
37 } | 37 } |
38 | 38 |
39 SkPaint* SkLayerDrawLooper::addLayer(const LayerInfo& info) { | |
40 fCount += 1; | |
41 | |
42 Rec* rec = SkNEW(Rec); | |
43 rec->fNext = fRecs; | |
44 rec->fInfo = info; | |
45 fRecs = rec; | |
46 if (NULL == fTopRec) { | |
47 fTopRec = rec; | |
48 } | |
49 | |
50 return &rec->fPaint; | |
51 } | |
52 | |
53 void SkLayerDrawLooper::addLayer(SkScalar dx, SkScalar dy) { | |
54 LayerInfo info; | |
55 | |
56 info.fOffset.set(dx, dy); | |
57 (void)this->addLayer(info); | |
58 } | |
59 | |
60 SkPaint* SkLayerDrawLooper::addLayerOnTop(const LayerInfo& info) { | |
61 fCount += 1; | |
62 | |
63 Rec* rec = SkNEW(Rec); | |
64 rec->fNext = NULL; | |
65 rec->fInfo = info; | |
66 if (NULL == fRecs) { | |
67 fRecs = rec; | |
68 } else { | |
69 SkASSERT(NULL != fTopRec); | |
70 fTopRec->fNext = rec; | |
71 } | |
72 fTopRec = rec; | |
73 | |
74 return &rec->fPaint; | |
75 } | |
76 | |
77 SkLayerDrawLooper::Context* SkLayerDrawLooper::createContext(SkCanvas* canvas, v
oid* storage) const { | 39 SkLayerDrawLooper::Context* SkLayerDrawLooper::createContext(SkCanvas* canvas, v
oid* storage) const { |
78 canvas->save(SkCanvas::kMatrix_SaveFlag); | 40 canvas->save(SkCanvas::kMatrix_SaveFlag); |
79 return SkNEW_PLACEMENT_ARGS(storage, LayerDrawLooperContext, (this)); | 41 return SkNEW_PLACEMENT_ARGS(storage, LayerDrawLooperContext, (this)); |
80 } | 42 } |
81 | 43 |
82 static SkColor xferColor(SkColor src, SkColor dst, SkXfermode::Mode mode) { | 44 static SkColor xferColor(SkColor src, SkColor dst, SkXfermode::Mode mode) { |
83 switch (mode) { | 45 switch (mode) { |
84 case SkXfermode::kSrc_Mode: | 46 case SkXfermode::kSrc_Mode: |
85 return src; | 47 return src; |
86 case SkXfermode::kDst_Mode: | 48 case SkXfermode::kDst_Mode: |
(...skipping 285 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
372 SkLayerDrawLooper* looper = SkNEW(SkLayerDrawLooper); | 334 SkLayerDrawLooper* looper = SkNEW(SkLayerDrawLooper); |
373 looper->fCount = fCount; | 335 looper->fCount = fCount; |
374 looper->fRecs = fRecs; | 336 looper->fRecs = fRecs; |
375 | 337 |
376 fCount = 0; | 338 fCount = 0; |
377 fRecs = NULL; | 339 fRecs = NULL; |
378 fTopRec = NULL; | 340 fTopRec = NULL; |
379 | 341 |
380 return looper; | 342 return looper; |
381 } | 343 } |
OLD | NEW |