Merge "Add TouchDelegateArea property." into devel/master
[platform/core/uifw/dali-core.git] / dali / internal / update / render-tasks / scene-graph-render-task-list.cpp
1 /*
2  * Copyright (c) 2018 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 <dali/internal/update/render-tasks/scene-graph-render-task-list.h>
20
21 // INTERNAL INCLUDES
22 #include <dali/internal/common/memory-pool-object-allocator.h>
23
24 namespace //Unnamed namespace
25 {
26
27 //Memory pool used to allocate new RenderTaskLists. Memory used by this pool will be released when shutting down DALi
28 Dali::Internal::MemoryPoolObjectAllocator<Dali::Internal::SceneGraph::RenderTaskList> gRenderTaskListMemoryPool;
29
30 } // unnamed namespace
31
32 namespace Dali
33 {
34
35 namespace Internal
36 {
37
38 namespace SceneGraph
39 {
40
41 RenderTaskList* RenderTaskList::New()
42 {
43   return new ( gRenderTaskListMemoryPool.AllocateRawThreadSafe() ) RenderTaskList();
44 }
45
46 RenderTaskList::RenderTaskList()
47 : mNotificationObject( nullptr ),
48   mRenderMessageDispatcher( nullptr )
49 {
50 }
51
52 RenderTaskList::~RenderTaskList()
53 {
54 }
55
56 void RenderTaskList::operator delete( void* ptr )
57 {
58   gRenderTaskListMemoryPool.FreeThreadSafe( static_cast<RenderTaskList*>( ptr ) );
59 }
60
61 void RenderTaskList::SetRenderMessageDispatcher( RenderMessageDispatcher* renderMessageDispatcher )
62 {
63   mRenderMessageDispatcher = renderMessageDispatcher;
64 }
65
66 void RenderTaskList::AddTask( OwnerPointer< RenderTask >& newTask )
67 {
68   DALI_ASSERT_DEBUG( newTask != NULL && "SceneGraph RenderTask is null");
69   DALI_ASSERT_DEBUG( mRenderMessageDispatcher != NULL && "RenderMessageDispatcher is null");
70
71   newTask->Initialize( *mRenderMessageDispatcher );
72   // mRenderTasks container takes ownership
73   mRenderTasks.PushBack( newTask.Release() );
74 }
75
76 void RenderTaskList::RemoveTask( RenderTask* task )
77 {
78   RenderTaskContainer::ConstIterator end = mRenderTasks.End();
79   for ( RenderTaskContainer::Iterator iter = mRenderTasks.Begin(); iter != end; ++iter )
80   {
81     if ( *iter == task )
82     {
83       // Destroy the task
84       mRenderTasks.Erase( iter );
85
86       break; // we're finished
87     }
88   }
89 }
90
91 uint32_t RenderTaskList::GetTaskCount()
92 {
93   return static_cast<uint32_t>( mRenderTasks.Count() );
94 }
95
96 RenderTaskList::RenderTaskContainer& RenderTaskList::GetTasks()
97 {
98   return mRenderTasks;
99 }
100
101 const RenderTaskList::RenderTaskContainer& RenderTaskList::GetTasks() const
102 {
103   return mRenderTasks;
104 }
105
106 void RenderTaskList::SetCompleteNotificationInterface( CompleteNotificationInterface* object )
107 {
108
109   mNotificationObject = object;
110 }
111
112 CompleteNotificationInterface* RenderTaskList::GetCompleteNotificationInterface()
113 {
114
115   return mNotificationObject;
116 }
117
118 } // namespace SceneGraph
119
120 } // namespace Internal
121
122 } // namespace Dali