| Index: src/effects/SkEmbossMaskFilter.cpp
|
| ===================================================================
|
| --- src/effects/SkEmbossMaskFilter.cpp (revision 10932)
|
| +++ src/effects/SkEmbossMaskFilter.cpp (working copy)
|
| @@ -26,6 +26,12 @@
|
| SkMaskFilter* SkBlurMaskFilter::CreateEmboss(const SkScalar direction[3],
|
| SkScalar ambient, SkScalar specular,
|
| SkScalar blurRadius) {
|
| + return SkBlurMaskFilter::CreateEmboss(SkBlurMask::ConvertRadiusToSigma(blurRadius),
|
| + direction, ambient, specular);
|
| +}
|
| +
|
| +SkMaskFilter* SkBlurMaskFilter::CreateEmboss(SkScalar blurSigma, const SkScalar direction[3],
|
| + SkScalar ambient, SkScalar specular) {
|
| if (direction == NULL) {
|
| return NULL;
|
| }
|
| @@ -42,7 +48,7 @@
|
| light.fAmbient = SkToU8(am);
|
| light.fSpecular = SkToU8(sp);
|
|
|
| - return SkNEW_ARGS(SkEmbossMaskFilter, (light, blurRadius));
|
| + return SkNEW_ARGS(SkEmbossMaskFilter, (blurSigma, light));
|
| }
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
| @@ -56,9 +62,16 @@
|
| }
|
| }
|
|
|
| +SkEmbossMaskFilter::SkEmbossMaskFilter(SkScalar blurSigma, const Light& light)
|
| + : fBlurSigma(blurSigma), fLight(light) {
|
| + 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 +79,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)) {
|
| 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 +134,18 @@
|
| SkASSERT(buffer.getArrayCount() == sizeof(Light));
|
| buffer.readByteArray(&fLight);
|
| SkASSERT(fLight.fPad == 0); // for the font-cache lookup to be clean
|
| - fBlurRadius = buffer.readScalar();
|
| + fBlurSigma = buffer.readScalar();
|
| +#ifndef DELETE_THIS_CODE_WHEN_SKPS_ARE_REBUILT_AT_V13_AND_ALL_OTHER_INSTANCES_TOO
|
| + // Fixing this must be done in two stages. When the skps are recaptured in V13,
|
| + // remove the ConvertRadiusToSigma but retain the absolute value.
|
| + // At the same time, switch the code in flatten to write a positive value.
|
| + // When the skps are captured in V14 the absolute value can be removed.
|
| + if (fBlurSigma > 0) {
|
| + fBlurSigma = SkBlurMask::ConvertRadiusToSigma(fBlurSigma);
|
| + } else {
|
| + fBlurSigma = -fBlurSigma;
|
| + }
|
| +#endif
|
| }
|
|
|
| void SkEmbossMaskFilter::flatten(SkFlattenableWriteBuffer& buffer) const {
|
| @@ -130,7 +154,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 +172,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
|
|
|