OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2006 The Android Open Source Project | 2 * Copyright 2006 The Android Open Source Project |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 #include "SkEmbossMaskFilter.h" | 8 #include "SkEmbossMaskFilter.h" |
9 #include "SkBlurMaskFilter.h" | 9 #include "SkBlurMaskFilter.h" |
10 #include "SkBlurMask.h" | 10 #include "SkBlurMask.h" |
11 #include "SkEmbossMask.h" | 11 #include "SkEmbossMask.h" |
12 #include "SkReadBuffer.h" | 12 #include "SkReadBuffer.h" |
13 #include "SkWriteBuffer.h" | 13 #include "SkWriteBuffer.h" |
14 #include "SkString.h" | 14 #include "SkString.h" |
15 | 15 |
16 SkMaskFilter* SkEmbossMaskFilter::Create(SkScalar blurSigma, const Light& light)
{ | 16 sk_sp<SkMaskFilter> SkEmbossMaskFilter::Make(SkScalar blurSigma, const Light& li
ght) { |
17 return new SkEmbossMaskFilter(blurSigma, light); | 17 return sk_sp<SkMaskFilter>(new SkEmbossMaskFilter(blurSigma, light)); |
18 } | 18 } |
19 | 19 |
| 20 #ifdef SK_SUPPORT_LEGACY_MASKFILTER_PTR |
20 SkMaskFilter* SkBlurMaskFilter::CreateEmboss(const SkScalar direction[3], | 21 SkMaskFilter* SkBlurMaskFilter::CreateEmboss(const SkScalar direction[3], |
21 SkScalar ambient, SkScalar specular
, | 22 SkScalar ambient, SkScalar specular
, |
22 SkScalar blurRadius) { | 23 SkScalar blurRadius) { |
23 return SkBlurMaskFilter::CreateEmboss(SkBlurMask::ConvertRadiusToSigma(blurR
adius), | 24 return SkBlurMaskFilter::CreateEmboss(SkBlurMask::ConvertRadiusToSigma(blurR
adius), |
24 direction, ambient, specular); | 25 direction, ambient, specular); |
25 } | 26 } |
| 27 #endif |
26 | 28 |
27 SkMaskFilter* SkBlurMaskFilter::CreateEmboss(SkScalar blurSigma, const SkScalar
direction[3], | 29 sk_sp<SkMaskFilter> SkBlurMaskFilter::MakeEmboss(SkScalar blurSigma, const SkSca
lar direction[3], |
28 SkScalar ambient, SkScalar specular
) { | 30 SkScalar ambient, SkScalar spec
ular) { |
29 if (direction == nullptr) { | 31 if (direction == nullptr) { |
30 return nullptr; | 32 return nullptr; |
31 } | 33 } |
32 | 34 |
33 SkEmbossMaskFilter::Light light; | 35 SkEmbossMaskFilter::Light light; |
34 | 36 |
35 memcpy(light.fDirection, direction, sizeof(light.fDirection)); | 37 memcpy(light.fDirection, direction, sizeof(light.fDirection)); |
36 // ambient should be 0...1 as a scalar | 38 // ambient should be 0...1 as a scalar |
37 light.fAmbient = SkUnitScalarClampToByte(ambient); | 39 light.fAmbient = SkUnitScalarClampToByte(ambient); |
38 // specular should be 0..15.99 as a scalar | 40 // specular should be 0..15.99 as a scalar |
39 static const SkScalar kSpecularMultiplier = SkIntToScalar(255) / 16; | 41 static const SkScalar kSpecularMultiplier = SkIntToScalar(255) / 16; |
40 light.fSpecular = static_cast<U8CPU>(SkScalarPin(specular, 0, 16) * kSpecula
rMultiplier + 0.5); | 42 light.fSpecular = static_cast<U8CPU>(SkScalarPin(specular, 0, 16) * kSpecula
rMultiplier + 0.5); |
41 | 43 |
42 return SkEmbossMaskFilter::Create(blurSigma, light); | 44 return SkEmbossMaskFilter::Make(blurSigma, light); |
43 } | 45 } |
44 | 46 |
45 /////////////////////////////////////////////////////////////////////////////// | 47 /////////////////////////////////////////////////////////////////////////////// |
46 | 48 |
47 static void normalize(SkScalar v[3]) { | 49 static void normalize(SkScalar v[3]) { |
48 SkScalar mag = SkScalarSquare(v[0]) + SkScalarSquare(v[1]) + SkScalarSquare(
v[2]); | 50 SkScalar mag = SkScalarSquare(v[0]) + SkScalarSquare(v[1]) + SkScalarSquare(
v[2]); |
49 mag = SkScalarSqrt(mag); | 51 mag = SkScalarSqrt(mag); |
50 | 52 |
51 for (int i = 0; i < 3; i++) { | 53 for (int i = 0; i < 3; i++) { |
52 v[i] /= mag; | 54 v[i] /= mag; |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
110 memcpy(dst->fImage, src.fImage, src.computeImageSize()); | 112 memcpy(dst->fImage, src.fImage, src.computeImageSize()); |
111 | 113 |
112 return true; | 114 return true; |
113 } | 115 } |
114 | 116 |
115 sk_sp<SkFlattenable> SkEmbossMaskFilter::CreateProc(SkReadBuffer& buffer) { | 117 sk_sp<SkFlattenable> SkEmbossMaskFilter::CreateProc(SkReadBuffer& buffer) { |
116 Light light; | 118 Light light; |
117 if (buffer.readByteArray(&light, sizeof(Light))) { | 119 if (buffer.readByteArray(&light, sizeof(Light))) { |
118 light.fPad = 0; // for the font-cache lookup to be clean | 120 light.fPad = 0; // for the font-cache lookup to be clean |
119 const SkScalar sigma = buffer.readScalar(); | 121 const SkScalar sigma = buffer.readScalar(); |
120 return sk_sp<SkFlattenable>(Create(sigma, light)); | 122 return Make(sigma, light); |
121 } | 123 } |
122 return nullptr; | 124 return nullptr; |
123 } | 125 } |
124 | 126 |
125 void SkEmbossMaskFilter::flatten(SkWriteBuffer& buffer) const { | 127 void SkEmbossMaskFilter::flatten(SkWriteBuffer& buffer) const { |
126 Light tmpLight = fLight; | 128 Light tmpLight = fLight; |
127 tmpLight.fPad = 0; // for the font-cache lookup to be clean | 129 tmpLight.fPad = 0; // for the font-cache lookup to be clean |
128 buffer.writeByteArray(&tmpLight, sizeof(tmpLight)); | 130 buffer.writeByteArray(&tmpLight, sizeof(tmpLight)); |
129 buffer.writeScalar(fBlurSigma); | 131 buffer.writeScalar(fBlurSigma); |
130 } | 132 } |
(...skipping 11 matching lines...) Expand all Loading... |
142 str->append(") "); | 144 str->append(") "); |
143 | 145 |
144 str->appendf("ambient: %d specular: %d ", | 146 str->appendf("ambient: %d specular: %d ", |
145 fLight.fAmbient, fLight.fSpecular); | 147 fLight.fAmbient, fLight.fSpecular); |
146 | 148 |
147 str->append("blurSigma: "); | 149 str->append("blurSigma: "); |
148 str->appendScalar(fBlurSigma); | 150 str->appendScalar(fBlurSigma); |
149 str->append(")"); | 151 str->append(")"); |
150 } | 152 } |
151 #endif | 153 #endif |
OLD | NEW |