| 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
|
|
|