X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=plugins%2Fdali-script-v8%2Fsrc%2Fobject%2Fproperty-value-wrapper.cpp;h=f1fad653de8295335fa8da58bd7cc9c8db60c385;hp=c58d991f44b8c7c5a5a61fcff9e5829e5af4371c;hb=8a7433af8408ffc1869d696ec78332d775e7e772;hpb=4d0611f4911028b53905712013e1034d42531e5f diff --git a/plugins/dali-script-v8/src/object/property-value-wrapper.cpp b/plugins/dali-script-v8/src/object/property-value-wrapper.cpp index c58d991..f1fad65 100644 --- a/plugins/dali-script-v8/src/object/property-value-wrapper.cpp +++ b/plugins/dali-script-v8/src/object/property-value-wrapper.cpp @@ -481,7 +481,6 @@ bool IsPrimitive( const Dali::Property::Value &value ) { case Dali::Property::BOOLEAN: case Dali::Property::INTEGER: - case Dali::Property::UNSIGNED_INTEGER: case Dali::Property::STRING: case Dali::Property::FLOAT: { @@ -516,11 +515,6 @@ v8::Local CreateJavaScriptPrimitive( v8::Isolate* isolate, const Dal v8Value = v8::Integer::New( isolate, value.Get()); break; } - case Dali::Property::UNSIGNED_INTEGER: - { - v8Value = v8::Integer::New( isolate, value.Get()); - break; - } case Dali::Property::STRING: { std::string string = value.Get< std::string >(); @@ -533,9 +527,15 @@ v8::Local CreateJavaScriptPrimitive( v8::Isolate* isolate, const Dal break; } } - v8::Local ret = v8Value->ToObject(); - return handleScope.Escape( ret ); + v8::Local ret; + + if( v8Value->IsObject() ) + { + ret = v8Value->ToObject(); + } + + return handleScope.Escape( ret ); } @@ -568,7 +568,7 @@ Dali::Property::Value PropertyValueWrapper::VectorOrMatrixFromV8Array( v8::Isola } if(16 == len ) { - ret = Dali::Matrix( out[0] ); + ret = Dali::Matrix( out ); } else if ( 9 == len ) { @@ -681,13 +681,9 @@ Dali::Property::Value PropertyValueWrapper::ExtractPropertyValue( v8::Isolate* i { daliPropertyValue = Dali::Property::Value( v8Value->Int32Value() ) ;//static_cast( V8Utils::GetNumberValue( isolate, v8Value) )); } - break; - } - case Dali::Property::UNSIGNED_INTEGER: - { - if( v8Value->IsUint32() ) + else if( V8Utils::IsStringPrimitiveOrObject( v8Value) ) // Take string as value for properties that internally convert the string to an enum { - daliPropertyValue = Dali::Property::Value( v8Value->Uint32Value() );//static_cast( V8Utils::GetNumberValue( isolate, v8Value) )); + daliPropertyValue = Dali::Property::Value( V8Utils::GetStringValue( isolate, v8Value) ); } break; } @@ -768,14 +764,87 @@ Dali::Property::Value PropertyValueWrapper::ExtractPropertyValue( v8::Isolate* i daliPropertyValue = ArrayFromV8Array( isolate, v8Value ); break; } + case Dali::Property::MAP: + { + if( v8Value->IsObject() ) + { + v8::Local object = v8::Handle::Cast(v8Value); + Dali::Property::Map propertyMap = V8Utils::GetPropertyMapFromObject(isolate, object); + daliPropertyValue = Dali::Property::Value( propertyMap ); + } + else if( V8Utils::IsStringPrimitiveOrObject( v8Value) ) + { + // There are special cases where a property with property map type can accept a string value, + // so we do the additional check here. + daliPropertyValue = Dali::Property::Value( V8Utils::GetStringValue( isolate, v8Value) ); + } + + break; + } case Dali::Property::NONE: default: { break; } - } // switch type + } // switch type + + return daliPropertyValue; +} + +Dali::Property::Value PropertyValueWrapper::ExtractPropertyValue( v8::Isolate* isolate, v8::Local< v8::Value> v8Value) +{ + v8::HandleScope handleScope( isolate); + + Dali::Property::Value daliPropertyValue; + + // Check if it's a javascript Array + Dali::Property::Value array = VectorOrMatrixFromV8Array( isolate, v8Value ); + + if( V8Utils::IsBooleanPrimitiveOrObject( v8Value ) ) + { + daliPropertyValue = Dali::Property::Value( V8Utils::GetBooleanValue( isolate, v8Value)); + } + else if( V8Utils::IsNumberPrimitiveOrObject( v8Value ) ) + { + daliPropertyValue = Dali::Property::Value( V8Utils::GetNumberValue( isolate, v8Value) ); + } + else if( v8Value->IsInt32() ) + { + daliPropertyValue = Dali::Property::Value( v8Value->Int32Value() ) ; + } + else if( V8Utils::IsStringPrimitiveOrObject( v8Value) ) + { + daliPropertyValue = Dali::Property::Value( V8Utils::GetStringValue( isolate, v8Value) ); + } + else if( array.GetType() == Dali::Property::VECTOR2 + || array.GetType() == Dali::Property::VECTOR3 + || array.GetType() == Dali::Property::VECTOR4 ) + { + daliPropertyValue = array; + } + else if( array.GetType() == Dali::Property::MATRIX ) + { + Dali::Matrix mat = array.Get(); + daliPropertyValue = mat; + } + else if( array.GetType() == Dali::Property::MATRIX3 ) + { + Dali::Matrix3 mat = array.Get(); + daliPropertyValue = mat; + } + else if( array.GetType() == Dali::Property::ARRAY ) + { + daliPropertyValue = ArrayFromV8Array( isolate, v8Value ); + } + else if( v8Value->IsObject() ) + { + // Assume this is a property map + v8::Local object = v8::Handle::Cast(v8Value); + Dali::Property::Map propertyMap = V8Utils::GetPropertyMapFromObject(isolate, object); + daliPropertyValue = Dali::Property::Value( propertyMap ); + } - return daliPropertyValue; + return daliPropertyValue; } void PropertyValueWrapper::NewRotation( const v8::FunctionCallbackInfo< v8::Value >& args)