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