2 * Copyright (c) 2015 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
19 #include "renderer-wrapper.h"
23 #include <rendering/renderer-api.h>
24 #include <shared/api-function.h>
25 #include <shared/object-template-helper.h>
26 #include <dali-wrapper.h>
34 v8::Persistent<v8::ObjectTemplate> RendererWrapper::mRendererTemplate;
36 namespace // un-named name space
40 * Contains a list of all functions that can be called
42 const ApiFunction RendererFunctionTable[]=
44 /**************************************
45 * Renderer API (in order of Renderer.h)
46 **************************************/
48 { "SetGeometry" , RendererApi::SetGeometry },
49 { "GetGeometry" , RendererApi::GetGeometry },
50 { "SetMaterial" , RendererApi::SetMaterial },
51 { "GetMaterial" , RendererApi::GetMaterial },
52 { "SetBlendFunc" , RendererApi::SetBlendFunc },
53 { "GetBlendFunc" , RendererApi::GetBlendFunc },
54 { "SetBlendEquation" , RendererApi::SetBlendEquation },
55 { "GetBlendEquation" , RendererApi::GetBlendEquation },
58 const unsigned int RendererFunctionTableCount = sizeof(RendererFunctionTable)/sizeof(RendererFunctionTable[0]);
62 RendererWrapper::RendererWrapper( const Dali::Renderer& renderer, GarbageCollectorInterface& gc )
63 : HandleWrapper( BaseWrappedObject::RENDERER , renderer, gc )
68 v8::Handle<v8::Object> RendererWrapper::WrapRenderer(v8::Isolate* isolate, const Dali::Renderer& renderer )
70 v8::EscapableHandleScope handleScope( isolate );
71 v8::Local<v8::ObjectTemplate> objectTemplate;
73 objectTemplate = GetRendererTemplate( isolate);
75 // create an instance of the template
76 v8::Local<v8::Object> localObject = objectTemplate->NewInstance();
78 // create the Renderer wrapper
79 RendererWrapper* pointer = new RendererWrapper( renderer, Dali::V8Plugin::DaliWrapper::Get().GetDaliGarbageCollector() );
81 // assign the JavaScript object to the wrapper.
82 pointer->SetJavascriptObject( isolate, localObject );
84 return handleScope.Escape( localObject );
87 v8::Local<v8::ObjectTemplate> RendererWrapper::GetRendererTemplate( v8::Isolate* isolate)
89 v8::EscapableHandleScope handleScope( isolate );
90 v8::Local<v8::ObjectTemplate> objectTemplate;
92 if( mRendererTemplate.IsEmpty() )
94 objectTemplate = MakeRendererTemplate( isolate );
95 mRendererTemplate.Reset( isolate, objectTemplate );
99 // get the object template
100 objectTemplate = v8::Local<v8::ObjectTemplate>::New( isolate, mRendererTemplate );
102 return handleScope.Escape( objectTemplate );
105 v8::Handle<v8::ObjectTemplate> RendererWrapper::MakeRendererTemplate( v8::Isolate* isolate )
107 v8::EscapableHandleScope handleScope( isolate );
109 v8::Local<v8::ObjectTemplate> objTemplate = v8::ObjectTemplate::New();
111 // property handle intercepts property getters and setters and signals
112 HandleWrapper::AddInterceptsToTemplate( isolate, objTemplate );
114 objTemplate->SetInternalFieldCount( BaseWrappedObject::FIELD_COUNT );
116 // add our function properties
117 ObjectTemplateHelper::InstallFunctions( isolate, objTemplate, RendererFunctionTable, RendererFunctionTableCount );
119 return handleScope.Escape( objTemplate );
122 void RendererWrapper::NewRenderer( const v8::FunctionCallbackInfo< v8::Value >& args)
124 v8::Isolate* isolate = args.GetIsolate();
125 v8::HandleScope handleScope( isolate);
127 if(!args.IsConstructCall())
129 DALI_SCRIPT_EXCEPTION( isolate, "Renderer constructor called without 'new'");
132 Dali::Renderer renderer = RendererApi::New( args );
136 v8::Local<v8::Object> localObject = WrapRenderer( isolate, renderer );
137 args.GetReturnValue().Set( localObject );
142 Renderer RendererWrapper::GetRenderer()
148 } // namespace V8Plugin