// EXTERNAL INCLUDES
#include <dali/public-api/object/type-registry.h>
+#include <dali-toolkit/public-api/controls/control.h>
// INTERNAL INCLUDES
#include <actors/layer-api.h>
#include <actors/actor-api.h>
-#include <actors/image-actor-api.h>
-#include <actors/text-actor-api.h>
-#include <actors/mesh-actor-api.h>
#include <actors/camera-actor-api.h>
-#include <actors/renderable-actor-api.h>
#include <v8-utils.h>
#include <dali-wrapper.h>
{
v8::Persistent<v8::ObjectTemplate> ActorWrapper::mActorTemplate;
-v8::Persistent<v8::ObjectTemplate> ActorWrapper::mImageActorTemplate;
-v8::Persistent<v8::ObjectTemplate> ActorWrapper::mTextActorTemplate;
-v8::Persistent<v8::ObjectTemplate> ActorWrapper::mMeshActorTemplate;
v8::Persistent<v8::ObjectTemplate> ActorWrapper::mCameraActorTemplate;
v8::Persistent<v8::ObjectTemplate> ActorWrapper::mLayerActorTemplate;
-v8::Persistent<v8::ObjectTemplate> ActorWrapper::mTextViewTemplate;
namespace
{
const ActorTemplate ActorTemplateLookup[]=
{
{ &ActorWrapper::mActorTemplate }, // ACTOR
- { &ActorWrapper::mImageActorTemplate }, // IMAGE_ACTOR
- { &ActorWrapper::mTextActorTemplate }, // TEXT_ACTOR
- { &ActorWrapper::mMeshActorTemplate }, // MESH_ACTOR
{ &ActorWrapper::mLayerActorTemplate }, // LAYER_ACTOR
- { &ActorWrapper::mCameraActorTemplate}, // CAMERA_ACTOR
- { &ActorWrapper::mTextViewTemplate }
+ { &ActorWrapper::mCameraActorTemplate} // CAMERA_ACTOR
};
/**
enum ActorApiBitMask
{
ACTOR_API = 1 << 0,
- RENDERABLE_ACTOR_API = 1 << 1,
- IMAGE_ACTOR_API = 1 << 2,
- TEXT_ACTOR_API = 1 << 3,
- MESH_ACTOR_API = 1 << 4,
- LAYER_API = 1 << 5,
- CAMERA_ACTOR_API = 1 << 6,
+ LAYER_API = 1 << 1,
+ CAMERA_ACTOR_API = 1 << 2,
};
/**
/**
* Lookup table to match a actor type with a constructor and supported API's.
+ * HandleWrapper::ActorType is used to index this table
*/
const ActorApiStruct ActorApiLookup[]=
{
{"Actor", ActorWrapper::ACTOR, ActorApi::New, ACTOR_API },
- {"ImageActor", ActorWrapper::IMAGE_ACTOR, ImageActorApi::New, ACTOR_API | RENDERABLE_ACTOR_API | IMAGE_ACTOR_API },
- {"TextActor", ActorWrapper::TEXT_ACTOR, TextActorApi::New, ACTOR_API | RENDERABLE_ACTOR_API | TEXT_ACTOR_API },
- {"MeshActor", ActorWrapper::MESH_ACTOR, MeshActorApi::New, ACTOR_API | RENDERABLE_ACTOR_API | MESH_ACTOR_API },
{"Layer", ActorWrapper::LAYER_ACTOR, LayerApi::New, ACTOR_API | LAYER_API },
{"CameraActor",ActorWrapper::CAMERA_ACTOR, CameraActorApi::New, ACTOR_API | CAMERA_ACTOR_API },
- {"TextView", ActorWrapper::TEXT_VIEW, TextViewApi::New, ACTOR_API },
-
};
const unsigned int ActorApiLookupCount = sizeof(ActorApiLookup)/sizeof(ActorApiLookup[0]);
// if we don't currently support the actor type, then use type registry to create it
if( actorType == ActorWrapper::UNKNOWN_ACTOR )
{
- Dali::TypeInfo typeInfo = Dali::TypeRegistry::Get().GetTypeInfo( typeName );
- if( typeInfo ) // handle, check if it has a value
- {
- Dali::BaseHandle handle = typeInfo.CreateInstance();
- if( handle )
- {
- actor = Actor::DownCast( handle );
- }
- }
- else
- {
- DALI_SCRIPT_EXCEPTION(args.GetIsolate(),"Unknown actor type");
+ DALI_SCRIPT_EXCEPTION( args.GetIsolate(), "Unknown actor type" );
return Actor();
- }
}
else
{
// run the constructor for this type of actor so it can pull out
- // custom parameters, e.g. new TextActor("hello world"); or ImageActor( MyImage );
+ // custom parameters;
actor = (ActorApiLookup[actorType].constructor)( args );
}
return actor;
/**
* Contains a list of all functions that can be called an
- * actor / image-actor / mesh-actor/ layer / camera-actor
+ * actor / image-actor / layer / camera-actor
*/
const ActorFunctions ActorFunctionTable[]=
{
{ "FindChildById", ActorApi::FindChildById, ACTOR_API },
{ "GetParent" , ActorApi::GetParent, ACTOR_API },
{ "GetActorType" , ActorApi::GetActorType, ACTOR_API }, // custom for javascript
- { "ApplyPathConstraint", ActorApi::ApplyPathConstraint, ACTOR_API }, // custom for javascript
- { "RemovePathConstraint", ActorApi::RemovePathConstraint, ACTOR_API }, // custom for javascript
// ignore. SetParentOrigin() use Actor.parentOrigin
// ignore. GetCurrentParentOrigin() use Actor.parentOrigin
// ignore. GetCurrentAnchorPoint() use Actor.anchorPoint
// ignore. SetSize() use Actor.size
// ignore. GetCurrentSize() use Actor.size
+ { "GetNaturalSize", ActorApi::GetNaturalSize, ACTOR_API },
+ { "GetWidthForHeight",ActorApi::GetWidthForHeight, ACTOR_API },
+ { "GetHeightForWidth",ActorApi::GetHeightForWidth, ACTOR_API },
// ignore. SetPosition(....) use Actor.position
// ignore. SetX, SetY, SetZ, use Actor.position.x, Actor.position.y, Actor.position.z
{ "TranslateBy", ActorApi::TranslateBy, ACTOR_API },
// ignore SetColorMode() use Actor.colorMode
// ignore GetColorMode() use Actor.colorMode
// ignore GetCurrentWorldColor() use Actor.worldColor
- // ignore SetInheritShaderEffect() use Actor.inheritShaderEffect
- // ignore GetInheritShaderEffect() use Actor.inheritShaderEffect
// ignore SetDrawMode() use Actor.drawMode
// ignore GetDrawMode() use Actor.drawMode
// ignore SetSensitive() use Actor.sensitve
{ "SetKeyboardFocusable", ActorApi::SetKeyboardFocusable, ACTOR_API }, //-- should this be a property???
{ "IsKeyboardFocusable" , ActorApi::IsKeyboardFocusable, ACTOR_API }, //-- should this be a property???
- /**************************************
- * Renderable Actor API (in order of renderable-actor.h)
- **************************************/
- { "SetSortModifier", RenderableActorApi::SetSortModifier, RENDERABLE_ACTOR_API },
- { "GetSortModifier", RenderableActorApi::GetSortModifier, RENDERABLE_ACTOR_API },
- { "SetCullFace", RenderableActorApi::SetCullFace, RENDERABLE_ACTOR_API },
- { "GetCullFace", RenderableActorApi::GetCullFace, RENDERABLE_ACTOR_API },
- { "SetBlendMode", RenderableActorApi::SetBlendMode, RENDERABLE_ACTOR_API },
- { "GetBlendMode", RenderableActorApi::GetBlendMode, RENDERABLE_ACTOR_API },
- { "SetBlendFunc", RenderableActorApi::SetBlendFunc, RENDERABLE_ACTOR_API },
- { "GetBlendFunc", RenderableActorApi::GetBlendFunc, RENDERABLE_ACTOR_API },
- { "SetBlendEquation", RenderableActorApi::SetBlendEquation, RENDERABLE_ACTOR_API },
- { "GetBlendEquation", RenderableActorApi::GetBlendEquation, RENDERABLE_ACTOR_API },
- { "SetBlendColor", RenderableActorApi::SetBlendColor, RENDERABLE_ACTOR_API },
- { "GetBlendColor", RenderableActorApi::GetBlendColor, RENDERABLE_ACTOR_API },
- { "SetShaderEffect", RenderableActorApi::SetShaderEffect, RENDERABLE_ACTOR_API },
- { "GetShaderEffect", RenderableActorApi::GetShaderEffect, RENDERABLE_ACTOR_API },
- { "RemoveShaderEffect", RenderableActorApi::RemoveShaderEffect,RENDERABLE_ACTOR_API },
-
-
-
+ { "AddRenderer", ActorApi::AddRenderer, ACTOR_API },
+ { "GetRendererCount", ActorApi::GetRendererCount, ACTOR_API },
+ { "GetRendererAt" , ActorApi::GetRendererAt, ACTOR_API },
+ { "RemoveRenderer" , ActorApi::RemoveRenderer, ACTOR_API },
/**************************************
* Layer API (in order of layer.h)
{ "Raise", LayerApi::Raise, LAYER_API },
{ "Lower", LayerApi::Lower, LAYER_API },
{ "RaiseAbove", LayerApi::RaiseAbove, LAYER_API },
- { "RaiseBelow", LayerApi::LowerBelow, LAYER_API },
+ { "LowerBelow", LayerApi::LowerBelow, LAYER_API },
{ "RaiseToTop", LayerApi::RaiseToTop, LAYER_API },
- { "LowerToBottom", LayerApi::ToBottom, LAYER_API },
+ { "LowerToBottom", LayerApi::LowerToBottom, LAYER_API },
{ "MoveAbove", LayerApi::MoveAbove, LAYER_API },
{ "MoveBelow", LayerApi::MoveBelow, LAYER_API },
// ignore SetClipping, use layer.clippingEnable
// @todo SetSortFunction
/**************************************
- * Image Actor API (in order of image-actor.h)
- **************************************/
-
- { "SetImage", ImageActorApi::SetImage, IMAGE_ACTOR_API },
- { "GetImage", ImageActorApi::GetImage, IMAGE_ACTOR_API },
- { "SetToNaturalSize", ImageActorApi::SetToNaturalSize, IMAGE_ACTOR_API },
- // ignore SetPixelArea, use imageActor.pixelArea
- // ignore GetPixelArea, use imageActor.pixelArea
- { "IsPixelAreaSet", ImageActorApi::IsPixelAreaSet, IMAGE_ACTOR_API },
- { "ClearPixelArea", ImageActorApi::ClearPixelArea, IMAGE_ACTOR_API },
- // ignore SetStyle, use imageActor.style
- // ignore GetStyle, use imageActor.style
- // ignore SetNinePatchBorder use imageActor.border
- // ignore GetNinePatchBorder use imageActor.border
- // ignore SetFadeIn use imageActor.fadeIn
- // ignore GetFadeIn use imageActor.fadeIn
- // ignore SetFadeInDuration use imageActor.fadeInDuration
- // ignore GetFadeInDuration use imageActor.fadeInDuration
- //{ "GetCurrentImageSize", ImageActorApi::GetCurrentImageSize, IMAGE_ACTOR_API },
-
-
- /**************************************
- * Text Actor API (in order of text-actor.h)
- **************************************/
- //ignore SetText use textActor.text
- { "SetToNaturalSize", TextActorApi::SetToNaturalSize, TEXT_ACTOR_API },
- // ignore GetFont use textActor.font
- // ignore SetFont use textActor.font
- // ignore SetGradient use textActor.gradientColor
- // ignore GetGradient textActor.gradientColor
- // ignore SetGradientStartPoint use textActor.gradientStartPoint
- // ignore GetGradientStartPoint textActor.gradientStartPoint
- // ignore SetGradientEndPoint use textActor.gradientEndPoint
- // ignore GetGradientEndPoint textActor.gradientEndPoint
- // @todo? SetTextStyle ( can use individual properties as a work around )
- // @todo? GetTextStyle ( can use individual properties as a work around )
- // ignore SetTextColor use textActor.textColor
- // ignore GetTextColor use textActor.textColor
- // ignore SetSmoothEdge use textActor.smoothEdge
- // ignore SetOutline use textActor.outLineEnable, outlineColor, thicknessWidth
- // ignore SetGlow use textActor.glowEnable, glowColor, glowIntensity
- // ignore SetShadow use textActor.shadowEnable, shadowColor, shadowOffset, shadowSize
- // ignore SetItalics use textActor.italicsAngle ?
- // ignore GetItalics @todo add italics flag? or just stick with angle
- // ignore GetItalicsAngle use textActor.italicsAngle
- // ignore SetUnderline use textActor.underline
- // ignore GetUnderline use textActor.underline
- // ignore SetWeight use textActor.weight
- // ignore GetWeight use textActor.weight
- // ignore SetFontDetectionAutomatic use textActor.fontDetectionAutomatic
- // ignore IsFontDetectionAutomatic use textActor.fontDetectionAutomatic
- // ignore GetLoadingState text is loaded synchronously
- // ignore TextAvailableSignal text is loaded synchronously
-
- /**************************************
- * Mesh Actor API (in order of mesh-actor.h)
- **************************************/
- // @todo a version of MeshActor::New( mesh )
- // @todo a version of MeshActor::New( AnimatableMesh )
- // @todo SetMaterial
- // @todo GetMaterial
- // @todo BindBonesToMesh
-
- /**************************************
* Camera Actor API (in order of camera.h)
**************************************/
// ignore SetType use camera.type
v8::Handle<v8::Object> ActorWrapper::WrapActor(v8::Isolate* isolate, Actor actor )
{
v8::EscapableHandleScope handleScope( isolate );
- v8::Local<v8::Object> object = WrapActor( isolate, actor, GetActorType( actor.GetTypeName() ) );
+
+ // Check whether the actor is a Control
+ ActorWrapper::ActorType type = Toolkit::Control::DownCast(actor) ? ACTOR : GetActorType( actor.GetTypeName() );
+ v8::Local<v8::Object> object = WrapActor( isolate, actor, type );
return handleScope.Escape( object );
}
const ActorFunctions property = ActorFunctionTable[i];
// check to see if the actor supports a certain type of API
- // e.g. ImageActor will support ACTOR_API, RENDERABLE_API and IMAGE_ACTOR_API
+ // e.g. Layer will support ACTOR_API and LAYER_API
if( supportApis & property.api )
{
std::string funcName = V8Utils::GetJavaScriptFunctionName( property.name);
return;
}
- // find out the callee function name...e.g. TextActor, ImageActor, MeshActor
+ // find out the callee function name...e.g. CameraActor
v8::Local<v8::Function> callee = args.Callee();
v8::Local<v8::Value> v8String = callee->GetName();
std::string typeName = V8Utils::v8StringToStdString( v8String );
args.GetReturnValue().Set( localObject );
}
+void ActorWrapper::NewControl( const v8::FunctionCallbackInfo< v8::Value >& args)
+{
+ v8::Isolate* isolate = args.GetIsolate();
+ v8::HandleScope handleScope( isolate );
+
+ if( !args.IsConstructCall() )
+ {
+ DALI_SCRIPT_EXCEPTION( isolate, "constructor called without 'new" );
+ return;
+ }
+
+ bool found( false );
+ std::string controlName = V8Utils::GetStringParameter( PARAMETER_0, found, isolate, args );
+
+ if( !found )
+ {
+ DALI_SCRIPT_EXCEPTION( isolate, "missing control name" );
+ return;
+ }
+ Actor control;
+ Dali::TypeInfo typeInfo = Dali::TypeRegistry::Get().GetTypeInfo( controlName );
+ if( typeInfo ) // handle, check if it has a value
+ {
+ Dali::BaseHandle handle = typeInfo.CreateInstance();
+ if( handle )
+ {
+ control = Actor::DownCast( handle );
+ }
+ }
+
+ v8::Local<v8::Object> localObject = WrapActor( isolate, control, ACTOR );
+
+ args.GetReturnValue().Set( localObject );
+}
+
+
/**
- * given an actor type name, e.g. ImageActor returns the type, e.g. ActorWrapper::IMAGE_ACTOR
+ * given an actor type name, e.g. CameraActor returns the type, e.g. ActorWrapper::CAMERA_ACTOR
*/
ActorWrapper::ActorType ActorWrapper::GetActorType( const std::string& name )
{