Showing the changes to libraries/script-engine/src/ArrayBufferViewClass.cpp (1 of 14 files). Show all
Unified · Split
| @@ -11,7 +11,8 @@ · 10 unmodified lines | |||
| 11 | 11 | ||
| 12 | #include "ArrayBufferViewClass.h" | 12 | #include "ArrayBufferViewClass.h" |
| 13 | 13 | ||
| 14 | Q_DECLARE_METATYPE(QByteArray*) | 14 | int qScriptClassPointerMetaTypeId = qRegisterMetaType<QScriptClass*>(); |
| 15 | int qByteArrayMetaTypeId = qRegisterMetaType<QByteArray>(); | ||
| 15 | 16 | ||
| 16 | ArrayBufferViewClass::ArrayBufferViewClass(ScriptEngine* scriptEngine) : | 17 | ArrayBufferViewClass::ArrayBufferViewClass(ScriptEngine* scriptEngine) : |
| 17 | QObject(scriptEngine), | 18 | QObject(scriptEngine), |
| @@ -21,6 +22,7 @@ _scriptEngine(scriptEngine) { · 3 unmodified lines | |||
| 21 | _bufferName = engine()->toStringHandle(BUFFER_PROPERTY_NAME.toLatin1()); | 22 | _bufferName = engine()->toStringHandle(BUFFER_PROPERTY_NAME.toLatin1()); |
| 22 | _byteOffsetName = engine()->toStringHandle(BYTE_OFFSET_PROPERTY_NAME.toLatin1()); | 23 | _byteOffsetName = engine()->toStringHandle(BYTE_OFFSET_PROPERTY_NAME.toLatin1()); |
| 23 | _byteLengthName = engine()->toStringHandle(BYTE_LENGTH_PROPERTY_NAME.toLatin1()); | 24 | _byteLengthName = engine()->toStringHandle(BYTE_LENGTH_PROPERTY_NAME.toLatin1()); |
| 25 | registerMetaTypes(scriptEngine); | ||
| 24 | } | 26 | } |
| 25 | 27 | ||
| 26 | QScriptClass::QueryFlags ArrayBufferViewClass::queryProperty(const QScriptValue& object, | 28 | QScriptClass::QueryFlags ArrayBufferViewClass::queryProperty(const QScriptValue& object, |
| @@ -50,3 +52,34 @@ QScriptValue::PropertyFlags ArrayBufferViewClass::propertyFlags(const QScriptVal · 23 unmodified lines | |||
| 50 | const QScriptString& name, uint id) { | 52 | const QScriptString& name, uint id) { |
| 51 | return QScriptValue::Undeletable; | 53 | return QScriptValue::Undeletable; |
| 52 | } | 54 | } |
| 55 | |||
| 56 | namespace { | ||
| 57 | void byteArrayFromScriptValue(const QScriptValue& object, QByteArray& byteArray) { | ||
| 58 | if (object.isValid()) { | ||
| 59 | if (object.isObject()) { | ||
| 60 | if (object.isArray()) { | ||
| 61 | auto Uint8Array = object.engine()->globalObject().property("Uint8Array"); | ||
| 62 | auto typedArray = Uint8Array.construct(QScriptValueList{object}); | ||
| 63 | byteArray = qvariant_cast<QByteArray>(typedArray.property("buffer").toVariant()); | ||
| 64 | } else { | ||
| 65 | byteArray = qvariant_cast<QByteArray>(object.data().toVariant()); | ||
| 66 | } | ||
| 67 | } else { | ||
| 68 | byteArray = object.toString().toUtf8(); | ||
| 69 | } | ||
| 70 | } | ||
| 71 | } | ||
| 72 | |||
| 73 | QScriptValue byteArrayToScriptValue(QScriptEngine *engine, const QByteArray& byteArray) { | ||
| 74 | QScriptValue data = engine->newVariant(QVariant::fromValue(byteArray)); | ||
| 75 | QScriptValue constructor = engine->globalObject().property("ArrayBuffer"); | ||
| 76 | Q_ASSERT(constructor.isValid()); | ||
| 77 | auto array = qscriptvalue_cast<QScriptClass*>(constructor.data()); | ||
| 78 | Q_ASSERT(array); | ||
| 79 | return engine->newObject(array, data); | ||
| 80 | } | ||
| 81 | } | ||
| 82 | |||
| 83 | void ArrayBufferViewClass::registerMetaTypes(QScriptEngine* scriptEngine) { | ||
| 84 | qScriptRegisterMetaType(scriptEngine, byteArrayToScriptValue, byteArrayFromScriptValue); | ||
| 85 | } | ||