OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2016 Google Inc. | 2 * Copyright 2016 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 "SkArithmeticMode.h" | 8 #include "SkArithmeticMode.h" |
| 9 #include "SkData.h" |
| 10 #include "SkImage.h" |
9 #include "SkLerpXfermode.h" | 11 #include "SkLerpXfermode.h" |
10 #include "SkMatrix.h" | 12 #include "SkMatrix.h" |
11 #include "SkPixelXorXfermode.h" | 13 #include "SkPixelXorXfermode.h" |
12 #include "SkToFromValue.h" | 14 #include "SkToFromValue.h" |
13 #include "SkValueKeys.h" | 15 #include "SkValueKeys.h" |
14 #include "SkXfermode.h" | 16 #include "SkXfermode.h" |
15 | 17 |
16 //////////////////////////////////////////////////////////////////////////////// | 18 //////////////////////////////////////////////////////////////////////////////// |
17 | 19 |
18 #define REQUIRE(cond) do { if (!(cond)) { SkASSERT(false); return false; } } whi
le (false) | 20 #define REQUIRE(cond) do { if (!(cond)) { SkASSERT(false); return false; } } whi
le (false) |
(...skipping 15 matching lines...) Expand all Loading... |
34 *x = val.s32(); | 36 *x = val.s32(); |
35 return true; | 37 return true; |
36 } | 38 } |
37 | 39 |
38 template<> bool SkFromValue<uint32_t>(const SkValue& val, uint32_t* x) { | 40 template<> bool SkFromValue<uint32_t>(const SkValue& val, uint32_t* x) { |
39 REQUIRE(val.type() == SkValue::U32); | 41 REQUIRE(val.type() == SkValue::U32); |
40 *x = val.u32(); | 42 *x = val.u32(); |
41 return true; | 43 return true; |
42 } | 44 } |
43 | 45 |
| 46 template<> bool SkFromValue<SkData*>(const SkValue& val, SkData** dst) { |
| 47 REQUIRE(val.isData()); |
| 48 *dst = val.bytes(); // no ref taken |
| 49 return true; |
| 50 } |
| 51 |
44 //////////////////////////////////////////////////////////////////////////////// | 52 //////////////////////////////////////////////////////////////////////////////// |
45 | 53 |
46 template<> SkValue SkToValue<SkMatrix>(const SkMatrix& mat) { | 54 template<> SkValue SkToValue<SkMatrix>(const SkMatrix& mat) { |
47 auto val = SkValue::Object(SkValue::Matrix); | 55 auto val = SkValue::Object(SkValue::Matrix); |
48 for (int i = 0; i < 9; ++i) { | 56 for (int i = 0; i < 9; ++i) { |
49 if (mat[i] != SkMatrix::I()[i]) { | 57 if (mat[i] != SkMatrix::I()[i]) { |
50 val.set(i, SkValue::FromF32(mat[i])); | 58 val.set(i, SkValue::FromF32(mat[i])); |
51 } | 59 } |
52 } | 60 } |
53 return val; | 61 return val; |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
120 case SkValue::ArithmeticXfermode: return from_value_ArithmeticXfermode(v
al, dst); | 128 case SkValue::ArithmeticXfermode: return from_value_ArithmeticXfermode(v
al, dst); |
121 case SkValue::LerpXfermode: return from_value_LerpXfermode(val, ds
t); | 129 case SkValue::LerpXfermode: return from_value_LerpXfermode(val, ds
t); |
122 case SkValue::PixelXorXfermode: return from_value_PixelXorXfermode(val
, dst); | 130 case SkValue::PixelXorXfermode: return from_value_PixelXorXfermode(val
, dst); |
123 case SkValue::ProcCoeffXfermode: return from_value_ProcCoeffXfermode(va
l, dst); | 131 case SkValue::ProcCoeffXfermode: return from_value_ProcCoeffXfermode(va
l, dst); |
124 default: REQUIRE(false); | 132 default: REQUIRE(false); |
125 } | 133 } |
126 } | 134 } |
127 | 135 |
128 //////////////////////////////////////////////////////////////////////////////// | 136 //////////////////////////////////////////////////////////////////////////////// |
129 | 137 |
| 138 template<> SkValue SkToValue<SkImage>(const SkImage* image) { |
| 139 SkAutoTUnref<SkData> encoded(image->encode()); |
| 140 if (!encoded) { |
| 141 return SkValue(); |
| 142 } |
| 143 using namespace SkValueKeys::Image; |
| 144 auto val = SkValue::Object(SkValue::Image); |
| 145 val.set(kEncoded, SkValue::FromBytes(encoded)); |
| 146 val.set(kUniqueID, SkValue::FromU32(image->uniqueID())); |
| 147 return val; |
| 148 } |
| 149 |
| 150 template<> bool SkFromValue< SkAutoTUnref<SkImage> >( |
| 151 const SkValue& val, SkAutoTUnref<SkImage>* dst) { |
| 152 REQUIRE(val.type() == SkValue::Image); |
| 153 SkData* encoded; |
| 154 REQUIRE(getT(val, SkValueKeys::Image::kEncoded, &encoded)); |
| 155 dst->reset(SkImage::NewFromEncoded(encoded)); |
| 156 return true; |
| 157 } |
| 158 |
| 159 //////////////////////////////////////////////////////////////////////////////// |
| 160 |
130 #undef REQUIRE | 161 #undef REQUIRE |
131 | 162 |
OLD | NEW |