Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(158)

Unified Diff: src/effects/SkBlurDrawLooper.cpp

Issue 155513012: [WIP] Add Context to SkDrawLooper. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Add comments. Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/effects/SkBlurDrawLooper.cpp
diff --git a/src/effects/SkBlurDrawLooper.cpp b/src/effects/SkBlurDrawLooper.cpp
index 3a5c6973715704d837222ef77fb1a1670a9e91a9..4ee0187d0aa43e34fe0c45ed6721797e6a57446e 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_SAFE_NEW_ARGS(context, BlurDrawLooperContext, storage,
+ storageSize, (this));
+ 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;

Powered by Google App Engine
This is Rietveld 408576698