#include <unistd.h>
#include <libintl.h>
#include <xkbcommon/xkbcommon.h>
-#include <dali/devel-api/images/native-image-interface-extension.h>
namespace Dali
{
widgetView->ConnectSignal( surface );
}
- //get tbm surface from buffer
- tbm_surface_h tbmSurface = static_cast< tbm_surface_h >( wl_buffer_get_user_data( buffer ) );
- widgetView->UpdateImageSource( tbmSurface, buffer, surface);
+ widgetView->UpdateImageSource( buffer, surface, img_file_fd);
}
-
- close( img_file_fd );
}
static void OnBufferAdded( const char *appid, const char *instance_id, const int pid, void *data )
if( widgetView && !widgetView->IsWidgetFaulted() )
{
- widgetView->RemoveWidget();
- widgetView->EmitDeletedWidgetSignal();
+ widgetView->CloseRemoteSurface();
+ widgetView->RemoveWidgetRenderer();
}
}
DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::CreateWidgetRenderer: Widget image is added.\n" );
}
+void WidgetView::RemoveWidgetRenderer()
+{
+ if( mRenderer )
+ {
+ Self().RemoveRenderer( mRenderer );
+
+ ShowRetryState( true );
+
+ Dali::WidgetView::WidgetView handle( GetOwner() );
+ mWidgetDeletedSignal.Emit( handle );
+ }
+
+ DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::RemoveWidgetRenderer: Widget image is removed.\n" );
+}
+
bool WidgetView::TerminateWidget()
{
if( !mWidgetId.empty() && !mInstanceId.empty() )
{
- RemoveWidget();
-
int ret = 0;
ret = widget_instance_terminate( mInstanceId.c_str() );
Dali::WidgetView::WidgetView handle( GetOwner() );
mWidgetTerminatedSignal.Emit( handle );
-
- EmitDeletedWidgetSignal();
+ mWidgetDeletedSignal.Emit( handle );
mWidgetId.clear();
mInstanceId.clear();
+ CloseRemoteSurface();
return true;
}
case WIDGET_INSTANCE_EVENT_FAULT:
{
mWidgetFaultedSignal.Emit( handle );
- RemoveWidget();
- ShowRetryState( true );
+ CloseRemoteSurface();
+ RemoveWidgetRenderer();
break;
}
case WIDGET_INSTANCE_EVENT_CREATE_ABORTED:
return ( mRenderer )? true: false;
}
-
-class DestructorCallback: public CallbackBase
+void WidgetView::UpdateImageSource( struct wl_buffer *buffer , struct tizen_remote_surface *surface, int32_t img_file_fd )
{
-public:
- DestructorCallback(void *buffer ,void *surface)
- :CallbackBase( reinterpret_cast< void* >( this ),
- NULL, // we get the dispatcher to call function directly
- reinterpret_cast< CallbackBase::Dispatcher>( &DestructorCallback::Dispatcher) ),
- mWlBuffer( buffer ),
- mRemoteSurface( surface ) {
-
- }
-
- void RunCallback()
- {
- struct wl_buffer *buffer = static_cast< struct wl_buffer* >(mWlBuffer);
- struct tizen_remote_surface *surface = static_cast< struct tizen_remote_surface* >(mRemoteSurface);
- if (tizen_remote_surface_get_version( surface ) >= TIZEN_REMOTE_SURFACE_RELEASE_SINCE_VERSION)
- {
- tizen_remote_surface_release( surface, buffer );
- tbm_surface_h preTbmSurface = (tbm_surface_h)wl_buffer_get_user_data( buffer );
- tbm_surface_internal_unref( preTbmSurface );
- wl_buffer_destroy( buffer );
- }
- }
+ //get tbm surface from buffer
+ tbm_surface_h tbmSurface = static_cast< tbm_surface_h >( wl_buffer_get_user_data( buffer ) );
+ mImageSource = Dali::NativeImageSource::New( tbmSurface );
+ Dali::NativeImage image = Dali::NativeImage::New( *mImageSource );
- static void Dispatcher( CallbackBase& base )
+ if( mRenderer )
{
- DestructorCallback& callback( static_cast< DestructorCallback& >( base) );
- callback.RunCallback();
+ Dali::TextureSet textureSet = mRenderer.GetTextures();
+ Dali::TextureSetImage( textureSet, 0u, image );
+ mRenderer.SetProperty( Renderer::Property::BLEND_PRE_MULTIPLIED_ALPHA, true );
}
- ~DestructorCallback()
+ if( mWlBuffer != NULL && tizen_remote_surface_get_version( surface ) >= TIZEN_REMOTE_SURFACE_RELEASE_SINCE_VERSION )
{
+ tizen_remote_surface_release( surface, mWlBuffer );
+ tbm_surface_h preTbmSurface = (tbm_surface_h)wl_buffer_get_user_data( mWlBuffer );
+ tbm_surface_internal_unref( preTbmSurface );
+ wl_buffer_destroy( mWlBuffer );
}
-private:
- void *mWlBuffer ;
- void *mRemoteSurface;
-};
-
-
-void WidgetView::UpdateImageSource( tbm_surface_h source , struct wl_buffer *buffer , struct tizen_remote_surface *surface)
-{
- DestructorCallback* callback = new DestructorCallback( buffer, surface );
- TriggerEventFactory triggerEventFactory;
- TriggerEventInterface* notification = triggerEventFactory.CreateTriggerEvent( callback,
- TriggerEventInterface::DELETE_AFTER_TRIGGER );
+ mRemoteSurface = surface;
mWlBuffer = buffer;
- mImageSource = Dali::NativeImageSource::New( source );
- Dali::NativeImage image = Dali::NativeImage::New( *mImageSource );
-
- NativeImageInterfacePtr mImageSourcePtr = static_cast< NativeImageInterfacePtr >(mImageSource);
- NativeImageInterface::Extension* extension = mImageSourcePtr->GetExtension();
- if( extension )
- {
- extension->SetDestructorNotification( notification );
- }
-
- if( mRenderer )
- {
- Dali::TextureSet textureSet = mRenderer.GetTextures();
- Dali::TextureSetImage( textureSet, 0u, image );
- mRenderer.SetProperty( Renderer::Property::BLEND_PRE_MULTIPLIED_ALPHA, true );
- }
+ close( img_file_fd );
}
void WidgetView::ConnectSignal( tizen_remote_surface* surface )
}
}
-void WidgetView::RemoveWidget()
+void WidgetView::CloseRemoteSurface()
{
- if( mRemoteSurface != NULL )
- {
- tizen_remote_surface_transfer_visibility( mRemoteSurface, TIZEN_REMOTE_SURFACE_VISIBILITY_TYPE_INVISIBLE);
- }
-
- if(mImageSource)
+ if( mWatcherHandle != NULL )
{
- // Delete trigger
- NativeImageInterfacePtr mImageSourcePtr = static_cast< NativeImageInterfacePtr >( mImageSource );
- NativeImageInterface::Extension* extension = mImageSourcePtr->GetExtension();
- if( extension )
+ if( mRemoteSurface != NULL && mWlBuffer != NULL && tizen_remote_surface_get_version( mRemoteSurface ) >= TIZEN_REMOTE_SURFACE_RELEASE_SINCE_VERSION )
{
- extension->SetDestructorNotification( NULL );
- }
- }
-
- mImageSource = Dali::NativeImageSource::New( NULL );
-
- if( mRenderer )
- {
- mImageSource = NULL;
- Self().RemoveRenderer( mRenderer );
- mRenderer.Reset();
- }
-
- if( mWatcherHandle != NULL && mRemoteSurface != NULL )
- {
- // Release tizen remote surface
- if(mWlBuffer != NULL)
- {
- struct wl_buffer *buffer = mWlBuffer;
- struct tizen_remote_surface *surface = mRemoteSurface;
- if (tizen_remote_surface_get_version( surface ) >= TIZEN_REMOTE_SURFACE_RELEASE_SINCE_VERSION)
- {
- tizen_remote_surface_release( surface, buffer );
- tbm_surface_h preTbmSurface = (tbm_surface_h)wl_buffer_get_user_data( buffer );
- tbm_surface_internal_unref( preTbmSurface );
- wl_buffer_destroy( buffer );
- mWlBuffer = NULL;
- }
+ tizen_remote_surface_release( mRemoteSurface, mWlBuffer );
+ tbm_surface_h preTbmSurface = (tbm_surface_h)wl_buffer_get_user_data( mWlBuffer );
+ tbm_surface_internal_unref( preTbmSurface );
+ wl_buffer_destroy( mWlBuffer );
+ mWlBuffer = NULL;
}
-
screen_connector_toolkit_remove( mWatcherHandle );
- mWatcherHandle = NULL;
- mRemoteSurface = NULL;
- mPid = -1;
}
+ mWatcherHandle = NULL;
+ mRemoteSurface = NULL;
+ mPid = -1;
}
void WidgetView::ShowLoadingState( bool show )
return extracted;
}
-void WidgetView::EmitDeletedWidgetSignal()
-{
- if( !mWidgetId.empty() )
- {
- Dali::WidgetView::WidgetView handle( GetOwner() );
- mWidgetDeletedSignal.Emit( handle );
- }
-}
-
void WidgetView::OnRelayout( const Vector2& size, RelayoutContainer& container )
{
Control::OnRelayout( size, container );