diff options
author | Matt Sarett <msarett@google.com> | 2017-03-28 15:27:06 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-03-28 19:29:00 +0000 |
commit | 56ea77ac5f782d0165b2992b9575b4e3b9b15715 (patch) | |
tree | 57a6f6f05d505e9638136023422f19c92475e902 /src/effects/SkLayerDrawLooper.cpp | |
parent | 8cb66485e54feefe499cae182edd3ef70130dfb1 (diff) |
Implement SkBlurDrawLooper with SkLayerDrawLooper
This allows us to delete SkBlurDrawLooper (and leave only one draw
looper implementation).
BUG=skia:
Change-Id: I549af86b81babf19e3649bdffffe2fdb0b308d5a
Reviewed-on: https://skia-review.googlesource.com/10101
Commit-Queue: Matt Sarett <msarett@google.com>
Reviewed-by: Derek Sollenberger <djsollen@google.com>
Diffstat (limited to 'src/effects/SkLayerDrawLooper.cpp')
-rw-r--r-- | src/effects/SkLayerDrawLooper.cpp | 38 |
1 files changed, 36 insertions, 2 deletions
diff --git a/src/effects/SkLayerDrawLooper.cpp b/src/effects/SkLayerDrawLooper.cpp index 5c0cf6bf7b..a20638c005 100644 --- a/src/effects/SkLayerDrawLooper.cpp +++ b/src/effects/SkLayerDrawLooper.cpp @@ -5,6 +5,8 @@ * found in the LICENSE file. */ #include "SkArenaAlloc.h" +#include "SkBlurDrawLooper.h" +#include "SkBlurMaskFilter.h" #include "SkCanvas.h" #include "SkColor.h" #include "SkReadBuffer.h" @@ -61,8 +63,15 @@ static SkColor xferColor(SkColor src, SkColor dst, SkBlendMode mode) { // text/length parameters of a draw[Pos]Text call. void SkLayerDrawLooper::LayerDrawLooperContext::ApplyInfo( SkPaint* dst, const SkPaint& src, const LayerInfo& info) { - - dst->setColor(xferColor(src.getColor(), dst->getColor(), (SkBlendMode)info.fColorMode)); + SkColor srcColor = src.getColor(); +#ifdef SK_BUILD_FOR_ANDROID_FRAMEWORK + // The framework may respect the alpha value on the original paint. + // Match this legacy behavior. + if (SkColorGetA(srcColor) == 255) { + srcColor = SkColorSetA(srcColor, dst->getAlpha()); + } +#endif + dst->setColor(xferColor(srcColor, dst->getColor(), (SkBlendMode)info.fColorMode)); BitFlags bits = info.fPaintBits; SkPaint::TextEncoding encoding = dst->getTextEncoding(); @@ -356,3 +365,28 @@ sk_sp<SkDrawLooper> SkLayerDrawLooper::Builder::detach() { return sk_sp<SkDrawLooper>(looper); } + +sk_sp<SkDrawLooper> SkBlurDrawLooper::Make(SkColor color, SkScalar sigma, SkScalar dx, SkScalar dy) +{ + sk_sp<SkMaskFilter> blur = nullptr; + if (sigma > 0.0f) { + blur = SkBlurMaskFilter::Make(kNormal_SkBlurStyle, sigma, SkBlurMaskFilter::kNone_BlurFlag); + } + + SkLayerDrawLooper::Builder builder; + + // First layer + SkLayerDrawLooper::LayerInfo defaultLayer; + builder.addLayer(defaultLayer); + + // Blur layer + SkLayerDrawLooper::LayerInfo blurInfo; + blurInfo.fColorMode = SkBlendMode::kSrc; + blurInfo.fPaintBits = SkLayerDrawLooper::kMaskFilter_Bit; + blurInfo.fOffset = SkVector::Make(dx, dy); + SkPaint* paint = builder.addLayer(blurInfo); + paint->setMaskFilter(std::move(blur)); + paint->setColor(color); + + return builder.detach(); +} |