Chromium Code Reviews| 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; |