X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali%2Finternal%2Fsystem%2Ftizen-wayland%2Fwidget-application-impl-tizen.cpp;h=2b4b480d12e05d9e2238f12eb9717878a6f9c3e3;hb=6aa19cc13d3469d294bf0c30ee0c89f949ab5841;hp=7c12ef92aa8659d716439002b44a4ece7c9c5fc3;hpb=895b73b91ff5845b16074083d0ae3f61782e7603;p=platform%2Fcore%2Fuifw%2Fdali-adaptor.git diff --git a/dali/internal/system/tizen-wayland/widget-application-impl-tizen.cpp b/dali/internal/system/tizen-wayland/widget-application-impl-tizen.cpp index 7c12ef9..2b4b480 100644 --- a/dali/internal/system/tizen-wayland/widget-application-impl-tizen.cpp +++ b/dali/internal/system/tizen-wayland/widget-application-impl-tizen.cpp @@ -21,12 +21,13 @@ // INTERNAL INCLUDE #include #include +#include +#include #include -#ifdef WIDGET_SUPPOERTED +// EXTERNAL INCLUDES #include #include -#endif namespace Dali { @@ -34,7 +35,6 @@ namespace Dali namespace Internal { -#ifdef WIDGET_SUPPOERTED namespace { @@ -47,9 +47,26 @@ int OnInstanceInit(widget_base_instance_h instanceHandle, bundle *content, int w Dali::Internal::Adaptor::WidgetApplicationTizen* application = static_cast(classData); - // After DALi can support multi window, this part should be changed. - Dali::Window window = application->GetWindow(); - window.ShowIndicator(Dali::Window::INVISIBLE); + Dali::Window window; + if( application->GetWidgetCount() == 0) + { + window = application->GetWindow(); + DALI_LOG_RELEASE_INFO("Widget Instance use default Window(win:%p), so it need to bind widget (%dx%d) (id:%s) \n",window, w, h, std::string(id).c_str()); + } + else + { + if(Internal::Adaptor::Adaptor::GetImplementation(application->GetAdaptor()).IsMultipleWindowSupported()) + { + window = Dali::Window::New(PositionSize(0,0,w,h) ,"", false); + DALI_LOG_RELEASE_INFO("Widget Instance create new Window (win:%p, cnt:%d) (%dx%d) (id:%s )\n", window, application->GetWidgetCount(), w, h, std::string(id).c_str()); + } + else + { + DALI_LOG_ERROR("This device can't support Multi Widget. it means UI may not be properly drawn."); + window = application->GetWindow(); + } + } + Any nativeHandle = window.GetNativeHandle(); #ifdef ECORE_WAYLAND2 @@ -65,7 +82,7 @@ int OnInstanceInit(widget_base_instance_h instanceHandle, bundle *content, int w Dali::WidgetApplication::CreateWidgetFunction createFunction = pair.second; Dali::Widget widgetInstance = createFunction( pair.first ); - application->AddWidget( instanceHandle, widgetInstance ); + application->AddWidget( instanceHandle, widgetInstance , window ); Dali::Internal::Adaptor::Widget::Impl *widgetImpl = new Dali::Internal::Adaptor::WidgetImplTizen(instanceHandle); Internal::Adaptor::GetImplementation(widgetInstance).SetImpl( widgetImpl ); @@ -158,8 +175,7 @@ int OnInstanceResize(widget_base_instance_h instanceHandle, int w, int h, void * // Get Dali::Widget instance. Dali::Widget widgetInstance = application->GetWidget( instanceHandle ); - - Dali::Window window = application->GetWindow(); + Dali::Window window = application->GetWindowFromWidget( instanceHandle ); window.SetSize( Dali::Window::WindowSize(w, h) ); Internal::Adaptor::GetImplementation(widgetInstance).OnResize(window); @@ -192,15 +208,18 @@ int OnInstanceUpdate(widget_base_instance_h instanceHandle, bundle *content, int return 0; } -} // anonymous namespace +unsigned int GetEnvWidgetRenderRefreshRate() +{ + const char* envVariable = std::getenv( DALI_WIDGET_REFRESH_RATE ); -#endif + return envVariable ? std::atoi( envVariable ) : 1u; // Default 60 fps +} + +} // anonymous namespace namespace Adaptor { -#ifdef WIDGET_SUPPOERTED - WidgetApplicationPtr WidgetApplicationTizen::New( int* argc, char **argv[], @@ -242,9 +261,11 @@ void WidgetApplicationTizen::AddWidgetCreatingFunctionPair( CreateWidgetFunction WidgetApplicationTizen::CreateWidgetFunctionPair WidgetApplicationTizen::GetWidgetCreatingFunctionPair( const std::string& widgetName ) { + int idx = widgetName.find(":"); + std::string widgetID = widgetName.substr( idx + 1 ); for( CreateWidgetFunctionContainer::const_iterator iter = mCreateWidgetFunctionContainer.begin(); iter != mCreateWidgetFunctionContainer.end(); ++iter ) { - if( widgetName.find((*iter).first) != std::string::npos ) + if( widgetID.compare((*iter).first) == 0) { return *iter; } @@ -253,18 +274,19 @@ WidgetApplicationTizen::CreateWidgetFunctionPair WidgetApplicationTizen::GetWidg return CreateWidgetFunctionPair( "", NULL ); } -void WidgetApplicationTizen::AddWidget( widget_base_instance_h widgetBaseInstance, Dali::Widget widget ) +void WidgetApplicationTizen::AddWidget( widget_base_instance_h widgetBaseInstance, Dali::Widget widget , Dali::Window window ) { mWidgetInstanceContainer.push_back( WidgetInstancePair(widgetBaseInstance, widget) ); + mWindowInstanceContainer.push_back( WindowInstancePair(widgetBaseInstance, window) ); } -Dali::Widget WidgetApplicationTizen::GetWidget( widget_base_instance_h widgetBaseInstance ) +Dali::Widget WidgetApplicationTizen::GetWidget( widget_base_instance_h widgetBaseInstance ) const { - for( WidgetInstanceContainer::const_iterator iter = mWidgetInstanceContainer.begin(); iter != mWidgetInstanceContainer.end(); ++iter ) + for( auto&& iter : mWidgetInstanceContainer ) { - if( (*iter).first == widgetBaseInstance ) + if( (iter).first == widgetBaseInstance ) { - return (*iter).second; + return (iter).second; } } return Dali::Widget(); @@ -272,17 +294,53 @@ Dali::Widget WidgetApplicationTizen::GetWidget( widget_base_instance_h widgetBas void WidgetApplicationTizen::DeleteWidget( widget_base_instance_h widgetBaseInstance ) { - for( WidgetInstanceContainer::const_iterator iter = mWidgetInstanceContainer.begin(); iter != mWidgetInstanceContainer.end(); ++iter ) + // Delete WidgetInstance + auto widgetInstance = std::find_if( mWidgetInstanceContainer.begin(), + mWidgetInstanceContainer.end(), + [widgetBaseInstance]( WidgetInstancePair pair ) + { return (pair.first == widgetBaseInstance); } ); + + if(widgetInstance != mWidgetInstanceContainer.end()) { - if( (*iter).first == widgetBaseInstance ) + mWidgetInstanceContainer.erase(widgetInstance); + } + + // Delete WindowInstance + auto windowInstance = std::find_if( mWindowInstanceContainer.begin(), + mWindowInstanceContainer.end(), + [widgetBaseInstance]( WindowInstancePair pair ) + { return (pair.first == widgetBaseInstance); } ); + + if(windowInstance != mWindowInstanceContainer.end()) + { + mWindowInstanceContainer.erase(windowInstance); + } +} + +Dali::Window WidgetApplicationTizen::GetWindowFromWidget( widget_base_instance_h widgetBaseInstance ) const +{ + for( auto&& iter : mWindowInstanceContainer ) + { + if( (iter).first == widgetBaseInstance ) { - mWidgetInstanceContainer.erase(iter); - break; + Dali::Window ret = (iter).second; + return ret; } } + return Dali::Window(); } -#endif +int WidgetApplicationTizen::GetWidgetCount() +{ + return mWidgetInstanceContainer.size(); +} + +void WidgetApplicationTizen::OnInit() +{ + WidgetApplication::OnInit(); + + Dali::Adaptor::Get().SetRenderRefreshRate( GetEnvWidgetRenderRefreshRate() ); +} // factory function, must be implemented namespace WidgetApplicationFactory @@ -295,11 +353,7 @@ namespace WidgetApplicationFactory */ Dali::Internal::Adaptor::WidgetApplicationPtr Create( int* argc, char **argv[], const std::string& stylesheet ) { -#ifdef WIDGET_SUPPOERTED return WidgetApplicationTizen::New( argc, argv, stylesheet ); -#else - return nullptr; -#endif } } // namespace Factory