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=b9354c6b7c025b7a019ecd7f61cd59e1d9efb701;hpb=5b351aff5c3944cb45cf7d9b4b6dedc00efb9010;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 b9354c6..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,6 +21,7 @@ // INTERNAL INCLUDE #include #include +#include #include #include @@ -46,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 @@ -64,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 ); @@ -157,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); @@ -244,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; } @@ -255,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(); @@ -274,14 +294,45 @@ 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(); +} + +int WidgetApplicationTizen::GetWidgetCount() +{ + return mWidgetInstanceContainer.size(); } void WidgetApplicationTizen::OnInit()