Index: src/effects/SkEmbossMaskFilter.cpp |
=================================================================== |
--- src/effects/SkEmbossMaskFilter.cpp (revision 10522) |
+++ src/effects/SkEmbossMaskFilter.cpp (working copy) |
@@ -14,6 +14,10 @@ |
#include "SkFlattenableBuffers.h" |
#include "SkString.h" |
+#ifndef CLEAN_UP_WHEN_SKPS_ARE_CAPTURED_IN_V13 |
+#include "SkPicture.h" |
+#endif |
+ |
static inline int pin2byte(int n) { |
if (n < 0) { |
n = 0; |
@@ -26,6 +30,13 @@ |
SkMaskFilter* SkBlurMaskFilter::CreateEmboss(const SkScalar direction[3], |
SkScalar ambient, SkScalar specular, |
SkScalar blurRadius) { |
+ return SkBlurMaskFilter::CreateEmboss(direction, ambient, specular, |
+ SkBlurMask::ConvertRadiusToSigma(blurRadius), true); |
+} |
+ |
+SkMaskFilter* SkBlurMaskFilter::CreateEmboss(const SkScalar direction[3], |
+ SkScalar ambient, SkScalar specular, |
+ SkScalar blurSigma, bool unused) { |
if (direction == NULL) { |
return NULL; |
} |
@@ -42,7 +53,7 @@ |
light.fAmbient = SkToU8(am); |
light.fSpecular = SkToU8(sp); |
- return SkNEW_ARGS(SkEmbossMaskFilter, (light, blurRadius)); |
+ return SkNEW_ARGS(SkEmbossMaskFilter, (light, blurSigma, unused)); |
} |
/////////////////////////////////////////////////////////////////////////////// |
@@ -56,9 +67,16 @@ |
} |
} |
+SkEmbossMaskFilter::SkEmbossMaskFilter(const Light& light, SkScalar blurSigma, bool unused) |
+ : fLight(light), fBlurSigma(blurSigma) { |
+ normalize(fLight.fDirection); |
+} |
+ |
SkEmbossMaskFilter::SkEmbossMaskFilter(const Light& light, SkScalar blurRadius) |
- : fLight(light), fBlurRadius(blurRadius) { |
+ : fLight(light) { |
normalize(fLight.fDirection); |
+ |
+ fBlurSigma = SkBlurMask::ConvertRadiusToSigma(blurRadius); |
} |
SkMask::Format SkEmbossMaskFilter::getFormat() const { |
@@ -66,17 +84,17 @@ |
} |
bool SkEmbossMaskFilter::filterMask(SkMask* dst, const SkMask& src, |
- const SkMatrix& matrix, SkIPoint* margin) const { |
- SkScalar radius = matrix.mapRadius(fBlurRadius); |
+ const SkMatrix& matrix, SkIPoint* margin) const { |
+ SkScalar sigma = matrix.mapRadius(fBlurSigma); |
- if (!SkBlurMask::Blur(dst, src, radius, SkBlurMask::kInner_Style, |
- SkBlurMask::kLow_Quality)) { |
+ if (!SkBlurMask::BoxBlur(dst, src, sigma, SkBlurMask::kInner_Style, |
+ SkBlurMask::kLow_Quality, NULL, true)) { |
return false; |
} |
dst->fFormat = SkMask::k3D_Format; |
if (margin) { |
- margin->set(SkScalarCeil(radius), SkScalarCeil(radius)); |
+ margin->set(SkScalarCeil(3*sigma), SkScalarCeil(3*sigma)); |
} |
if (src.fImage == NULL) { |
@@ -121,7 +139,15 @@ |
SkASSERT(buffer.getArrayCount() == sizeof(Light)); |
buffer.readByteArray(&fLight); |
SkASSERT(fLight.fPad == 0); // for the font-cache lookup to be clean |
- fBlurRadius = buffer.readScalar(); |
+#ifndef CLEAN_UP_WHEN_SKPS_ARE_CAPTURED_IN_V13 |
+ if (SkPicture::PICTURE_VERSION < 13) { |
+ fBlurSigma = SkBlurMask::ConvertRadiusToSigma(buffer.readScalar()); |
+ } else { |
+#endif |
+ fBlurSigma = buffer.readScalar(); |
+#ifndef CLEAN_UP_WHEN_SKPS_ARE_CAPTURED_IN_V13 |
+ } |
+#endif |
} |
void SkEmbossMaskFilter::flatten(SkFlattenableWriteBuffer& buffer) const { |
@@ -130,7 +156,7 @@ |
Light tmpLight = fLight; |
tmpLight.fPad = 0; // for the font-cache lookup to be clean |
buffer.writeByteArray(&tmpLight, sizeof(tmpLight)); |
- buffer.writeScalar(fBlurRadius); |
+ buffer.writeScalar(fBlurSigma); |
} |
#ifdef SK_DEVELOPER |
@@ -148,8 +174,8 @@ |
str->appendf("ambient: %d specular: %d ", |
fLight.fAmbient, fLight.fSpecular); |
- str->append("blurRadius: "); |
- str->appendScalar(fBlurRadius); |
+ str->append("blurSigma: "); |
+ str->appendScalar(fBlurSigma); |
str->append(")"); |
} |
#endif |