X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=adaptors%2Fcommon%2Fapplication-impl.cpp;h=d7bf4f14d1331795e02a9b52412b37c57b05390a;hb=3735e8b0ab7959c919c4f0f699bb4607e1807afd;hp=1be56ddd1d96d42f95949e7e3923d0f2f4602118;hpb=9977d06a48db07fbbc0ada24b0a767c9217b6c83;p=platform%2Fcore%2Fuifw%2Fdali-adaptor.git diff --git a/adaptors/common/application-impl.cpp b/adaptors/common/application-impl.cpp old mode 100755 new mode 100644 index 1be56dd..d7bf4f1 --- a/adaptors/common/application-impl.cpp +++ b/adaptors/common/application-impl.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016 Samsung Electronics Co., Ltd. + * Copyright (c) 2017 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. @@ -48,19 +48,34 @@ namespace Internal namespace Adaptor { +ApplicationPtr Application::gPreInitializedApplication( NULL ); + ApplicationPtr Application::New( int* argc, char **argv[], const std::string& stylesheet, Dali::Application::WINDOW_MODE windowMode, + const PositionSize& positionSize, Framework::Type applicationType) { - ApplicationPtr application ( new Application (argc, argv, stylesheet, windowMode, applicationType ) ); + ApplicationPtr application ( new Application (argc, argv, stylesheet, windowMode, positionSize, applicationType ) ); return application; } +void Application::PreInitialize( int* argc, char** argv[] ) +{ + if( !gPreInitializedApplication ) + { + gPreInitializedApplication = new Application ( argc, argv, "", Dali::Application::OPAQUE, PositionSize(), Framework::NORMAL ); + + gPreInitializedApplication->CreateWindow(); // Only create window + + gPreInitializedApplication->mLaunchpadState = Launchpad::PRE_INITIALIZED; + } +} + Application::Application( int* argc, char** argv[], const std::string& stylesheet, - Dali::Application::WINDOW_MODE windowMode, Framework::Type applicationType ) + Dali::Application::WINDOW_MODE windowMode, const PositionSize& positionSize, Framework::Type applicationType ) : mInitSignal(), mTerminateSignal(), mPauseSignal(), @@ -83,6 +98,8 @@ Application::Application( int* argc, char** argv[], const std::string& styleshee mName(), mStylesheet( stylesheet ), mEnvironmentOptions(), + mWindowPositionSize( positionSize ), + mLaunchpadState( Launchpad::NONE ), mSlotDelegate( this ) { // Get mName from environment options @@ -95,35 +112,45 @@ Application::Application( int* argc, char** argv[], const std::string& styleshee mCommandLineOptions = new CommandLineOptions(argc, argv); mFramework = new Framework( *this, argc, argv, applicationType ); + mUseRemoteSurface = (applicationType == Framework::WATCH); } Application::~Application() { mSingletonService.UnregisterAll(); - delete mFramework; - delete mCommandLineOptions; - delete mAdaptor; mWindow.Reset(); + delete mAdaptor; + delete mCommandLineOptions; + delete mFramework; } void Application::CreateWindow() { - PositionSize windowPosition(0, 0, 0, 0); // this will use full screen - - if( mCommandLineOptions->stageWidth > 0 && mCommandLineOptions->stageHeight > 0 ) - { - // Command line options override environment options and full screen - windowPosition = PositionSize( 0, 0, mCommandLineOptions->stageWidth, mCommandLineOptions->stageHeight ); - } - else if( mEnvironmentOptions.GetWindowWidth() && mEnvironmentOptions.GetWindowHeight() ) + if( mWindowPositionSize.width == 0 && mWindowPositionSize.height == 0 ) { - // Environment options override full screen functionality if command line arguments not provided - windowPosition = PositionSize( 0, 0, mEnvironmentOptions.GetWindowWidth(), mEnvironmentOptions.GetWindowHeight() ); + if( mCommandLineOptions->stageWidth > 0 && mCommandLineOptions->stageHeight > 0 ) + { + // Command line options override environment options and full screen + mWindowPositionSize.width = mCommandLineOptions->stageWidth; + mWindowPositionSize.height = mCommandLineOptions->stageHeight; + } + else if( mEnvironmentOptions.GetWindowWidth() && mEnvironmentOptions.GetWindowHeight() ) + { + // Environment options override full screen functionality if command line arguments not provided + mWindowPositionSize.width = mEnvironmentOptions.GetWindowWidth(); + mWindowPositionSize.height = mEnvironmentOptions.GetWindowHeight(); + } } const std::string& windowClassName = mEnvironmentOptions.GetWindowClassName(); - mWindow = Dali::Window::New( windowPosition, mName, windowClassName, mWindowMode == Dali::Application::TRANSPARENT ); + mWindow = Dali::Window::New( mWindowPositionSize, mName, windowClassName, mWindowMode == Dali::Application::TRANSPARENT ); + + int indicatorVisibleMode = mEnvironmentOptions.GetIndicatorVisibleMode(); + if( indicatorVisibleMode >= Dali::Window::INVISIBLE && indicatorVisibleMode <= Dali::Window::AUTO ) + { + GetImplementation( mWindow ).SetIndicatorVisibleMode( static_cast< Dali::Window::IndicatorVisibleMode >( indicatorVisibleMode ) ); + } // Quit the application when the window is closed GetImplementation( mWindow ).DeleteRequestSignal().Connect( mSlotDelegate, &Application::Quit ); @@ -136,6 +163,8 @@ void Application::CreateAdaptor() mAdaptor = Dali::Internal::Adaptor::Adaptor::New( mWindow, mContextLossConfiguration, &mEnvironmentOptions ); mAdaptor->ResizedSignal().Connect( mSlotDelegate, &Application::OnResize ); + + Internal::Adaptor::Adaptor::GetImplementation( *mAdaptor ).SetUseRemoteSurface( mUseRemoteSurface ); } void Application::MainLoop(Dali::Configuration::ContextLoss configuration) @@ -168,7 +197,12 @@ void Application::QuitFromMainLoop() void Application::DoInit() { - CreateWindow(); + // If an application was pre-initialized, a window was made in advance + if( mLaunchpadState == Launchpad::NONE ) + { + CreateWindow(); + } + CreateAdaptor(); // Run the adaptor @@ -195,7 +229,10 @@ void Application::DoInit() { Dali::StyleMonitor::Get().SetTheme( mStylesheet ); } +} +void Application::DoStart() +{ mAdaptor->NotifySceneCreated(); } @@ -244,6 +281,8 @@ void Application::OnInit() Dali::Application application(this); mInitSignal.Emit( application ); + + DoStart(); } void Application::OnTerminate() @@ -259,7 +298,9 @@ void Application::OnTerminate() void Application::OnPause() { - DoPause(); + // A DALi app should handle Pause/Resume events. + // DALi just delivers the framework Pause event to the application, but not actually pause DALi core. + // Pausing DALi core only occurs on the Window Hidden framework event Dali::Application application(this); mPauseSignal.Emit( application ); } @@ -270,7 +311,9 @@ void Application::OnResume() // This ensures we do not just redraw the last frame before pausing if that's not required Dali::Application application(this); mResumeSignal.Emit( application ); - DoResume(); + + // DALi just delivers the framework Resume event to the application. + // Resuming DALi core only occurs on the Window Show framework event } void Application::OnReset() @@ -302,18 +345,21 @@ void Application::OnRegionChanged() mRegionChangedSignal.Emit( application ); } -void Application::OnBatteryLow() +void Application::OnBatteryLow( Dali::DeviceStatus::Battery::Status status ) { Dali::Application application(this); mBatteryLowSignal.Emit( application ); + + mLowBatterySignal.Emit( status ); } -void Application::OnMemoryLow() +void Application::OnMemoryLow( Dali::DeviceStatus::Memory::Status status ) { Dali::Application application(this); mMemoryLowSignal.Emit( application ); -} + mLowMemorySignal.Emit( status ); +} void Application::OnResize(Dali::Adaptor& adaptor) { Dali::Application application(this); @@ -325,6 +371,16 @@ bool Application::AddIdle( CallbackBase* callback ) return mAdaptor->AddIdle( callback ); } +std::string Application::GetRegion() const +{ + return mFramework->GetRegion(); +} + +std::string Application::GetLanguage() const +{ + return mFramework->GetLanguage(); +} + Dali::Adaptor& Application::GetAdaptor() { return *mAdaptor; @@ -358,17 +414,24 @@ float Application::GetStereoBase() const } -void Application::ReplaceWindow(PositionSize windowPosition, const std::string& name) +void Application::ReplaceWindow( const PositionSize& positionSize, const std::string& name ) { - Dali::Window newWindow = Dali::Window::New( windowPosition, name, mWindowMode == Dali::Application::TRANSPARENT ); + Dali::Window newWindow = Dali::Window::New( positionSize, name, mWindowMode == Dali::Application::TRANSPARENT ); Window& windowImpl = GetImplementation(newWindow); windowImpl.SetAdaptor(*mAdaptor); - newWindow.ShowIndicator(Dali::Window::INVISIBLE); + + int indicatorVisibleMode = mEnvironmentOptions.GetIndicatorVisibleMode(); + if( indicatorVisibleMode >= Dali::Window::INVISIBLE && indicatorVisibleMode <= Dali::Window::AUTO ) + { + GetImplementation( newWindow ).SetIndicatorVisibleMode( static_cast< Dali::Window::IndicatorVisibleMode >( indicatorVisibleMode ) ); + } + Dali::RenderSurface* renderSurface = windowImpl.GetSurface(); Any nativeWindow = newWindow.GetNativeHandle(); Internal::Adaptor::Adaptor::GetImplementation( *mAdaptor ).ReplaceSurface(nativeWindow, *renderSurface); mWindow = newWindow; + mWindowPositionSize = positionSize; } std::string Application::GetResourcePath() @@ -376,6 +439,17 @@ std::string Application::GetResourcePath() return Internal::Adaptor::Framework::GetResourcePath(); } +void Application::SetStyleSheet( const std::string& stylesheet ) +{ + mStylesheet = stylesheet; +} + + +ApplicationPtr Application::GetPreInitializedApplication() +{ + return gPreInitializedApplication; +} + } // namespace Adaptor } // namespace Internal