2 * Copyright (c) 2019 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 <dali/integration-api/scene-holder-impl.h>
22 #include <dali/public-api/actors/actor.h>
23 #include <dali/public-api/actors/layer.h>
26 #include <dali/internal/adaptor/common/lifecycle-observer.h>
37 uint32_t SceneHolder::mSceneHolderCounter = 0;
39 class SceneHolder::SceneHolderLifeCycleObserver : public LifeCycleObserver
43 SceneHolderLifeCycleObserver(Adaptor*& adaptor)
48 private: // Adaptor::LifeCycleObserver interface
50 void OnStart() override {};
51 void OnPause() override {};
52 void OnResume() override {};
53 void OnStop() override {};
54 void OnDestroy() override
64 SceneHolder::SceneHolder()
65 : mLifeCycleObserver( new SceneHolderLifeCycleObserver( mAdaptor ) ),
66 mId( mSceneHolderCounter++ ),
69 mAdaptorStarted( false ),
74 SceneHolder::~SceneHolder()
78 mAdaptor->RemoveObserver( *mLifeCycleObserver.get() );
79 mAdaptor->RemoveWindow( this );
84 void SceneHolder::Add( Dali::Actor actor )
92 void SceneHolder::Remove( Dali::Actor actor )
96 mScene.Remove( actor );
100 Dali::Layer SceneHolder::GetRootLayer() const
102 return mScene ? mScene.GetRootLayer() : Dali::Layer();
105 uint32_t SceneHolder::GetId() const
110 std::string SceneHolder::GetName() const
115 bool SceneHolder::IsVisible() const
120 Dali::Integration::Scene SceneHolder::GetScene()
125 void SceneHolder::SetSurface(Dali::RenderSurfaceInterface* surface)
127 mSurface.reset( surface );
129 mScene.SetSurface( *mSurface.get() );
131 unsigned int dpiHorizontal, dpiVertical;
132 dpiHorizontal = dpiVertical = 0;
134 mSurface->GetDpi( dpiHorizontal, dpiVertical );
135 mScene.SetDpi( Vector2( static_cast<float>( dpiHorizontal ), static_cast<float>( dpiVertical ) ) );
137 mSurface->SetAdaptor( *mAdaptor );
139 OnSurfaceSet( surface );
142 Dali::RenderSurfaceInterface* SceneHolder::GetSurface() const
144 return mSurface.get();
147 void SceneHolder::SetBackgroundColor( Vector4 color )
151 mSurface->SetBackgroundColor( color );
155 Vector4 SceneHolder::GetBackgroundColor() const
157 return mSurface ? mSurface->GetBackgroundColor() : Vector4();
160 void SceneHolder::SetAdaptor(Dali::Adaptor& adaptor)
162 // Avoid doing this more than once
163 if( mAdaptorStarted )
168 mAdaptorStarted = true;
171 PositionSize positionSize = mSurface->GetPositionSize();
172 mScene = Dali::Integration::Scene::New( Vector2( positionSize.width, positionSize.height ) );
173 mScene.SetSurface( *mSurface.get() );
175 Internal::Adaptor::Adaptor& adaptorImpl = Internal::Adaptor::Adaptor::GetImplementation( adaptor );
176 mAdaptor = &adaptorImpl;
178 // Create an observer for the adaptor lifecycle
179 mAdaptor->AddObserver( *mLifeCycleObserver );
183 unsigned int dpiHorizontal, dpiVertical;
184 dpiHorizontal = dpiVertical = 0;
186 mSurface->GetDpi( dpiHorizontal, dpiVertical );
187 mScene.SetDpi( Vector2( static_cast<float>( dpiHorizontal ), static_cast<float>( dpiVertical ) ) );
189 mSurface->SetAdaptor( *mAdaptor );
192 OnAdaptorSet( adaptor );
195 void SceneHolder::Pause()
200 void SceneHolder::Resume()