Chromium Code Reviews| 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.type() == SkValue::Bytes | |
|
mtklein
2016/01/21 21:21:30
Guess we'd better put isData() out in public for n
hal.canary
2016/01/21 22:03:23
done
| |
| 48 || val.type() == SkValue::U16s | |
| 49 || val.type() == SkValue::U32s | |
| 50 || val.type() == SkValue::F32s); | |
| 51 *dst = val.bytes(); // no ref taken | |
| 52 return true; | |
| 53 } | |
| 54 | |
| 44 //////////////////////////////////////////////////////////////////////////////// | 55 //////////////////////////////////////////////////////////////////////////////// |
| 45 | 56 |
| 46 template<> SkValue SkToValue<SkMatrix>(const SkMatrix& mat) { | 57 template<> SkValue SkToValue<SkMatrix>(const SkMatrix& mat) { |
| 47 auto val = SkValue::Object(SkValue::Matrix); | 58 auto val = SkValue::Object(SkValue::Matrix); |
| 48 for (int i = 0; i < 9; ++i) { | 59 for (int i = 0; i < 9; ++i) { |
| 49 if (mat[i] != SkMatrix::I()[i]) { | 60 if (mat[i] != SkMatrix::I()[i]) { |
| 50 val.set(i, SkValue::FromF32(mat[i])); | 61 val.set(i, SkValue::FromF32(mat[i])); |
| 51 } | 62 } |
| 52 } | 63 } |
| 53 return val; | 64 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); | 131 case SkValue::ArithmeticXfermode: return from_value_ArithmeticXfermode(v al, dst); |
| 121 case SkValue::LerpXfermode: return from_value_LerpXfermode(val, ds t); | 132 case SkValue::LerpXfermode: return from_value_LerpXfermode(val, ds t); |
| 122 case SkValue::PixelXorXfermode: return from_value_PixelXorXfermode(val , dst); | 133 case SkValue::PixelXorXfermode: return from_value_PixelXorXfermode(val , dst); |
| 123 case SkValue::ProcCoeffXfermode: return from_value_ProcCoeffXfermode(va l, dst); | 134 case SkValue::ProcCoeffXfermode: return from_value_ProcCoeffXfermode(va l, dst); |
| 124 default: REQUIRE(false); | 135 default: REQUIRE(false); |
| 125 } | 136 } |
| 126 } | 137 } |
| 127 | 138 |
| 128 //////////////////////////////////////////////////////////////////////////////// | 139 //////////////////////////////////////////////////////////////////////////////// |
| 129 | 140 |
| 141 enum { kEncoded, kUniqueID }; // SkValue::Image | |
|
mtklein
2016/01/21 21:21:29
?
hal.canary
2016/01/21 22:03:23
moved.
| |
| 142 | |
| 143 template<> SkValue SkToValue<SkImage>(const SkImage* image) { | |
| 144 SkAutoTUnref<SkData> encoded(image->encode()); | |
|
mtklein
2016/01/22 14:09:18
you know, this is probably the most controversial
| |
| 145 if (!encoded || 0 == encoded->size()) { | |
|
mtklein
2016/01/21 21:21:30
why 0 == encoded->size()?
hal.canary
2016/01/21 22:03:23
removed.
| |
| 146 return SkValue(); | |
| 147 } | |
| 148 auto val = SkValue::Object(SkValue::Image); | |
| 149 val.set(kEncoded, SkValue::FromBytes(encoded)); | |
| 150 val.set(kUniqueID, SkValue::FromU32(image->uniqueID())); | |
|
mtklein
2016/01/21 21:21:30
This seems like a bad idea, especially if we ignor
hal.canary
2016/01/21 22:03:23
a serializer can use them to de-dup images. Or an
mtklein
2016/01/22 14:09:18
this unique ID is not part of the value of the ima
| |
| 151 return val; | |
| 152 } | |
| 153 | |
| 154 template<> bool SkFromValue< SkAutoTUnref<SkImage> >( | |
|
mtklein
2016/01/21 21:21:30
template<> bool SkFromValue<SkAutoTUnref<SkImage>>
hal.canary
2016/01/21 22:03:23
yes but my *editor* doesn't know about how C++11 a
mtklein
2016/01/22 14:09:18
are you seriously proposing that we write code str
| |
| 155 const SkValue& val, SkAutoTUnref<SkImage>* dst) { | |
| 156 REQUIRE(val.type() == SkValue::Image); | |
| 157 SkData* encoded; | |
| 158 REQUIRE(getT(val, kEncoded, &encoded)); | |
| 159 dst->reset(SkImage::NewFromEncoded(encoded)); | |
| 160 return true; | |
| 161 } | |
| 162 | |
| 163 //////////////////////////////////////////////////////////////////////////////// | |
| 164 | |
| 130 #undef REQUIRE | 165 #undef REQUIRE |
| 131 | 166 |
| OLD | NEW |