Merge "Support multiple surfaces for partial update" into devel/master
[platform/core/uifw/dali-adaptor.git] / dali / internal / adaptor / common / application-impl.cpp
old mode 100755 (executable)
new mode 100644 (file)
index 29e1b84..f54c4cf
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2020 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -19,7 +19,9 @@
 #include <dali/internal/adaptor/common/application-impl.h>
 
 // EXTERNAL INCLUDES
+#include <dali/public-api/object/object-registry.h>
 #include <dali/integration-api/debug.h>
+#include <dali/devel-api/common/singleton-service.h>
 
 // INTERNAL INCLUDES
 #include <dali/devel-api/adaptor-framework/style-monitor.h>
@@ -27,7 +29,6 @@
 #include <dali/internal/adaptor/common/adaptor-impl.h>
 #include <dali/internal/system/common/command-line-options.h>
 #include <dali/internal/adaptor/common/framework.h>
-#include <dali/internal/system/common/singleton-service-impl.h>
 #include <dali/internal/adaptor/common/lifecycle-controller-impl.h>
 #include <dali/internal/window-system/common/window-impl.h>
 #include <dali/internal/window-system/common/window-render-surface.h>
@@ -55,13 +56,6 @@ namespace Internal
 namespace Adaptor
 {
 
-namespace
-{
-
-const float DEFAULT_STEREO_BASE( 65.0f );
-
-} // unnamed namespace
-
 ApplicationPtr Application::gPreInitializedApplication( NULL );
 
 ApplicationPtr Application::New(
@@ -80,14 +74,11 @@ void Application::PreInitialize( int* argc, char** argv[] )
 {
   if( !gPreInitializedApplication )
   {
+    Dali::TextAbstraction::FontClientPreInitialize();
+
     gPreInitializedApplication = new Application ( argc, argv, "", Dali::Application::OPAQUE, PositionSize(), Framework::NORMAL );
     gPreInitializedApplication->CreateWindow();    // Only create window
     gPreInitializedApplication->mLaunchpadState = Launchpad::PRE_INITIALIZED;
-
-    //Make DefaultFontDescription cached
-    Dali::TextAbstraction::FontClient fontClient = Dali::TextAbstraction::FontClient::Get();
-    Dali::TextAbstraction::FontDescription defaultFontDescription;
-    fontClient.GetDefaultPlatformFontDescription( defaultFontDescription );
   }
 }
 
@@ -98,30 +89,22 @@ Application::Application( int* argc, char** argv[], const std::string& styleshee
   mPauseSignal(),
   mResumeSignal(),
   mResetSignal(),
-  mResizeSignal(),
   mAppControlSignal(),
   mLanguageChangedSignal(),
   mRegionChangedSignal(),
-  mBatteryLowSignal(),
-  mMemoryLowSignal(),
   mEventLoop( nullptr ),
   mFramework( nullptr ),
-  mContextLossConfiguration( Configuration::APPLICATION_DOES_NOT_HANDLE_CONTEXT_LOSS ),
   mCommandLineOptions( nullptr ),
-  mSingletonService( SingletonService::New() ),
   mAdaptorBuilder( nullptr ),
   mAdaptor( nullptr ),
   mMainWindow(),
   mMainWindowMode( windowMode ),
   mMainWindowName(),
-  mMainWindowReplaced( false ),
   mStylesheet( stylesheet ),
   mEnvironmentOptions(),
   mWindowPositionSize( positionSize ),
   mLaunchpadState( Launchpad::NONE ),
-  mSlotDelegate( this ),
-  mViewMode( MONO ),
-  mStereoBase( DEFAULT_STEREO_BASE )
+  mSlotDelegate( this )
 {
   // Get mName from environment options
   mMainWindowName = mEnvironmentOptions.GetWindowName();
@@ -138,7 +121,12 @@ Application::Application( int* argc, char** argv[], const std::string& styleshee
 
 Application::~Application()
 {
-  mSingletonService.UnregisterAll();
+  SingletonService service = SingletonService::Get();
+  // Note this can be false i.e. if Application has never created a Core instance
+  if( service )
+  {
+    service.UnregisterAll();
+  }
 
   mMainWindow.Reset();
   delete mAdaptor;
@@ -167,7 +155,7 @@ void Application::CreateWindow()
 
   const std::string& windowClassName = mEnvironmentOptions.GetWindowClassName();
 
-  Internal::Adaptor::Window* window = Internal::Adaptor::Window::New( mWindowPositionSize, mMainWindowName, windowClassName, mMainWindowMode == Dali::Application::TRANSPARENT );
+  Internal::Adaptor::Window* window = Internal::Adaptor::Window::New(mWindowPositionSize, mMainWindowName, windowClassName, mMainWindowMode == Dali::Application::TRANSPARENT);
   mMainWindow = Dali::Window( window );
 
   // Quit the application when the window is closed
@@ -182,9 +170,7 @@ void Application::CreateAdaptor()
 
   Integration::SceneHolder sceneHolder = Integration::SceneHolder( &Dali::GetImplementation( mMainWindow ) );
 
-  mAdaptor = Adaptor::New( graphicsFactory, sceneHolder, mContextLossConfiguration, &mEnvironmentOptions );
-
-  mAdaptor->ResizedSignal().Connect( mSlotDelegate, &Application::OnResize );
+  mAdaptor = Adaptor::New( graphicsFactory, sceneHolder, &mEnvironmentOptions );
 
   Adaptor::GetImplementation( *mAdaptor ).SetUseRemoteSurface( mUseRemoteSurface );
 }
@@ -194,10 +180,8 @@ void Application::CreateAdaptorBuilder()
   mAdaptorBuilder = new AdaptorBuilder();
 }
 
-void Application::MainLoop(Dali::Configuration::ContextLoss configuration)
+void Application::MainLoop()
 {
-  mContextLossConfiguration = configuration;
-
   // Run the application
   mFramework->Run();
 }
@@ -252,7 +236,6 @@ void Application::OnInit()
   PauseSignal().Connect( &GetImplementation( lifecycleController ), &LifecycleController::OnPause );
   ResumeSignal().Connect( &GetImplementation( lifecycleController ), &LifecycleController::OnResume );
   ResetSignal().Connect( &GetImplementation( lifecycleController ), &LifecycleController::OnReset );
-  ResizeSignal().Connect( &GetImplementation( lifecycleController ), &LifecycleController::OnResize );
   LanguageChangedSignal().Connect( &GetImplementation( lifecycleController ), &LifecycleController::OnLanguageChanged );
 
   Dali::Application application(this);
@@ -334,16 +317,12 @@ void Application::OnRegionChanged()
 void Application::OnBatteryLow( Dali::DeviceStatus::Battery::Status status )
 {
   Dali::Application application(this);
-  mBatteryLowSignal.Emit( application );
-
   mLowBatterySignal.Emit( status );
 }
 
 void Application::OnMemoryLow( Dali::DeviceStatus::Memory::Status status )
 {
   Dali::Application application(this);
-  mMemoryLowSignal.Emit( application );
-
   mLowMemorySignal.Emit( status );
 }
 
@@ -363,18 +342,6 @@ void Application::OnSurfaceCreated( Any newSurface )
 
 void Application::OnSurfaceDestroyed( Any surface )
 {
-  void* windowToDelete = AnyCast< void* >( surface );
-  void* oldWindow = AnyCast< void* >( mMainWindow.GetNativeHandle() );
-  if( oldWindow == windowToDelete )
-  {
-    mAdaptor->DeleteSurface( mAdaptor->GetSurface() );
-  }
-}
-
-void Application::OnResize(Dali::Adaptor& adaptor)
-{
-  Dali::Application application(this);
-  mResizeSignal.Emit( application );
 }
 
 bool Application::AddIdle( CallbackBase* callback, bool hasReturnValue )
@@ -392,54 +359,24 @@ std::string Application::GetLanguage() const
   return mFramework->GetLanguage();
 }
 
-Dali::Adaptor& Application::GetAdaptor()
-{
-  return *mAdaptor;
-}
-
-Dali::Window Application::GetWindow()
+Dali::ObjectRegistry Application::GetObjectRegistry() const
 {
-  // Changed to return a different window handle after ReplaceWindow is called
-  // just for backward compatibility to make the test case pass
-  if ( mMainWindowReplaced )
-  {
-    Internal::Adaptor::Window* window = Internal::Adaptor::Window::New( PositionSize(), "ReplacedWindow", "", false );
-    return Dali::Window( window );
-  }
-  else
+  Dali::ObjectRegistry objectRegistry;
+  if( mAdaptor )
   {
-    return mMainWindow;
+    objectRegistry = mAdaptor->GetObjectRegistry();
   }
+  return objectRegistry;
 }
 
-// Stereoscopy
-
-void Application::SetViewMode( ViewMode viewMode )
-{
-  mViewMode = viewMode;
-}
-
-ViewMode Application::GetViewMode() const
-{
-  return mViewMode;
-}
-
-void Application::SetStereoBase( float stereoBase )
-{
-  mStereoBase = stereoBase;
-}
-
-float Application::GetStereoBase() const
+Dali::Adaptor& Application::GetAdaptor()
 {
-  return mStereoBase;
+  return *mAdaptor;
 }
 
-void Application::ReplaceWindow( const PositionSize& positionSize, const std::string& name )
+Dali::Window Application::GetWindow()
 {
-  // This API is kept just for backward compatibility to make the test case pass.
-
-  mMainWindowReplaced = true;
-  OnResize( *mAdaptor );
+  return mMainWindow;
 }
 
 std::string Application::GetResourcePath()