[dali_1.4.26] Merge branch 'devel/master'
[platform/core/uifw/dali-toolkit.git] / plugins / dali-script-v8 / src / render-tasks / render-task-wrapper.cpp
1 /*
2  * Copyright (c) 2015 Samsung Electronics Co., Ltd.
3  *
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
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  *
16  */
17
18 // CLASS HEADER
19 #include "render-task-wrapper.h"
20
21 // INTERNAL INCLUDES
22 #include <v8-utils.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>
28
29 namespace Dali
30 {
31
32 namespace V8Plugin
33 {
34
35 v8::Persistent<v8::ObjectTemplate> RenderTaskWrapper::mRenderTaskTemplate;
36
37 namespace // un-named name space
38 {
39
40 /**
41  * Contains a list of all functions that can be called
42  */
43 const ApiFunction RenderTaskFunctionTable[]=
44 {
45     /**************************************
46     * RenderTask API (in order of renderTask.h)
47     **************************************/
48
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 },
61
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 },
66
67    { "GetViewport" ,                RenderTaskApi::GetViewport },
68    { "SetViewport" ,                RenderTaskApi::SetViewport },
69
70    // USE clearColor property, { "SetClearColor" ,        RenderTaskApi::SetClearColor },
71    // USE clearColor property, // { "GetClearColor" ,     RenderTaskApi::GetClearColor },
72
73    { "SetClearEnabled" ,            RenderTaskApi::SetClearEnabled },
74    { "GetClearEnabled" ,            RenderTaskApi::GetClearEnabled },
75    { "SetCullMode" ,                RenderTaskApi::SetCullMode },
76    { "GetCullMode" ,                RenderTaskApi::GetCullMode },
77    { "SetRefreshRate" ,             RenderTaskApi::SetRefreshRate },
78    { "GetRefreshRate" ,             RenderTaskApi::GetRefreshRate },
79
80 };
81
82 const unsigned int RenderTaskFunctionTableCount = sizeof(RenderTaskFunctionTable)/sizeof(RenderTaskFunctionTable[0]);
83 } //un-named space
84
85
86 RenderTaskWrapper::RenderTaskWrapper( const Dali::RenderTask& renderTask, GarbageCollectorInterface& gc )
87 :  HandleWrapper(  BaseWrappedObject::RENDER_TASK , renderTask, gc )
88 {
89     mRenderTask = renderTask;
90 }
91
92 v8::Handle<v8::Object> RenderTaskWrapper::WrapRenderTask(v8::Isolate* isolate, const Dali::RenderTask& renderTask )
93 {
94   v8::EscapableHandleScope handleScope( isolate );
95   v8::Local<v8::ObjectTemplate> objectTemplate;
96
97   objectTemplate = GetRenderTaskTemplate( isolate);
98
99   // create an instance of the template
100   v8::Local<v8::Object> localObject = objectTemplate->NewInstance();
101
102   // create the RenderTask wrapper
103   RenderTaskWrapper* pointer =  new RenderTaskWrapper( renderTask, Dali::V8Plugin::DaliWrapper::Get().GetDaliGarbageCollector() );
104
105   // assign the JavaScript object to the wrapper.
106   pointer->SetJavascriptObject( isolate, localObject );
107
108   return handleScope.Escape( localObject );
109 }
110
111 v8::Local<v8::ObjectTemplate> RenderTaskWrapper::GetRenderTaskTemplate( v8::Isolate* isolate)
112 {
113   v8::EscapableHandleScope handleScope( isolate );
114   v8::Local<v8::ObjectTemplate> objectTemplate;
115
116   if( mRenderTaskTemplate.IsEmpty() )
117   {
118     objectTemplate = MakeRenderTaskTemplate( isolate );
119     mRenderTaskTemplate.Reset( isolate, objectTemplate );
120   }
121   else
122   {
123     // get the object template
124     objectTemplate = v8::Local<v8::ObjectTemplate>::New( isolate, mRenderTaskTemplate );
125   }
126   return handleScope.Escape( objectTemplate );
127 }
128
129 v8::Handle<v8::ObjectTemplate> RenderTaskWrapper::MakeRenderTaskTemplate( v8::Isolate* isolate )
130 {
131   v8::EscapableHandleScope handleScope( isolate );
132
133   v8::Local<v8::ObjectTemplate> objTemplate = v8::ObjectTemplate::New();
134
135   // property handle intercepts property getters and setters and signals
136   HandleWrapper::AddInterceptsToTemplate( isolate, objTemplate );
137
138   objTemplate->SetInternalFieldCount( BaseWrappedObject::FIELD_COUNT );
139
140   // add our function properties
141   ObjectTemplateHelper::InstallFunctions( isolate, objTemplate, RenderTaskFunctionTable, RenderTaskFunctionTableCount );
142
143   return handleScope.Escape( objTemplate );
144 }
145
146
147 RenderTask RenderTaskWrapper::GetRenderTask()
148 {
149   return mRenderTask;
150 }
151
152
153 } // namespace V8Plugin
154
155 } // namespace Dali