OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2013 Google Inc. | 2 * Copyright 2013 Google Inc. |
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 "SkLerpXfermode.h" | 8 #include "SkLerpXfermode.h" |
9 #include "SkColorPriv.h" | 9 #include "SkColorPriv.h" |
10 #include "SkFlattenableBuffers.h" | 10 #include "SkReadBuffer.h" |
| 11 #include "SkWriteBuffer.h" |
11 #include "SkString.h" | 12 #include "SkString.h" |
12 | 13 |
13 SkXfermode* SkLerpXfermode::Create(SkScalar scale) { | 14 SkXfermode* SkLerpXfermode::Create(SkScalar scale) { |
14 int scale256 = SkScalarRoundToInt(scale * 256); | 15 int scale256 = SkScalarRoundToInt(scale * 256); |
15 if (scale256 >= 256) { | 16 if (scale256 >= 256) { |
16 return SkXfermode::Create(SkXfermode::kSrc_Mode); | 17 return SkXfermode::Create(SkXfermode::kSrc_Mode); |
17 } else if (scale256 <= 0) { | 18 } else if (scale256 <= 0) { |
18 return SkXfermode::Create(SkXfermode::kDst_Mode); | 19 return SkXfermode::Create(SkXfermode::kDst_Mode); |
19 } | 20 } |
20 return SkNEW_ARGS(SkLerpXfermode, (scale256)); | 21 return SkNEW_ARGS(SkLerpXfermode, (scale256)); |
21 } | 22 } |
22 | 23 |
23 SkLerpXfermode::SkLerpXfermode(unsigned scale256) : fScale256(scale256) {} | 24 SkLerpXfermode::SkLerpXfermode(unsigned scale256) : fScale256(scale256) {} |
24 | 25 |
25 SkLerpXfermode::SkLerpXfermode(SkFlattenableReadBuffer& buffer) | 26 SkLerpXfermode::SkLerpXfermode(SkReadBuffer& buffer) |
26 : INHERITED(buffer) { | 27 : INHERITED(buffer) { |
27 fScale256 = buffer.readUInt(); | 28 fScale256 = buffer.readUInt(); |
28 } | 29 } |
29 | 30 |
30 void SkLerpXfermode::flatten(SkFlattenableWriteBuffer& buffer) const { | 31 void SkLerpXfermode::flatten(SkWriteBuffer& buffer) const { |
31 this->INHERITED::flatten(buffer); | 32 this->INHERITED::flatten(buffer); |
32 buffer.writeUInt(fScale256); | 33 buffer.writeUInt(fScale256); |
33 } | 34 } |
34 | 35 |
35 void SkLerpXfermode::xfer32(SkPMColor dst[], const SkPMColor src[], int count, | 36 void SkLerpXfermode::xfer32(SkPMColor dst[], const SkPMColor src[], int count, |
36 const SkAlpha aa[]) const { | 37 const SkAlpha aa[]) const { |
37 const int scale = fScale256; | 38 const int scale = fScale256; |
38 | 39 |
39 if (aa) { | 40 if (aa) { |
40 for (int i = 0; i < count; ++i) { | 41 for (int i = 0; i < count; ++i) { |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
101 dst[i] = SkAlphaBlend(SkGetPackedA32(src[i]), dst[i], scale); | 102 dst[i] = SkAlphaBlend(SkGetPackedA32(src[i]), dst[i], scale); |
102 } | 103 } |
103 } | 104 } |
104 } | 105 } |
105 | 106 |
106 #ifdef SK_DEVELOPER | 107 #ifdef SK_DEVELOPER |
107 void SkLerpXfermode::toString(SkString* str) const { | 108 void SkLerpXfermode::toString(SkString* str) const { |
108 str->printf("SkLerpXfermode: scale: %g", fScale256 / 256.0); | 109 str->printf("SkLerpXfermode: scale: %g", fScale256 / 256.0); |
109 } | 110 } |
110 #endif | 111 #endif |
OLD | NEW |