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/adaptor-impl.h>
27 #include <dali/internal/adaptor/common/lifecycle-observer.h>
38 uint32_t SceneHolder::mSceneHolderCounter = 0;
40 class SceneHolder::SceneHolderLifeCycleObserver : public LifeCycleObserver
44 SceneHolderLifeCycleObserver(Adaptor*& adaptor)
49 private: // Adaptor::LifeCycleObserver interface
51 void OnStart() override {};
52 void OnPause() override {};
53 void OnResume() override {};
54 void OnStop() override {};
55 void OnDestroy() override
65 SceneHolder::SceneHolder()
66 : mLifeCycleObserver( new SceneHolderLifeCycleObserver( mAdaptor ) ),
67 mId( mSceneHolderCounter++ ),
70 mAdaptorStarted( false ),
75 SceneHolder::~SceneHolder()
79 mAdaptor->RemoveObserver( *mLifeCycleObserver.get() );
80 mAdaptor->RemoveWindow( this );
85 void SceneHolder::Add( Dali::Actor actor )
93 void SceneHolder::Remove( Dali::Actor actor )
97 mScene.Remove( actor );
101 Dali::Layer SceneHolder::GetRootLayer() const
103 return mScene ? mScene.GetRootLayer() : Dali::Layer();
106 uint32_t SceneHolder::GetId() const
111 std::string SceneHolder::GetName() const
116 bool SceneHolder::IsVisible() const
121 Dali::Integration::Scene SceneHolder::GetScene()
126 void SceneHolder::SetSurface(Dali::RenderSurfaceInterface* surface)
128 mSurface.reset( surface );
130 mScene.SetSurface( *mSurface.get() );
132 unsigned int dpiHorizontal, dpiVertical;
133 dpiHorizontal = dpiVertical = 0;
135 mSurface->GetDpi( dpiHorizontal, dpiVertical );
136 mScene.SetDpi( Vector2( static_cast<float>( dpiHorizontal ), static_cast<float>( dpiVertical ) ) );
138 mSurface->SetAdaptor( *mAdaptor );
140 OnSurfaceSet( surface );
143 Dali::RenderSurfaceInterface* SceneHolder::GetSurface() const
145 return mSurface.get();
148 void SceneHolder::SetBackgroundColor( const Vector4& color )
152 mSurface->SetBackgroundColor( color );
156 Vector4 SceneHolder::GetBackgroundColor() const
158 return mSurface ? mSurface->GetBackgroundColor() : Vector4();
161 void SceneHolder::SetAdaptor(Dali::Adaptor& adaptor)
163 // Avoid doing this more than once
164 if( mAdaptorStarted )
169 mAdaptorStarted = true;
172 PositionSize positionSize = mSurface->GetPositionSize();
173 mScene = Dali::Integration::Scene::New( Vector2( positionSize.width, positionSize.height ) );
174 mScene.SetSurface( *mSurface.get() );
176 Internal::Adaptor::Adaptor& adaptorImpl = Internal::Adaptor::Adaptor::GetImplementation( adaptor );
177 mAdaptor = &adaptorImpl;
179 // Create an observer for the adaptor lifecycle
180 mAdaptor->AddObserver( *mLifeCycleObserver );
184 unsigned int dpiHorizontal, dpiVertical;
185 dpiHorizontal = dpiVertical = 0;
187 mSurface->GetDpi( dpiHorizontal, dpiVertical );
188 mScene.SetDpi( Vector2( static_cast<float>( dpiHorizontal ), static_cast<float>( dpiVertical ) ) );
190 mSurface->SetAdaptor( *mAdaptor );
193 OnAdaptorSet( adaptor );
196 void SceneHolder::Pause()
201 void SceneHolder::Resume()