Index: src/effects/SkBlurDrawLooper.cpp |
diff --git a/src/effects/SkBlurDrawLooper.cpp b/src/effects/SkBlurDrawLooper.cpp |
index 3a5c6973715704d837222ef77fb1a1670a9e91a9..8f3e00861cdb0acedde14f73ae253d5f7cf4563b 100644 |
--- a/src/effects/SkBlurDrawLooper.cpp |
+++ b/src/effects/SkBlurDrawLooper.cpp |
@@ -16,6 +16,7 @@ |
#include "SkPaint.h" |
#include "SkString.h" |
#include "SkStringUtils.h" |
+#include "SkTemplatesPriv.h" |
SkBlurDrawLooper::SkBlurDrawLooper(SkScalar radius, SkScalar dx, SkScalar dy, |
SkColor color, uint32_t flags) { |
@@ -33,7 +34,6 @@ void SkBlurDrawLooper::init(SkScalar sigma, SkScalar dx, SkScalar dy, |
fDy = dy; |
fBlurColor = color; |
fBlurFlags = flags; |
- fState = kDone; |
SkASSERT(flags <= kAll_BlurFlag); |
if (sigma > 0) { |
@@ -90,11 +90,20 @@ void SkBlurDrawLooper::flatten(SkWriteBuffer& buffer) const { |
buffer.writeUInt(fBlurFlags); |
} |
-void SkBlurDrawLooper::init(SkCanvas*) { |
- fState = kBeforeEdge; |
+SkDrawLooper::DrawContext* SkBlurDrawLooper::init(SkCanvas*, void* storage, |
+ size_t storageSize) const { |
+ BlurDrawLooperContext* context; |
+ SK_PLACEMENT_NEW_ARGS(context, BlurDrawLooperContext, storage, |
+ storageSize, (this)); |
Dominik Grewe
2014/02/07 11:57:15
This actually doesn't check if storageSize is larg
|
+ return context; |
} |
-bool SkBlurDrawLooper::next(SkCanvas* canvas, SkPaint* paint) { |
+SkBlurDrawLooper::BlurDrawLooperContext::BlurDrawLooperContext( |
+ const SkBlurDrawLooper* looper) |
+ : fLooper(looper), fState(SkBlurDrawLooper::kBeforeEdge) {} |
+ |
+bool SkBlurDrawLooper::BlurDrawLooperContext::next(SkCanvas* canvas, |
+ SkPaint* paint) { |
switch (fState) { |
case kBeforeEdge: |
// we do nothing if a maskfilter is already installed |
@@ -104,23 +113,23 @@ bool SkBlurDrawLooper::next(SkCanvas* canvas, SkPaint* paint) { |
} |
#ifdef SK_BUILD_FOR_ANDROID |
SkColor blurColor; |
- blurColor = fBlurColor; |
+ blurColor = fLooper->fBlurColor; |
if (SkColorGetA(blurColor) == 255) { |
blurColor = SkColorSetA(blurColor, paint->getAlpha()); |
} |
paint->setColor(blurColor); |
#else |
- paint->setColor(fBlurColor); |
+ paint->setColor(fLooper->fBlurColor); |
#endif |
- paint->setMaskFilter(fBlur); |
- paint->setColorFilter(fColorFilter); |
+ paint->setMaskFilter(fLooper->fBlur); |
+ paint->setColorFilter(fLooper->fColorFilter); |
canvas->save(SkCanvas::kMatrix_SaveFlag); |
- if (fBlurFlags & kIgnoreTransform_BlurFlag) { |
+ if (fLooper->fBlurFlags & kIgnoreTransform_BlurFlag) { |
SkMatrix transform(canvas->getTotalMatrix()); |
- transform.postTranslate(fDx, fDy); |
+ transform.postTranslate(fLooper->fDx, fLooper->fDy); |
canvas->setMatrix(transform); |
} else { |
- canvas->translate(fDx, fDy); |
+ canvas->translate(fLooper->fDx, fLooper->fDy); |
} |
fState = kAfterEdge; |
return true; |