1 #ifndef __DALI_V8PLUGIN_V8_UTILS_H__
2 #define __DALI_V8PLUGIN_V8_UTILS_H__
5 * Copyright (c) 2015 Samsung Electronics Co., Ltd.
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
24 #include <dali/public-api/math/vector2.h>
25 #include <dali/public-api/math/vector3.h>
26 #include <dali/public-api/math/vector4.h>
27 #include <dali/public-api/math/rect.h>
28 #include <dali/public-api/actors/actor.h>
29 #include <dali/public-api/actors/layer.h>
30 #include <dali/public-api/render-tasks/render-task.h>
31 #include <dali/public-api/object/property-value.h>
32 #include <dali/public-api/object/property-map.h>
35 #include <shared/base-wrapped-object.h>
45 PARAMETER_0 = 0, ///< first parameter of a function call
46 PARAMETER_1 = 1, ///< second parameter of a function call
47 PARAMETER_2 = 2, ///< third parameter of a function call
48 PARAMETER_3 = 3, ///< forth parameter of a function call
49 PARAMETER_4 = 4, ///< fifth parameter of a function call
52 #define DALI_SCRIPT_EXCEPTION( isolate, message ) V8Utils::ScriptError( __FUNCTION__ , isolate, message );
53 #define DALI_SCRIPT_WARNING( message ) V8Utils::ScriptWarning( __FUNCTION__ , message );
58 * Print the list of arguments to std out
59 * @param[in] args v8 function args interpreted as (string, string,...)
61 void Log(const v8::FunctionCallbackInfo< v8::Value >& args) ;
64 * Print out using DALI_LOG_ERROR
65 * @param[in] args v8 function args interpreted as (string, string,...)
67 void LogError(const v8::FunctionCallbackInfo< v8::Value >& args) ;
70 * Read a files contents
72 * @param[in] filename The filename
73 * @param[out] contents string contents of the file
75 void GetFileContents( const std::string &filename, std::string& contents );
78 * Extract the directory path from a full path filename
79 * @param fileName file name
80 * @param directory directory name
82 void GetFileDirectory( const std::string& fileName, std::string& directory );
85 * Extract file name from a full path + file name
86 * @param[in] fullPathName full path + file name
87 * @param[out] fileName file name
89 void GetFileName( const std::string& fullPathName, std::string& fileName);
92 * Return the module name, e.g. if the module is
93 * my_module.js it will get 'my_module'
94 * @param[in] fileName full path module name
95 * @param[out] moduleName module name
97 void GetModuleName( const std::string& fileName, std::string& moduleName );
100 * Compare whether two DALi property maps are identical
101 * @param[in] map1 The first property map to be compared
102 * @param[in] map2 The second property map to be compared
103 * @return true if the two specified property maps are identical or false if not.
105 bool IsPropertyMapIdentical(Property::Map map1, Property::Map map2);
108 * Report an exception by writing as a warning to the Dali Log
110 * @param[in] try_catch The v8 TryCatch exception object
112 void ReportException( v8::Isolate* isolate, v8::TryCatch* try_catch) ;
115 * Depending on what coding standard used this can
116 * convert the first character to lower case,
117 * E.g. GetId becomes getId
119 std::string GetJavaScriptFunctionName( const char* functionName );
124 * @param[in] args v8 function args ignored
125 * @return a version string
127 void Version(const v8::FunctionCallbackInfo< v8::Value >& args) ;
130 * Convert v8 string as a std::string
131 * @param[in] value v8 function args interpreted as (v8_string)
134 std::string v8StringToStdString( const v8::Handle<v8::Value>& value) ;
137 * Convert hyphenated to camelCase (Dali property to wrapper property name)
139 * @param[in] hyphenatedName a hyphenated std::string to convert
140 * @return a camelCase'd std::string
142 std::string PropertyNameToJavaScriptName(const std::string& hyphenatedName);
145 * Script error, throws an exception
147 void ScriptError( const char* function, v8::Isolate* isolate, std::string errorString );
152 void ScriptWarning( const char* function, std::string warningString );
155 * @return in the value is a boolean primitive or a boolean object
157 bool IsBooleanPrimitiveOrObject( const v8::Local<v8::Value>& value );
160 * @return the value of boolean primitive or boolean object value
162 bool GetBooleanValue( v8::Isolate* isolate, const v8::Local<v8::Value>& value );
165 * @return true if the value is a number or a number object
167 bool IsNumberPrimitiveOrObject( const v8::Local<v8::Value>& value );
170 * @return the number of a number primitive or number object value
172 float GetNumberValue( v8::Isolate* isolate, const v8::Local<v8::Value>& value );
175 * @return if the value is a string primitve or a string object
177 bool IsStringPrimitiveOrObject( const v8::Local<v8::Value>& value );
180 * @return true if the value is a string or a string object
182 bool IsStringPrimitiveOrObject( const v8::Local<v8::Value>& value );
185 * @return the string from a string value or a string object
187 std::string GetStringValue( v8::Isolate* isolate, const v8::Local<v8::Value>& value );
189 /******************************************
190 * Helper functions for extracting a DALi object from a JavaScript object
191 *******************************************/
194 * Given a JavaScript object, either extract the embedded DALi property value or
195 * convert it to a property value
196 * @param[out] found whether the property was found
197 * @return property value
199 Property::Value GetPropertyValueFromObject( bool& found, v8::Isolate* isolate, const v8::Local<v8::Value >& value );
202 * Given a JavaScript object with
203 * @param [in] object JavaScrript object
204 * @return DALi ProperyMap from the JavaScript object
206 Property::Map GetPropertyMapFromObject( v8::Isolate* isolate, const v8::Local<v8::Object>& object);
209 * Extract a DALi wrapped object, from a JavaScript object held in a function argument
210 * @param[in] index argument index the object is held in
211 * @param[in] type type of wrapped object to extract
214 Actor GetActorFromObject( v8::Isolate* isolate, bool& found, v8::Local<v8::Object>& object);
217 /******************************************
218 * Helper functions to extract a C++ native type (int,float,string) or a DALi object
219 * ( handle, vector, actor, layer, property value, property map ) from a
220 * JavaScript function argument.
223 * myJavaScriptFunction( 23, 345, myActor );
228 * Actor myActor = v8Utils::GetActorParameter( PARAMETER_2, found, JavaScript Args );
229 ******************************************/
231 * @param [in] index parameter index, e.g. callMyFunc( index0, index1, index2).
232 * @param[out] found whether the parameter was found
233 * @return integer value from the JavaScript function arguments
235 int GetIntegerParameter( unsigned int index, bool& found, v8::Isolate* isolate, const v8::FunctionCallbackInfo< v8::Value >& args, int defaultValue );
238 * @param [in] index parameter index, e.g. callMyFunc( index0, index1, index2).
239 * @param[out] found whether the parameter was found
240 * @return float value from the JavaScript function arguments
242 float GetFloatParameter( unsigned int index, bool& found, v8::Isolate* isolate, const v8::FunctionCallbackInfo< v8::Value >& args, float defaultValue );
245 * @param [in] index parameter index, e.g. callMyFunc( index0, index1, index2).
246 * @param[out] found whether the parameter was found
247 * @return string value from the JavaScript function arguments
249 std::string GetStringParameter( unsigned int index, bool& found, v8::Isolate* isolate, const v8::FunctionCallbackInfo< v8::Value >& args );
252 * @param [in] index parameter index, e.g. callMyFunc( index0, index1, index2).
253 * @param[out] found whether the parameter was found
254 * @return boolean value from the JavaScript function arguments
256 bool GetBooleanParameter( unsigned int index, bool& found, v8::Isolate* isolate, const v8::FunctionCallbackInfo< v8::Value >& args );
259 * @param [in] index parameter index, e.g. callMyFunc( index0, index1, index2).
260 * @param[out] found whether the parameter was found
261 * @return ArrayBufferView from the JavaScript function arguments
263 void* GetArrayBufferViewParameter( unsigned int index, bool& found, v8::Isolate* isolate, const v8::FunctionCallbackInfo< v8::Value >& args );
266 * @param [in] index parameter index, e.g. callMyFunc( index0, index1, index2).
267 * @param[out] found whether the parameter was found
268 * @return DALi Handle value from the JavaScript function arguments
270 Handle GetHandleParameter( unsigned int index, bool& found, v8::Isolate* isolate, const v8::FunctionCallbackInfo< v8::Value >& args );
273 * @param [in] index parameter index, e.g. callMyFunc( index0, index1, index2).
274 * @param[out] found whether the parameter was found
275 * @return Vector2 from the JavaScript function arguments
277 Vector2 GetVector2Parameter( unsigned int index, bool& found, v8::Isolate* isolate, const v8::FunctionCallbackInfo< v8::Value >& args );
280 * @param [in] index parameter index, e.g. callMyFunc( index0, index1, index2).
281 * @param[out] found whether the parameter was found
282 * @return Vector3 from the JavaScript function arguments
284 Vector3 GetVector3Parameter( unsigned int index, bool& found, v8::Isolate* isolate, const v8::FunctionCallbackInfo< v8::Value >& args);
287 * @param [in] index parameter index, e.g. callMyFunc( index0, index1, index2).
288 * @param[out] found whether the parameter was found
289 * @return Vector4 from the JavaScript function arguments
291 Vector4 GetVector4Parameter( unsigned int index, bool& found, v8::Isolate* isolate, const v8::FunctionCallbackInfo< v8::Value >& args);
294 * @param [in] index parameter index, e.g. callMyFunc( index0, index1, index2).
295 * @param[out] found whether the parameter was found
296 * @return Rect<int> from the JavaScript function arguments
298 Rect<int> GetRectIntParameter( unsigned int index, bool& found, v8::Isolate* isolate, const v8::FunctionCallbackInfo< v8::Value >& args );
301 * @param [in] index parameter index, e.g. callMyFunc( index0, index1, index2).
302 * @param[out] found whether the parameter was found
303 * @return Actor from the JavaScript function arguments
305 Actor GetActorParameter( unsigned int index, bool& found, v8::Isolate* isolate, const v8::FunctionCallbackInfo< v8::Value >& args );
308 * @param [in] index parameter index, e.g. callMyFunc( index0, index1, index2).
309 * @param[out] found whether the parameter was found
310 * @return Layer from the JavaScript function arguments
312 Layer GetLayerParameter( unsigned int index, bool& found, v8::Isolate* isolate, const v8::FunctionCallbackInfo< v8::Value >& args );
315 * @param [in] index parameter index, e.g. callMyFunc( index0, index1, index2).
316 * @param[out] found whether the parameter was found
317 * @return Image from the JavaScript function arguments
319 Image GetImageParameter( unsigned int index, bool& found, v8::Isolate* isolate, const v8::FunctionCallbackInfo< v8::Value >& args );
322 * @param [in] index parameter index, e.g. callMyFunc( index0, index1, index2).
323 * @param[out] found whether the parameter was found
324 * @return RenderTask from the JavaScript function arguments
326 RenderTask GetRenderTaskParameter( unsigned int index, bool& found, v8::Isolate* isolate, const v8::FunctionCallbackInfo< v8::Value >& args );
329 * Extract a DALi wrapped object, from a JavaScript object held in a function argument
330 * @param[in] index argument index the object is held in
331 * @param[in] type type of wrapped object to extract
333 BaseWrappedObject* GetWrappedDaliObjectParameter( unsigned int index, BaseWrappedObject::Type type, v8::Isolate* isolate, const v8::FunctionCallbackInfo< v8::Value >& args );
336 * @param [in] index parameter index, e.g. callMyFunc( index0, index1, index2).
337 * @param[out] found whether the parameter was found
338 * @return ProperyValue from the JavaScript function arguments
340 Property::Value GetPropertyValueParameter( unsigned int index, bool& found, v8::Isolate* isolate, const v8::FunctionCallbackInfo< v8::Value >& args );
343 * @param [in] index parameter index, e.g. callMyFunc( index0, index1, index2).
344 * @param[out] found whether the parameter was found
345 * @return ProperyMap from the JavaScript function arguments
347 Property::Map GetPropertyMapParameter( unsigned int index, bool& found, v8::Isolate* isolate, const v8::FunctionCallbackInfo< v8::Value >& args );
350 * Generate a JavaScript property map, from a DALi property map
351 * @param [in] DALi map property map
352 * @param [in] JavaScript property map
354 void CreatePropertyMap( v8::Isolate* isolate, const Property::Map& map, v8::Local<v8::Object>& object );
358 * Read multiple float arguments from v8 args object
359 * e.g. myJavaFunc( 3.4, 7.6, 8.5 );
361 * @param[out] foundAllArguments flag to say all arguments are found
362 * @param[out] data pointer to a pre-allocated array of floats
363 * @param[in] dataSize the nunber of floats in the data parameter
364 * @param[in] defaultValue default value assigned to floats that don't exist in the arguments
366 void ReadFloatArguments( bool& foundAllArguments, float* data, unsigned int dataSize, const v8::FunctionCallbackInfo< v8::Value >& args, float defaultValue );
369 * Read multiple integer arguments from v8 args object
370 * e.g. myJavaFunc( 3, 7, 8 );
372 * @param[out] foundAllArguments flag to say all arguments are found
373 * @param[out] data pointer to a pre-allocated array of integers
374 * @param[in] dataSize the nunber of integers in the data parameter
375 * @param[in] defaultValue default value assigned to integers that don't exist in the arguments
377 void ReadIntegerArguments( bool& foundAllArguments, int* data, int dataSize, const v8::FunctionCallbackInfo< v8::Value >& args, int defaultValue );
379 } // namespace V8Utils
381 } // namespace V8Plugin
386 #endif // __DALI_V8PLUGIN_V8_UTILS_H__