JavaScript binding for new mesh APIs
[platform/core/uifw/dali-toolkit.git] / plugins / dali-script-v8 / src / utils / v8-utils.cpp
index d9fbc7e..f843d1d 100644 (file)
@@ -64,7 +64,7 @@ void Log(const v8::FunctionCallbackInfo< v8::Value >& args)
       std::cout << " ";
     }
     v8::String::Utf8Value utf8_value( args[i] );
-    std::cout << *utf8_value;
+    std::cout << *utf8_value << "\n";
   }
 }
 
@@ -85,6 +85,7 @@ void LogError(const v8::FunctionCallbackInfo< v8::Value >& args)
     }
     v8::String::Utf8Value utf8_value( args[i] );
     output += *utf8_value;
+    output +="\n";
   }
   DALI_LOG_ERROR_NOFN( "JavaScript: %s",output.c_str() );
 }
@@ -389,7 +390,7 @@ Property::Value GetPropertyValueFromObject( bool& found, v8::Isolate* isolate, c
 {
   v8::HandleScope handleScope( isolate);
 
-  Property::Value  daliPropertyValue;// creates a property with Property::INVALID
+  Property::Value  daliPropertyValue;// creates a property with Property::NONE
 
   found = false;
 
@@ -421,18 +422,12 @@ Property::Value GetPropertyValueFromObject( bool& found, v8::Isolate* isolate, c
     v8::Local<v8::Number> v = value->ToNumber();
     return Dali::Property::Value(static_cast<float>(v->Value()));
   }
-  else if( value->IsInt32() )
+  else if( value->IsInt32() || value->IsUint32() )
   {
     found = true;
     v8::Local<v8::Int32> v = value->ToInt32();
     return Dali::Property::Value(static_cast<int>(v->Value()));
   }
-  else if ( value->IsUint32() )
-  {
-    found = true;
-    v8::Local<v8::Uint32> v = value->ToUint32();
-    return Dali::Property::Value(static_cast<unsigned int>(v->Value()));
-  }
   return daliPropertyValue;
 
 }
@@ -450,11 +445,33 @@ Property::Map GetPropertyMapFromObject( v8::Isolate* isolate, const v8::Local<v8
 
     // Get the value
     v8::Local<v8::Value> value = object->Get( key );
-    std::string valueString = V8Utils::v8StringToStdString( value );
-
-    propertyMap[ keyString ] = valueString.c_str();
 
+    if( value->IsBoolean() )
+    {
+      v8::Local<v8::Boolean> v = value->ToBoolean();
+      propertyMap[ keyString ] = v->Value();
+    }
+    else if( value->IsNumber() )
+    {
+      v8::Local<v8::Number> v = value->ToNumber();
+      propertyMap[ keyString ] = static_cast<float>(v->Value());
+    }
+    else if( value->IsInt32() || value->IsUint32() )
+    {
+      v8::Local<v8::Int32> v = value->ToInt32();
+      propertyMap[ keyString ] = static_cast<int>(v->Value());
+    }
+    else if( value->IsString() )
+    {
+      std::string valueString = V8Utils::v8StringToStdString( value );
+      propertyMap[ keyString ] = valueString.c_str();
+    }
+    else if( value->IsArray() )
+    {
+      propertyMap[ keyString ] = PropertyValueWrapper::VectorOrMatrixFromV8Array( isolate, value);
+    }
   }
+
   return propertyMap;
 }
 
@@ -485,6 +502,7 @@ int GetIntegerParameter( unsigned int index, bool& found, v8::Isolate* isolate,
     found = true;
     return args[ index ]->Int32Value();
   }
+  else
   {
     return defaultValue;
   }
@@ -503,6 +521,7 @@ float GetFloatParameter( unsigned int index, bool& found, v8::Isolate* isolate,
     found = true;
     return args[ index ]->NumberValue();
   }
+  else
   {
     return defaultValue;
   }
@@ -550,6 +569,24 @@ bool GetBooleanParameter( unsigned int index, bool& found, v8::Isolate* isolate,
   }
 }
 
+void* GetArrayBufferViewParameter( unsigned int index, bool& found, v8::Isolate* isolate, const v8::FunctionCallbackInfo< v8::Value >& args  )
+{
+  found = false;
+  unsigned int length = args.Length();
+  if( index < length && args[index]->IsArrayBufferView() )
+  {
+    found = true;
+    v8::ArrayBufferView* bufferView = v8::ArrayBufferView::Cast(*(args[index]));
+    v8::Handle<v8::ArrayBuffer> buffer = bufferView->Buffer();
+    v8::ArrayBuffer::Contents contents = buffer->Externalize();
+    return contents.Data();
+  }
+  else
+  {
+    return NULL;
+  }
+}
+
 Handle GetHandleParameter( unsigned int index, bool& found, v8::Isolate* isolate, const v8::FunctionCallbackInfo< v8::Value >& args )
 {
   v8::HandleScope handleScope( isolate);
@@ -770,6 +807,7 @@ Image GetImageParameter( unsigned int index, bool& found, v8::Isolate* isolate,
   }
 
 }
+
 RenderTask GetRenderTaskParameter( unsigned int paramIndex, bool& found, v8::Isolate* isolate, const v8::FunctionCallbackInfo< v8::Value >& args )
 {
   found = false;
@@ -786,7 +824,6 @@ RenderTask GetRenderTaskParameter( unsigned int paramIndex, bool& found, v8::Iso
   }
 }
 
-
 BaseWrappedObject* GetWrappedDaliObjectParameter( unsigned int index,  BaseWrappedObject::Type type,  v8::Isolate* isolate, const v8::FunctionCallbackInfo< v8::Value >& args )
 {
   v8::HandleScope handleScope( isolate);
@@ -893,11 +930,6 @@ void CreatePropertyMap( v8::Isolate* isolate, const Property::Map& map, v8::Loca
         v8Value = v8::Integer::New( isolate, value.Get<int>());
         break;
       }
-      case Dali::Property::UNSIGNED_INTEGER:
-      {
-        v8Value = v8::Integer::New( isolate, value.Get<unsigned int>());
-        break;
-      }
       case Dali::Property::STRING:
       {
         std::string string = value.Get< std::string >();