// Convert dart_xform._value[0...3] ==> RSTransform RSTransform DartConverter<RSTransform>::FromDart(Dart_Handle dart_xform) { RSTransform result; result.is_null = true; if (Dart_IsNull(dart_xform)) return result; Dart_Handle value = Dart_GetField(dart_xform, DOMDartState::Current()->value_handle()); if (Dart_IsNull(value)) return result; Dart_TypedData_Type type; float* data = nullptr; intptr_t num_elements = 0; Dart_TypedDataAcquireData( value, &type, reinterpret_cast<void**>(&data), &num_elements); DCHECK(!LogIfError(value)); ASSERT(type == Dart_TypedData_kFloat32 && num_elements == 4); SkScalar* dest[] = { &result.sk_xform.fSCos, &result.sk_xform.fSSin, &result.sk_xform.fTx, &result.sk_xform.fTy }; for (intptr_t i = 0; i < 4; ++i) *dest[i] = data[i]; Dart_TypedDataReleaseData(value); result.is_null = false; return result; }
RSTransform DartConverter<RSTransform>::FromArgumentsWithNullCheck(Dart_NativeArguments args, int index, Dart_Handle& exception) { Dart_Handle dart_xform = Dart_GetNativeArgument(args, index); DCHECK(!LogIfError(dart_xform)); return FromDart(dart_xform); }
Paint DartConverter<Paint>::FromArguments(Dart_NativeArguments args, int index, Dart_Handle& exception) { Dart_Handle dart_rect = Dart_GetNativeArgument(args, index); DCHECK(!LogIfError(dart_rect)); return FromDart(dart_rect); }
// Construct an SkRRect from a Dart RRect object. // The Dart RRect has a _value field which is a Float32List containing // [left, top, right, bottom, xRad, yRad] RRect DartConverter<RRect>::FromDart(Dart_Handle dart_rrect) { RRect result; result.is_null = true; if (Dart_IsNull(dart_rrect)) return result; Dart_Handle value = Dart_GetField(dart_rrect, UIDartState::Current()->value_handle()); if (Dart_IsNull(value)) return result; Dart_TypedData_Type type; float* data = nullptr; intptr_t num_elements = 0; Dart_TypedDataAcquireData( value, &type, reinterpret_cast<void**>(&data), &num_elements); DCHECK(!LogIfError(value)); ASSERT(type == Dart_TypedData_kFloat32 && num_elements == 6); result.sk_rrect.setRectXY( SkRect::MakeLTRB(data[0], data[1], data[2], data[3]), data[4], data[5]); Dart_TypedDataReleaseData(value); result.is_null = false; return result; }
// Convert handle.x,y ==> SkSize. Offset DartConverter<Offset>::FromDart(Dart_Handle handle) { DCHECK(!LogIfError(handle)); Dart_Handle dx_value = Dart_GetField(handle, DOMDartState::Current()->dx_handle()); Dart_Handle dy_value = Dart_GetField(handle, DOMDartState::Current()->dy_handle()); double dx = 0.0, dy = 0.0; Dart_Handle err = Dart_DoubleValue(dx_value, &dx); DCHECK(!LogIfError(err)); err = Dart_DoubleValue(dy_value, &dy); DCHECK(!LogIfError(err)); Offset result; result.sk_size.set(dx, dy); result.is_null = false; return result; }
// Convert handle.x,y ==> SkPoint. Point DartConverter<Point>::FromDart(Dart_Handle handle) { Point result; result.is_null = true; DCHECK(!LogIfError(handle)); Dart_Handle x_value = Dart_GetField(handle, DOMDartState::Current()->x_handle()); Dart_Handle y_value = Dart_GetField(handle, DOMDartState::Current()->y_handle()); double x = 0.0, y = 0.0; Dart_Handle err = Dart_DoubleValue(x_value, &x); DCHECK(!LogIfError(err)); err = Dart_DoubleValue(y_value, &y); DCHECK(!LogIfError(err)); result.sk_point.set(x, y); result.is_null = false; return result; }
Dart_Handle DartConverter<TextBox>::ToDart(const TextBox& val) { if (val.is_null) return Dart_Null(); DartClassLibrary& class_library = DartState::Current()->class_library(); Dart_Handle type = Dart_HandleFromPersistent( class_library.GetClass("ui", "TextBox")); DCHECK(!LogIfError(type)); const int argc = 5; Dart_Handle argv[argc] = { blink::ToDart(val.sk_rect.fLeft), blink::ToDart(val.sk_rect.fTop), blink::ToDart(val.sk_rect.fRight), blink::ToDart(val.sk_rect.fBottom), blink::ToDart(static_cast<int>(val.direction)), }; return Dart_New(type, blink::ToDart("_"), argc, argv); }