Change RenderTaskList to behave like any other SceneGraph object
[platform/core/uifw/dali-core.git] / dali / internal / event / common / system-overlay-impl.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/event/common/system-overlay-impl.h>
20
21 // INTERNAL INCLUDES
22 #include <dali/public-api/common/constants.h>
23 #include <dali/internal/event/actors/camera-actor-impl.h>
24 #include <dali/internal/event/actors/layer-impl.h>
25 #include <dali/internal/event/actors/layer-list.h>
26 #include <dali/internal/event/common/event-thread-services.h>
27 #include <dali/internal/event/render-tasks/render-task-list-impl.h>
28
29 namespace Dali
30 {
31
32 namespace Internal
33 {
34
35 SystemOverlay* SystemOverlay::New( EventThreadServices& eventThreadServices )
36 {
37   SystemOverlay* overlay = new SystemOverlay( eventThreadServices );
38
39   overlay->Initialize();
40
41   return overlay;
42 }
43
44 SystemOverlay::~SystemOverlay()
45 {
46   if ( mRootLayer )
47   {
48     // we are closing down so just delete the root, no point emit disconnect
49     // signals or send messages to update
50     mRootLayer.Reset();
51   }
52 }
53
54 void SystemOverlay::Add( Actor& actor )
55 {
56   CreateRootLayer();
57
58   mRootLayer->Add( actor );
59 }
60
61 void SystemOverlay::Remove( Actor& actor )
62 {
63   if ( mRootLayer )
64   {
65     mRootLayer->Remove( actor );
66   }
67 }
68
69 void SystemOverlay::SetOverlayRenderTasks(RenderTaskList& taskList)
70 {
71   mOverlayRenderTaskList = &taskList;
72 }
73
74 RenderTaskList& SystemOverlay::GetOverlayRenderTasks()
75 {
76   return *mOverlayRenderTaskList;
77 }
78
79 void SystemOverlay::SetSize( float width, float height )
80 {
81   mSize = Vector2( width, height );
82
83   if ( mRootLayer )
84   {
85     mRootLayer->SetSize( mSize.width, mSize.height );
86   }
87
88   if ( mDefaultCameraActor )
89   {
90     // Sets the default perspective projection for the given size.
91     mDefaultCameraActor->SetPerspectiveProjection( mSize );
92   }
93 }
94
95 LayerList& SystemOverlay::GetLayerList()
96 {
97   return *mLayerList;
98 }
99
100 Actor& SystemOverlay::GetDefaultRootActor()
101 {
102   CreateRootLayer();
103
104   return *mRootLayer;
105 }
106
107 CameraActor& SystemOverlay::GetDefaultCameraActor()
108 {
109   CreateDefaultCameraActor();
110
111   return *mDefaultCameraActor;
112 }
113
114 SystemOverlay::SystemOverlay( EventThreadServices& eventThreadServices )
115 : mEventThreadServices( eventThreadServices )
116 {
117 }
118
119 void SystemOverlay::Initialize()
120 {
121   // Create the ordered list of layers
122   mLayerList = LayerList::New( mEventThreadServices.GetUpdateManager() );
123 }
124
125 void SystemOverlay::CreateRootLayer()
126 {
127   // Lazy initialization; SystemOverlay may never be used
128   if ( !mRootLayer )
129   {
130     mRootLayer = Layer::NewRoot( *mLayerList, mEventThreadServices.GetUpdateManager() );
131     mRootLayer->SetName("SystemOverlayRoot");
132     mRootLayer->SetSize( mSize.width, mSize.height );
133   }
134 }
135
136 void SystemOverlay::CreateDefaultCameraActor()
137 {
138   // Lazy initialization; SystemOverlay may never be used
139   if ( !mDefaultCameraActor )
140   {
141     // Creates a default camera with a default perspective projection.
142     mDefaultCameraActor = CameraActor::New( mSize );
143     mDefaultCameraActor->SetParentOrigin( ParentOrigin::CENTER );
144
145     Add( *mDefaultCameraActor );
146   }
147 }
148
149 } // namespace Internal
150
151 } // namespace Dali