gboolean _gdart_marshaller_check_argument_in_array_parameters( GdartBridgeContext *self, Dart_Handle dart_list, gpointer arg_type, const TypeInfoKlass *arg_type_klass, gint fixed_length, Dart_Handle *dart_error_out, GError **error) { Dart_Handle temp_result, element; gintptr list_length, elem_i = 0; gpointer param_type; const TypeInfoKlass* param_type_klass; GError* inner_error = NULL; if (!arg_type_klass->get_param_type(arg_type, self, 0, ¶m_type, ¶m_type_klass, dart_error_out, error)) return FALSE; temp_result = Dart_ListLength(dart_list, &list_length); if (Dart_IsError(temp_result)) { *dart_error_out = temp_result; g_set_error(error, GDART_ERROR, 1, "Error from Dart operation."); param_type_klass->free(param_type); return FALSE; } if (fixed_length != -1 && fixed_length != list_length) { *dart_error_out = gdart_bridge_context_create_error_handle(self, "%s: the array did not have a length, a fixed size or a null termination so I can't handle it", G_STRFUNC); g_set_error(error, GDART_ERROR, 1, "%s: the array did not have a length, a fixed size or a null termination so I can't handle it", G_STRFUNC); param_type_klass->free(param_type); return FALSE; } for (; elem_i < list_length; elem_i++) { element = Dart_ListGetAt(dart_list, elem_i); if (Dart_IsError(element)) { *dart_error_out = element; g_set_error(error, GDART_ERROR, 1, "Error from Dart operation."); param_type_klass->free(param_type); return FALSE; } if (!_gdart_marshaller_check_array_element(self, element, param_type, param_type_klass, dart_error_out, &inner_error)) { g_propagate_error(error, inner_error); param_type_klass->free(param_type); return FALSE; } } param_type_klass->free(param_type); return TRUE; }
Paint DartConverter<Paint>::FromDart(Dart_Handle dart_paint) { Paint result; result.is_null = true; if (Dart_IsNull(dart_paint)) return result; Dart_Handle value_handle = UIDartState::Current()->value_handle(); Dart_Handle data = Dart_GetField(dart_paint, value_handle); if (Dart_IsInteger(data)) { // This is a simple Paint object that just contains a color with // anti-aliasing enabled. The data is the color, represented as an // int in the same format as SkColor. result.sk_paint.setColor(DartConverter<SkColor>::FromDart(data)); result.sk_paint.setAntiAlias(true); result.is_null = false; return result; } DCHECK(Dart_IsList(data)); intptr_t length; Dart_ListLength(data, &length); CHECK_EQ(length, kNumberOfPaintFields); Dart_Handle values[kNumberOfPaintFields]; Dart_Handle range_result = Dart_ListGetRange(data, 0, kNumberOfPaintFields, values); if (Dart_IsError(range_result)) { return result; } SkPaint& paint = result.sk_paint; if (!Dart_IsNull(values[kStyle])) paint.setStyle(static_cast<SkPaint::Style>(DartConverter<int>::FromDart(values[kStyle]))); if (!Dart_IsNull(values[kStrokeWidth])) paint.setStrokeWidth(DartConverter<SkScalar>::FromDart(values[kStrokeWidth])); if (!Dart_IsNull(values[kStrokeCap])) paint.setStrokeCap(static_cast<SkPaint::Cap>(DartConverter<int>::FromDart(values[kStrokeCap]))); if (!Dart_IsNull(values[kIsAntiAlias])) paint.setAntiAlias(DartConverter<bool>::FromDart(values[kIsAntiAlias])); if (!Dart_IsNull(values[kColor])) paint.setColor(static_cast<SkColor>(DartConverter<int>::FromDart(values[kColor]))); if (!Dart_IsNull(values[kTransferMode])) paint.setXfermodeMode(static_cast<SkXfermode::Mode>(DartConverter<int>::FromDart(values[kTransferMode]))); if (!Dart_IsNull(values[kColorFilter])) paint.setColorFilter(DartConverter<ColorFilter*>::FromDart(values[kColorFilter])->filter()); if (!Dart_IsNull(values[kMaskFilter])) paint.setMaskFilter(DartConverter<MaskFilter*>::FromDart(values[kMaskFilter])->filter()); if (!Dart_IsNull(values[kFilterQuality])) paint.setFilterQuality(static_cast<SkFilterQuality>(DartConverter<int>::FromDart(values[kFilterQuality]))); if (!Dart_IsNull(values[kShader])) paint.setShader(DartConverter<Shader*>::FromDart(values[kShader])->shader()); result.is_null = false; return result; }