@@ -45,10 +45,7 @@ class JsiSkColor : public RNJsi::JsiHostObject {
45
45
static SkColor fromValue (jsi::Runtime &runtime, const jsi::Value &obj) {
46
46
const auto &object = obj.asObject (runtime);
47
47
jsi::ArrayBuffer buffer =
48
- object
49
- .getProperty (runtime, jsi::PropNameID::forAscii (runtime, " buffer" ))
50
- .asObject (runtime)
51
- .getArrayBuffer (runtime);
48
+ object.getPropertyAsObject (runtime, " buffer" ).getArrayBuffer (runtime);
52
49
auto bfrPtr = reinterpret_cast <float *>(buffer.data (runtime));
53
50
if (bfrPtr[0 ] > 1 || bfrPtr[1 ] > 1 || bfrPtr[2 ] > 1 || bfrPtr[3 ] > 1 ) {
54
51
return SK_ColorBLACK;
@@ -77,9 +74,7 @@ class JsiSkColor : public RNJsi::JsiHostObject {
77
74
runtime, SkColorSetARGB (color.a * 255 , color.r , color.g , color.b ));
78
75
} else if (arguments[0 ].isObject ()) {
79
76
auto obj = arguments[0 ].getObject (runtime);
80
- if (obj.isArrayBuffer (runtime)) {
81
- return obj;
82
- } else if (obj.isArray (runtime)) {
77
+ if (obj.isArray (runtime)) {
83
78
auto array = obj.asArray (runtime);
84
79
double r = std::clamp (array.getValueAtIndex (runtime, 0 ).getNumber (),
85
80
0.0 , 255.0 );
@@ -90,9 +85,16 @@ class JsiSkColor : public RNJsi::JsiHostObject {
90
85
double a = std::clamp (array.getValueAtIndex (runtime, 3 ).getNumber (),
91
86
0.0 , 255.0 );
92
87
return JsiSkColor::toValue (runtime, SkColorSetARGB (a, r, g, b));
88
+ } else if (obj.hasProperty (runtime, " buffer" ) &&
89
+ obj.getPropertyAsObject (runtime, " buffer" )
90
+ .isArrayBuffer (runtime)) {
91
+ return obj;
93
92
}
94
93
}
95
- return jsi::Value::undefined ();
94
+ throw jsi::JSError (runtime,
95
+ " Skia.Color expected number, Float32Array, number[], "
96
+ " or string and got: " +
97
+ arguments[0 ].toString (runtime).utf8 (runtime));
96
98
};
97
99
}
98
100
};
0 commit comments