X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=adaptors%2Fcommon%2Fapplication-impl.cpp;h=590297c86b2043754320df076ac3acc9cc9a4447;hb=ecca9a6b2bab7cdeac8763d2f6be63e1b371d768;hp=21fda5ea0acefc2700c1b3d547768fd93d7c7b44;hpb=c0cefe16f3321581dfaeb88bb6e60bcb7801d355;p=platform%2Fcore%2Fuifw%2Fdali-adaptor.git diff --git a/adaptors/common/application-impl.cpp b/adaptors/common/application-impl.cpp index 21fda5e..590297c 100644 --- a/adaptors/common/application-impl.cpp +++ b/adaptors/common/application-impl.cpp @@ -20,18 +20,20 @@ // EXTERNAL INCLUDES #include -#include // INTERNAL INCLUDES +#include #include #include +#include +#include namespace Dali { -namespace SlpPlatform +namespace TizenPlatform { -class SlpPlatformAbstraction; +class TizenPlatformAbstraction; } namespace Integration @@ -45,17 +47,6 @@ namespace Internal namespace Adaptor { -namespace -{ -// Defaults taken from H2 device -const unsigned int DEFAULT_WINDOW_WIDTH = 480; -const unsigned int DEFAULT_WINDOW_HEIGHT = 800; -const float DEFAULT_HORIZONTAL_DPI = 220; -const float DEFAULT_VERTICAL_DPI = 217; - -boost::thread_specific_ptr gThreadLocalApplication; -} - ApplicationPtr Application::New( int* argc, char **argv[], @@ -67,28 +58,30 @@ ApplicationPtr Application::New( return application; } -Application::Application( - int* argc, - char** argv[], - const std::string& name, - const DeviceLayout& baseLayout, - Dali::Application::WINDOW_MODE windowMode) -: mFramework(NULL), - mCommandLineOptions(NULL), - mAdaptor(NULL), +Application::Application( int* argc, char** argv[], const std::string& name, const DeviceLayout& baseLayout, Dali::Application::WINDOW_MODE windowMode) +: mInitSignal(), + mTerminateSignal(), + mPauseSignal(), + mResumeSignal(), + mResetSignal(), + mResizeSignal(), + mAppControlSignal(), + mLanguageChangedSignal(), + mRegionChangedSignal(), + mBatteryLowSignal(), + mMemoryLowSignal(), + mEventLoop( NULL ), + mFramework( NULL ), + mCommandLineOptions( NULL ), + mSingletonService( SingletonService::New() ), + mAdaptor( NULL ), mWindow(), mWindowMode( windowMode ), - mName(name), - mInitialized(false), - mBaseLayout(baseLayout), + mName( name ), + mInitialized( false ), + mBaseLayout( baseLayout ), mSlotDelegate( this ) { - // make sure we don't create the local thread application instance twice - DALI_ASSERT_ALWAYS(gThreadLocalApplication.get() == NULL && "Cannot create more than one Application per thread" ); - - // reset is used to store a new value associated with this thread - gThreadLocalApplication.reset(this); - mCommandLineOptions = new CommandLineOptions(argc, argv); mFramework = new Framework(*this, argc, argv, name); @@ -96,24 +89,22 @@ Application::Application( Application::~Application() { + mSingletonService.UnregisterAll(); + delete mFramework; delete mCommandLineOptions; delete mAdaptor; mWindow.Reset(); - gThreadLocalApplication.release(); } void Application::CreateWindow() { -#ifndef __arm__ - PositionSize windowPosition(0, 0, DEFAULT_WINDOW_WIDTH, DEFAULT_WINDOW_HEIGHT); -#else - PositionSize windowPosition(0, 0, 0, 0); // this will use full screen -#endif - if (mCommandLineOptions->stageWidth > 0 && mCommandLineOptions->stageHeight > 0) + PositionSize windowPosition(0, 0, 0, 0); // this will use full screen + + if( mCommandLineOptions->stageWidth > 0 && mCommandLineOptions->stageHeight > 0 ) { // let the command line options over ride - windowPosition = PositionSize(0,0,mCommandLineOptions->stageWidth,mCommandLineOptions->stageHeight); + windowPosition = PositionSize( 0, 0, mCommandLineOptions->stageWidth, mCommandLineOptions->stageHeight ); } mWindow = Dali::Window::New( windowPosition, mName, mWindowMode == Dali::Application::TRANSPARENT ); @@ -123,24 +114,15 @@ void Application::CreateAdaptor() { DALI_ASSERT_ALWAYS( mWindow && "Window required to create adaptor" ); - mAdaptor = &Dali::Adaptor::New( mWindow, mBaseLayout); - - // Allow DPI to be overridden from command line. - unsigned int hDPI=DEFAULT_HORIZONTAL_DPI; - unsigned int vDPI=DEFAULT_VERTICAL_DPI; - - std::string dpiStr = mCommandLineOptions->stageDPI; - if(!dpiStr.empty()) - { - sscanf(dpiStr.c_str(), "%ux%u", &hDPI, &vDPI); - } - Internal::Adaptor::Adaptor::GetImplementation( *mAdaptor ).SetDpi(hDPI, vDPI); + mAdaptor = &Dali::Adaptor::New( mWindow, mBaseLayout, mContextLossConfiguration ); mAdaptor->ResizedSignal().Connect( mSlotDelegate, &Application::OnResize ); } -void Application::MainLoop() +void Application::MainLoop(Dali::Configuration::ContextLoss configuration) { + mContextLossConfiguration = configuration; + // Run the application mFramework->Run(); } @@ -154,7 +136,7 @@ void Application::Lower() void Application::Quit() { // Actually quit the application. - AddIdle(boost::bind(&Application::QuitFromMainLoop, this)); + AddIdle( MakeCallback( this, &Application::QuitFromMainLoop ) ); } void Application::QuitFromMainLoop() @@ -162,7 +144,7 @@ void Application::QuitFromMainLoop() mAdaptor->Stop(); Dali::Application application(this); - mTerminateSignalV2.Emit( application ); + mTerminateSignal.Emit( application ); mFramework->Quit(); // This will trigger OnTerminate(), below, after the main loop has completed. @@ -171,7 +153,7 @@ void Application::QuitFromMainLoop() void Application::OnInit() { - mFramework->AddAbortCallback(boost::bind(&Application::QuitFromMainLoop, this)); + mFramework->AddAbortCallback( MakeCallback( this, &Application::QuitFromMainLoop ) ); CreateWindow(); CreateAdaptor(); @@ -198,11 +180,21 @@ void Application::OnInit() mInitialized = true; - // in default, auto hide indicator mode - mWindow.ShowIndicator(Dali::Window::AUTO); + // Wire up the LifecycleController + Dali::LifecycleController lifecycleController = Dali::LifecycleController::Get(); + + InitSignal().Connect( &GetImplementation( lifecycleController ), &LifecycleController::OnInit ); + TerminateSignal().Connect( &GetImplementation( lifecycleController ), &LifecycleController::OnTerminate ); + 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); - mInitSignalV2.Emit( application ); + mInitSignal.Emit( application ); + + Internal::Adaptor::Adaptor::GetImplementation( *mAdaptor ).GetCore().SceneCreated(); } void Application::OnTerminate() @@ -218,14 +210,14 @@ void Application::OnPause() { mAdaptor->Pause(); Dali::Application application(this); - mPauseSignalV2.Emit( application ); + mPauseSignal.Emit( application ); } void Application::OnResume() { mAdaptor->Resume(); Dali::Application application(this); - mResumeSignalV2.Emit( application ); + mResumeSignal.Emit( application ); } void Application::OnReset() @@ -235,44 +227,59 @@ void Application::OnReset() * because Application class already handled initialization in OnInit(), OnReset do nothing. */ Dali::Application application(this); - mResetSignalV2.Emit( application ); + mResetSignal.Emit( application ); mWindow.Raise(); } +void Application::OnAppControl(void *data) +{ + Dali::Application application(this); + mAppControlSignal.Emit( application , data ); +} + void Application::OnLanguageChanged() { mAdaptor->NotifyLanguageChanged(); } -void Application::OnResize(Dali::Adaptor& adaptor) +void Application::OnRegionChanged() { Dali::Application application(this); - mResizeSignalV2.Emit( application ); + mRegionChangedSignal.Emit( application ); } -bool Application::AddIdle(boost::function callBack) +void Application::OnBatteryLow() { - return mAdaptor->AddIdle(callBack); + Dali::Application application(this); + mBatteryLowSignal.Emit( application ); } -Dali::Adaptor& Application::GetAdaptor() +void Application::OnMemoryLow() { - return *mAdaptor; + Dali::Application application(this); + mMemoryLowSignal.Emit( application ); } -Dali::Window Application::GetWindow() +void Application::OnResize(Dali::Adaptor& adaptor) { - return mWindow; + Dali::Application application(this); + mResizeSignal.Emit( application ); } -Dali::Application Application::Get() +bool Application::AddIdle( CallbackBase* callback ) { - DALI_ASSERT_ALWAYS( gThreadLocalApplication.get() != NULL && "Application not instantiated" ); + return mAdaptor->AddIdle( callback ); +} - Dali::Application application(gThreadLocalApplication.get()); +Dali::Adaptor& Application::GetAdaptor() +{ + return *mAdaptor; +} - return application; +Dali::Window Application::GetWindow() +{ + return mWindow; } const std::string& Application::GetTheme() @@ -307,6 +314,20 @@ float Application::GetStereoBase() const return Internal::Adaptor::Adaptor::GetImplementation( *mAdaptor ).GetStereoBase(); } + +void Application::ReplaceWindow(PositionSize windowPosition, const std::string& name) +{ + Dali::Window newWindow = Dali::Window::New( windowPosition, name, mWindowMode == Dali::Application::TRANSPARENT ); + Window& windowImpl = GetImplementation(newWindow); + windowImpl.SetAdaptor(*mAdaptor); + newWindow.ShowIndicator(Dali::Window::INVISIBLE); + Dali::RenderSurface* renderSurface = windowImpl.GetSurface(); + + Any nativeWindow = newWindow.GetNativeHandle(); + Internal::Adaptor::Adaptor::GetImplementation( *mAdaptor ).ReplaceSurface(nativeWindow, *renderSurface); + mWindow = newWindow; +} + } // namespace Adaptor } // namespace Internal