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 "render-task-wrapper.h"
23 #include <render-tasks/render-task-api.h>
24 #include <shared/api-function.h>
25 #include <shared/object-template-helper.h>
26 #include <signals/signal-manager.h>
27 #include <dali-wrapper.h>
35 v8::Persistent<v8::ObjectTemplate> RenderTaskWrapper::mRenderTaskTemplate;
37 namespace // un-named name space
41 * Contains a list of all functions that can be called
43 const ApiFunction RenderTaskFunctionTable[]=
45 /**************************************
46 * RenderTask API (in order of renderTask.h)
47 **************************************/
49 { "SetSourceActor" , RenderTaskApi::SetSourceActor },
50 { "GetSourceActor" , RenderTaskApi::GetSourceActor },
51 { "SetExclusive" , RenderTaskApi::SetExclusive },
52 { "IsExclusive" , RenderTaskApi::IsExclusive },
53 { "SetInputEnabled" , RenderTaskApi::SetInputEnabled },
54 { "GetInputEnabled" , RenderTaskApi::GetInputEnabled },
55 { "SetCameraActor" , RenderTaskApi::SetCameraActor },
56 { "GetCameraActor" , RenderTaskApi::GetCameraActor },
57 { "SetTargetFrameBuffer" , RenderTaskApi::SetTargetFrameBuffer },
58 { "GetTargetFrameBuffer" , RenderTaskApi::GetTargetFrameBuffer },
59 { "SetScreenToFrameBufferMappingActor" , RenderTaskApi::SetScreenToFrameBufferMappingActor },
60 { "GetScreenToFrameBufferMappingActor" , RenderTaskApi::GetScreenToFrameBufferMappingActor },
62 // USE viewportPosition property "SetViewportPosition" , RenderTaskApi::SetViewportPosition },
63 // USE viewportPosition property{ "GetCurrentViewportPosition" , RenderTaskApi::GetCurrentViewportPosition },
64 // USE viewportSize property { "SetViewportSize" , RenderTaskApi::SetViewportSize },
65 // USE viewportSize property { "SetViewportSize" , RenderTaskApi::SetViewportSize },
67 { "GetViewport" , RenderTaskApi::GetViewport },
68 { "SetViewport" , RenderTaskApi::SetViewport },
70 // USE clearColor property, { "SetClearColor" , RenderTaskApi::SetClearColor },
71 // USE clearColor property, // { "GetClearColor" , RenderTaskApi::GetClearColor },
73 { "SetClearEnabled" , RenderTaskApi::SetClearEnabled },
74 { "GetClearEnabled" , RenderTaskApi::GetClearEnabled },
75 { "SetCullMode" , RenderTaskApi::SetCullMode },
76 { "GetCullMode" , RenderTaskApi::GetCullMode },
77 { "SetRefreshRate" , RenderTaskApi::SetRefreshRate },
78 { "GetRefreshRate" , RenderTaskApi::GetRefreshRate },
82 const unsigned int RenderTaskFunctionTableCount = sizeof(RenderTaskFunctionTable)/sizeof(RenderTaskFunctionTable[0]);
86 RenderTaskWrapper::RenderTaskWrapper( const Dali::RenderTask& renderTask, GarbageCollectorInterface& gc )
87 : HandleWrapper( BaseWrappedObject::RENDER_TASK , renderTask, gc )
89 mRenderTask = renderTask;
92 v8::Handle<v8::Object> RenderTaskWrapper::WrapRenderTask(v8::Isolate* isolate, const Dali::RenderTask& renderTask )
94 v8::EscapableHandleScope handleScope( isolate );
95 v8::Local<v8::ObjectTemplate> objectTemplate;
97 objectTemplate = GetRenderTaskTemplate( isolate);
99 // create an instance of the template
100 v8::Local<v8::Object> localObject = objectTemplate->NewInstance();
102 // create the RenderTask wrapper
103 RenderTaskWrapper* pointer = new RenderTaskWrapper( renderTask, Dali::V8Plugin::DaliWrapper::Get().GetDaliGarbageCollector() );
105 // assign the JavaScript object to the wrapper.
106 pointer->SetJavascriptObject( isolate, localObject );
108 return handleScope.Escape( localObject );
111 v8::Local<v8::ObjectTemplate> RenderTaskWrapper::GetRenderTaskTemplate( v8::Isolate* isolate)
113 v8::EscapableHandleScope handleScope( isolate );
114 v8::Local<v8::ObjectTemplate> objectTemplate;
116 if( mRenderTaskTemplate.IsEmpty() )
118 objectTemplate = MakeRenderTaskTemplate( isolate );
119 mRenderTaskTemplate.Reset( isolate, objectTemplate );
123 // get the object template
124 objectTemplate = v8::Local<v8::ObjectTemplate>::New( isolate, mRenderTaskTemplate );
126 return handleScope.Escape( objectTemplate );
129 v8::Handle<v8::ObjectTemplate> RenderTaskWrapper::MakeRenderTaskTemplate( v8::Isolate* isolate )
131 v8::EscapableHandleScope handleScope( isolate );
133 v8::Local<v8::ObjectTemplate> objTemplate = v8::ObjectTemplate::New();
135 // property handle intercepts property getters and setters and signals
136 HandleWrapper::AddInterceptsToTemplate( isolate, objTemplate );
138 objTemplate->SetInternalFieldCount( BaseWrappedObject::FIELD_COUNT );
140 // add our function properties
141 ObjectTemplateHelper::InstallFunctions( isolate, objTemplate, RenderTaskFunctionTable, RenderTaskFunctionTableCount );
143 return handleScope.Escape( objTemplate );
147 RenderTask RenderTaskWrapper::GetRenderTask()
153 } // namespace V8Plugin