3 * Copyright (c) 2016 Samsung Electronics Co., Ltd.
5 * Licensed under the Flora License, Version 1.1 (the License);
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://floralicense.org/license/
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an AS IS BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
19 #include <internal/widget_view/widget_view_impl.h>
24 #include <dali/public-api/common/stage.h>
25 #include <dali/public-api/events/touch-data.h>
26 #include <dali/public-api/events/wheel-event.h>
27 #include <dali/public-api/images/native-image.h>
28 #include <dali/public-api/object/type-registry.h>
29 #include <dali/public-api/object/type-registry-helper.h>
30 #include <dali-toolkit/public-api/visuals/visual-properties.h>
31 #include <dali-toolkit/devel-api/visual-factory/visual-factory.h>
32 #include <dali/integration-api/debug.h>
34 #include <Ecore_Input.h>
35 #include <widget_service.h>
36 #include <widget_instance.h>
37 #include <tzplatform_config.h>
38 #include <wayland-extension/tizen-extension-client-protocol.h>
52 #define WIDGET_VIEW_RESOURCE_DEFAULT_IMG "/widget_viewer_dali/images/unknown.png"
54 #if defined(DEBUG_ENABLED)
55 Integration::Log::Filter* gWidgetViewLogging = Integration::Log::Filter::New( Debug::Verbose, false, "LOG_WIDGET_VIEW" );
60 return Dali::BaseHandle();
63 // Setup properties, signals and actions using the type-registry.
64 DALI_TYPE_REGISTRATION_BEGIN( Dali::WidgetView::WidgetView, Toolkit::Control, Create );
65 DALI_PROPERTY_REGISTRATION( Dali::WidgetView, WidgetView, "widgetId", BOOLEAN, WIDGET_ID )
66 DALI_PROPERTY_REGISTRATION( Dali::WidgetView, WidgetView, "instanceId", BOOLEAN, INSTANCE_ID )
67 DALI_PROPERTY_REGISTRATION( Dali::WidgetView, WidgetView, "contentInfo", BOOLEAN, CONTENT_INFO )
68 DALI_PROPERTY_REGISTRATION( Dali::WidgetView, WidgetView, "title", BOOLEAN, TITLE )
69 DALI_PROPERTY_REGISTRATION( Dali::WidgetView, WidgetView, "updatePeriod", BOOLEAN, UPDATE_PERIOD )
70 DALI_PROPERTY_REGISTRATION( Dali::WidgetView, WidgetView, "preview", MAP, PREVIEW )
71 DALI_PROPERTY_REGISTRATION( Dali::WidgetView, WidgetView, "loadingText", MAP, LOADING_TEXT )
72 DALI_PROPERTY_REGISTRATION( Dali::WidgetView, WidgetView, "widgetStateFaulted", BOOLEAN, WIDGET_STATE_FAULTED )
73 DALI_PROPERTY_REGISTRATION( Dali::WidgetView, WidgetView, "permanentDelete", BOOLEAN, PERMANENT_DELETE )
76 DALI_SIGNAL_REGISTRATION( Dali::WidgetView, WidgetView, "widgetAdded", SIGNAL_WIDGET_ADDED )
77 DALI_SIGNAL_REGISTRATION( Dali::WidgetView, WidgetView, "widgetDeleted", SIGNAL_WIDGET_DELETED )
78 DALI_SIGNAL_REGISTRATION( Dali::WidgetView, WidgetView, "widgetCreationAborted", SIGNAL_WIDGET_CREATION_ABORTED )
79 DALI_SIGNAL_REGISTRATION( Dali::WidgetView, WidgetView, "widgetContentUpdated", SIGNAL_WIDGET_CONTENT_UPDATED )
80 DALI_SIGNAL_REGISTRATION( Dali::WidgetView, WidgetView, "widgetUpdatePeriodChanged", SIGNAL_WIDGET_UPDATE_PERIOD_CHANGED )
81 DALI_SIGNAL_REGISTRATION( Dali::WidgetView, WidgetView, "widgetFaulted", SIGNAL_WIDGET_FAULTED )
84 DALI_ACTION_REGISTRATION( Dali::WidgetView, WidgetView, "pauseWidget", ACTION_WIDGETVIEW_PAUSE_WIDGET );
85 DALI_ACTION_REGISTRATION( Dali::WidgetView, WidgetView, "resumeWidget", ACTION_WIDGETVIEW_RESUME_WIDGET );
86 DALI_ACTION_REGISTRATION( Dali::WidgetView, WidgetView, "cancelTouchEvent", ACTION_WIDGETVIEW_CANCEL_TOUCH_EVENT );
87 DALI_ACTION_REGISTRATION( Dali::WidgetView, WidgetView, "activateFaultedWidget", ACTION_WIDGETVIEW_ACTIVATE_FAULTED_WIDGET );
89 DALI_TYPE_REGISTRATION_END()
91 static void OnBufferChanged( struct tizen_remote_surface *surface, uint32_t type, struct wl_buffer *buffer,
92 int32_t img_file_fd, uint32_t img_file_size, uint32_t time, struct wl_array *keys, void *data)
94 Dali::WidgetView::Internal::WidgetView* widgetView = static_cast< Dali::WidgetView::Internal::WidgetView* >( data );
98 if( !widgetView->IsWidgetImageView() )
100 tizen_remote_surface_transfer_visibility( surface, TIZEN_REMOTE_SURFACE_VISIBILITY_TYPE_VISIBLE);
102 widgetView->CreateWidgetImageView();
103 widgetView->ConnectSignal( surface );
106 //get tbm surface from buffer
107 tbm_surface_h tbmSurface = static_cast< tbm_surface_h >( wl_buffer_get_user_data( buffer ) );
108 widgetView->UpdateImageSource( tbmSurface );
112 static void OnBufferUpdated( struct tizen_remote_surface* surface, wl_buffer* buffer, uint32_t time, void* data )
114 Dali::WidgetView::Internal::WidgetView* widgetView = static_cast< Dali::WidgetView::Internal::WidgetView* >( data );
118 if( !widgetView->IsWidgetImageView() )
120 tizen_remote_surface_transfer_visibility( surface, TIZEN_REMOTE_SURFACE_VISIBILITY_TYPE_VISIBLE);
122 widgetView->CreateWidgetImageView();
123 widgetView->ConnectSignal( surface );
126 //get tbm surface from buffer
127 tbm_surface_h tbmSurface = static_cast< tbm_surface_h >( wl_buffer_get_user_data( buffer ) );
128 widgetView->UpdateImageSource( tbmSurface );
132 static void OnSurfaceMissing( struct tizen_remote_surface* surface, void* data )
134 Dali::WidgetView::Internal::WidgetView* widgetView = static_cast< Dali::WidgetView::Internal::WidgetView* >( data );
138 widgetView->CloseRemoteSurface();
142 } // unnamed namespace
144 Dali::WidgetView::WidgetView WidgetView::New( const std::string& widgetId, const std::string& contentInfo, int width, int height, float updatePeriod )
146 // Create the implementation, temporarily owned on stack
147 IntrusivePtr< WidgetView > internalWidgetView = new WidgetView( widgetId, contentInfo, width, height, updatePeriod );
149 // Pass ownership to CustomActor
150 Dali::WidgetView::WidgetView widgetView( *internalWidgetView );
152 // Second-phase init of the implementation
153 // This can only be done after the CustomActor connection has been made...
154 internalWidgetView->Initialize();
159 WidgetView::WidgetView()
160 : Control( ControlBehaviour( REQUIRES_TOUCH_EVENTS ) ),
168 mUpdatePeriod( 0.0 ),
169 mPreviewVisible( true ),
170 mStateTextVisible( true ),
171 mPermanentDelete( false ),
172 mWatcherHandle( NULL ),
173 mRemoteSurface( NULL )
177 WidgetView::WidgetView( const std::string& widgetId, const std::string& contentInfo, int width, int height, float updatePeriod )
178 : Control( ControlBehaviour( REQUIRES_TOUCH_EVENTS ) ),
179 mWidgetId( widgetId ),
181 mContentInfo( contentInfo ),
186 mUpdatePeriod( updatePeriod ),
187 mPreviewVisible( true ),
188 mStateTextVisible( true ),
189 mPermanentDelete( false ),
190 mWatcherHandle( NULL ),
191 mRemoteSurface( NULL )
195 WidgetView::~WidgetView()
197 if( !mWidgetId.empty() && !mInstanceId.empty() )
199 widget_instance_terminate( mInstanceId.c_str() );
201 if( mPermanentDelete )
203 widget_instance_destroy( mInstanceId.c_str() );
208 bool WidgetView::PauseWidget()
210 int ret = widget_instance_pause( mInstanceId.c_str() );
213 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::PauseWidget: Fail to pause widget(%s, %s) [%d]\n", mWidgetId.c_str(), mInstanceId.c_str(), ret );
217 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::PauseWidget: Widget is paused (%s, %s)\n", mWidgetId.c_str(), mInstanceId.c_str() );
222 bool WidgetView::ResumeWidget()
224 int ret = widget_instance_resume( mInstanceId.c_str() );
227 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::ResumeWidget: Fail to resume widget(%s, %s) [%d]\n", mWidgetId.c_str(), mInstanceId.c_str(), ret );
231 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::ResumeWidget: Widget is resumed (%s, %s)\n", mWidgetId.c_str(), mInstanceId.c_str() );
236 const std::string& WidgetView::GetWidgetId() const
241 const std::string& WidgetView::GetInstanceId() const
246 const std::string& WidgetView::GetContentInfo()
248 widget_instance_h instance;
249 char* contentInfo = NULL;
251 mContentInfo.clear();
253 if( mWidgetId.empty() || mInstanceId.empty() )
255 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::GetContentInfo: Widget id (%s) or instance id (%s) is invalid.\n", mWidgetId.c_str(), mInstanceId.c_str() );
259 instance = widget_instance_get_instance( mWidgetId.c_str(), mInstanceId.c_str() );
262 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::GetContentInfo: widget_instance_get_instance is failed. [%s]\n", mInstanceId.c_str() );
266 if( widget_instance_get_content( instance, &contentInfo ) < 0 )
268 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::GetContentInfo: Failed to get content of widget. [%s]\n", mInstanceId.c_str() );
272 mContentInfo = reinterpret_cast< char* >( contentInfo );
277 const std::string& WidgetView::GetTitle()
279 //ToDo: We should add some codes by considering widget_viewer_evas
282 mTitle = widget_service_get_name( mWidgetId.c_str(), NULL );
285 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::GetTitle: title = %s\n", mTitle.c_str() );
290 float WidgetView::GetUpdatePeriod() const
292 return mUpdatePeriod;
295 bool WidgetView::CancelTouchEvent()
299 tizen_remote_surface_transfer_touch_cancel( mRemoteSurface );
306 void WidgetView::ShowPreview( bool show )
308 if( mPreviewImage && show != mPreviewVisible )
310 mPreviewVisible = show;
311 mPreviewImage.SetVisible( show );
315 bool WidgetView::IsPreviewVisible()
317 return mPreviewVisible;
320 void WidgetView::ShowStateText( bool show )
322 if( mStateText && mStateTextVisible != show )
324 mStateTextVisible = show;
325 mStateText.SetVisible( show );
329 bool WidgetView::IsStateTextVisible()
331 return mStateTextVisible;
334 void WidgetView::ActivateFaultedWidget()
338 // Esable preview and text
339 if( mPreviewVisible )
341 mPreviewImage.SetVisible( true );
344 if( mStateTextVisible )
346 mStateText.SetVisible( true );
349 // launch widget again
350 mPid = widget_instance_launch( mInstanceId.c_str(), (char *)mContentInfo.c_str(), mWidth, mHeight );
353 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::ActivateFaultedWidget: widget_instance_launch is failed. [%s]\n", mWidgetId.c_str() );
356 Dali::WidgetView::WidgetView handle( GetOwner() );
357 mWidgetCreationAbortedSignal.Emit( handle );
362 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::ActivateFaultedWidget: widget_instance_launch is called. [%s, mPid = %d]\n", mWidgetId.c_str(), mPid );
366 bool WidgetView::IsWidgetFaulted()
368 return mPid < 0 ? true : false;
371 void WidgetView::SetPermanentDelete( bool permanentDelete )
373 mPermanentDelete = permanentDelete;
376 bool WidgetView::IsPermanentDelete()
378 return mPermanentDelete;
381 void WidgetView::CreateWidgetImageView()
384 mImageSource = Dali::NativeImageSource::New( source );
385 Dali::NativeImage image = Dali::NativeImage::New( *mImageSource );
387 mWidgetImageView = Dali::Toolkit::ImageView::New( image );
389 mWidgetImageView.SetParentOrigin( ParentOrigin::CENTER );
390 mWidgetImageView.SetAnchorPoint( AnchorPoint::CENTER );
391 mWidgetImageView.SetSize( mWidth, mHeight );
393 Self().Add( mWidgetImageView );
395 //EFL app should be pre multiplied image.
396 mWidgetImageView.SetProperty( Toolkit::ImageView::Property::PRE_MULTIPLIED_ALPHA, true );
398 // Disable preview and text
399 if( mPreviewVisible )
401 mPreviewImage.SetVisible( false );
404 if( mStateTextVisible )
406 mStateText.SetVisible( false );
410 Dali::WidgetView::WidgetView handle( GetOwner() );
411 mWidgetAddedSignal.Emit( handle );
413 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::AddObjectView: ObjectView is added.\n" );
416 void WidgetView::RemoveObjectView()
418 // Enable preview and text
419 if( mPreviewVisible )
421 mPreviewImage.SetVisible( true );
424 if( mStateTextVisible )
426 mStateText.SetVisible( true );
430 Dali::WidgetView::WidgetView handle( GetOwner() );
431 mWidgetDeletedSignal.Emit( handle );
433 mWidgetImageView.Reset();
435 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::RemoveObjectView: ObjectView is removed.\n" );
438 void WidgetView::SendWidgetEvent( int event )
440 Dali::WidgetView::WidgetView handle( GetOwner() );
442 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::SendWidgetEvent: event = %d widget = %s\n", event, mWidgetId.c_str() );
447 case WIDGET_INSTANCE_EVENT_UPDATE:
449 mWidgetContentUpdatedSignal.Emit( handle );
452 case WIDGET_INSTANCE_EVENT_PERIOD_CHANGED:
454 mWidgetUpdatePeriodChangedSignal.Emit( handle );
457 case WIDGET_INSTANCE_EVENT_FAULT:
459 mWidgetFaultedSignal.Emit( handle );
469 bool WidgetView::DoConnectSignal( BaseObject* object, ConnectionTrackerInterface* tracker, const std::string& signalName, FunctorDelegate* functor )
471 Dali::BaseHandle handle( object );
473 bool connected( true );
474 Dali::WidgetView::WidgetView widgetView = Dali::WidgetView::WidgetView::DownCast( handle );
476 if( strcmp( signalName.c_str(), SIGNAL_WIDGET_ADDED ) == 0 )
478 widgetView.WidgetAddedSignal().Connect( tracker, functor );
480 else if( strcmp( signalName.c_str(), SIGNAL_WIDGET_DELETED ) == 0 )
482 widgetView.WidgetDeletedSignal().Connect( tracker, functor );
484 else if( strcmp( signalName.c_str(), SIGNAL_WIDGET_CREATION_ABORTED ) == 0 )
486 widgetView.WidgetCreationAbortedSignal().Connect( tracker, functor );
488 else if( strcmp( signalName.c_str(), SIGNAL_WIDGET_CONTENT_UPDATED ) == 0 )
490 widgetView.WidgetContentUpdatedSignal().Connect( tracker, functor );
492 else if( strcmp( signalName.c_str(), SIGNAL_WIDGET_UPDATE_PERIOD_CHANGED ) == 0 )
494 widgetView.WidgetUpdatePeriodChangedSignal().Connect( tracker, functor );
496 else if( strcmp( signalName.c_str(), SIGNAL_WIDGET_FAULTED ) == 0 )
498 widgetView.WidgetFaultedSignal().Connect( tracker, functor );
502 // signalName does not match any signal
509 bool WidgetView::DoAction( BaseObject* object, const std::string& actionName, const Property::Map& attributes )
513 Dali::BaseHandle handle( object );
514 Dali::WidgetView::WidgetView widgetView = Dali::WidgetView::WidgetView::DownCast( handle );
521 WidgetView& impl = GetImplementation( widgetView );
523 if( strcmp( actionName.c_str(), ACTION_WIDGETVIEW_PAUSE_WIDGET ) == 0 )
527 else if( strcmp( actionName.c_str(), ACTION_WIDGETVIEW_RESUME_WIDGET ) == 0 )
531 else if( strcmp( actionName.c_str(), ACTION_WIDGETVIEW_CANCEL_TOUCH_EVENT ) == 0 )
533 impl.CancelTouchEvent();
535 else if( strcmp( actionName.c_str(), ACTION_WIDGETVIEW_ACTIVATE_FAULTED_WIDGET ) == 0 )
537 impl.ActivateFaultedWidget();
547 void WidgetView::SetProperty( BaseObject* object, Property::Index index, const Property::Value& value )
549 Dali::WidgetView::WidgetView widgetView = Dali::WidgetView::WidgetView::DownCast( Dali::BaseHandle( object ) );
553 WidgetView& impl = GetImplementation( widgetView );
557 case Dali::WidgetView::WidgetView::Property::PREVIEW:
560 if( value.Get( previewEnabled ) )
562 impl.ShowPreview( previewEnabled );
566 case Dali::WidgetView::WidgetView::Property::LOADING_TEXT:
569 if( value.Get( textEnabled ) )
571 impl.ShowStateText( textEnabled );
575 case Dali::WidgetView::WidgetView::Property::PERMANENT_DELETE:
578 if( value.Get( del ) )
580 impl.SetPermanentDelete( del );
588 Property::Value WidgetView::GetProperty( BaseObject* object, Property::Index index )
590 Property::Value value;
591 Dali::WidgetView::WidgetView widgetView = Dali::WidgetView::WidgetView::DownCast( Dali::BaseHandle( object ) );
595 WidgetView& impl = GetImplementation( widgetView );
599 case Dali::WidgetView::WidgetView::Property::WIDGET_ID:
601 value = impl.GetWidgetId();
604 case Dali::WidgetView::WidgetView::Property::INSTANCE_ID:
606 value = impl.GetInstanceId();
609 case Dali::WidgetView::WidgetView::Property::CONTENT_INFO:
611 value = impl.GetContentInfo();
614 case Dali::WidgetView::WidgetView::Property::TITLE:
616 value = impl.GetTitle();
619 case Dali::WidgetView::WidgetView::Property::UPDATE_PERIOD:
621 value = impl.GetUpdatePeriod();
624 case Dali::WidgetView::WidgetView::Property::PREVIEW:
626 value = impl.IsPreviewVisible();
629 case Dali::WidgetView::WidgetView::Property::LOADING_TEXT:
631 value = impl.IsStateTextVisible();
634 case Dali::WidgetView::WidgetView::Property::WIDGET_STATE_FAULTED:
636 value = impl.IsWidgetFaulted();
639 case Dali::WidgetView::WidgetView::Property::PERMANENT_DELETE:
641 value = impl.IsPermanentDelete();
650 Dali::WidgetView::WidgetView::WidgetViewSignalType& WidgetView::WidgetAddedSignal()
652 return mWidgetAddedSignal;
655 Dali::WidgetView::WidgetView::WidgetViewSignalType& WidgetView::WidgetDeletedSignal()
657 return mWidgetDeletedSignal;
660 Dali::WidgetView::WidgetView::WidgetViewSignalType& WidgetView::WidgetCreationAbortedSignal()
662 return mWidgetCreationAbortedSignal;
665 Dali::WidgetView::WidgetView::WidgetViewSignalType& WidgetView::WidgetContentUpdatedSignal()
667 return mWidgetContentUpdatedSignal;
670 Dali::WidgetView::WidgetView::WidgetViewSignalType& WidgetView::WidgetUpdatePeriodChangedSignal()
672 return mWidgetUpdatePeriodChangedSignal;
675 Dali::WidgetView::WidgetView::WidgetViewSignalType& WidgetView::WidgetFaultedSignal()
677 return mWidgetFaultedSignal;
680 void WidgetView::OnInitialize()
682 char* instanceId = NULL;
683 char* previewPath = NULL;
684 std::string previewImage;
685 widget_size_type_e sizeType;
686 screen_connector_watcher_ops ops;
688 int ret = widget_instance_create( mWidgetId.c_str(), &instanceId );
689 if( ret < 0 || !instanceId )
691 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::OnInitialize: widget_instance_create is failed [%s].\n", mWidgetId.c_str() );
695 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::OnInitialize: widget_instance_create is called. [widget id = %s, instance id = %s]\n",
696 mWidgetId.c_str(), instanceId );
698 mInstanceId = instanceId;
701 widget_service_get_size_type( mWidth, mHeight, &sizeType );
703 previewPath = widget_service_get_preview_image_path( mWidgetId.c_str(), sizeType );
706 previewImage = previewPath;
711 previewImage = tzplatform_getenv( TZ_SYS_SHARE );
712 previewImage.append( WIDGET_VIEW_RESOURCE_DEFAULT_IMG );
715 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::OnInitialize: preview image path = %s\n", previewImage.c_str() );
717 mPreviewImage = Toolkit::ImageView::New( previewImage );
719 mPreviewImage.SetParentOrigin( ParentOrigin::CENTER );
720 mPreviewImage.SetAnchorPoint( AnchorPoint::CENTER );
724 mPreviewImage.SetSize( mWidth, mHeight );
727 Self().SetResizePolicy( ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS );
728 Self().SetSize( mWidth, mHeight );
730 Self().Add( mPreviewImage );
733 // TODO: use po files
734 mStateText = Toolkit::TextLabel::New( "Loading..." );
736 mStateText.SetParentOrigin( ParentOrigin::CENTER );
737 mStateText.SetAnchorPoint( AnchorPoint::CENTER );
738 mStateText.SetProperty( Toolkit::TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
739 mStateText.SetProperty( Toolkit::TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER" );
741 mPreviewImage.Add( mStateText );
744 mPid = widget_instance_launch( instanceId, (char *)mContentInfo.c_str(), mWidth, mHeight );
747 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::OnInitialize: widget_instance_launch is failed. [%s]\n", mWidgetId.c_str() );
750 Dali::WidgetView::WidgetView handle( GetOwner() );
751 mWidgetCreationAbortedSignal.Emit( handle );
756 ops.change_cb = OnBufferChanged;
757 ops.missing_cb = OnSurfaceMissing;
758 ops.update_cb = OnBufferUpdated;
759 mWatcherHandle = screen_connector_watcher_add(&ops, (char *)mWidgetId.c_str(), this);
760 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::OnInitialize: widget_instance_launch is called. [%s, mPid = %d]\n", mWidgetId.c_str(), mPid );
764 void WidgetView::OnStageConnection( int depth )
766 Control::OnStageConnection( depth );
769 void WidgetView::OnStageDisconnection()
771 Control::OnStageDisconnection();
774 void WidgetView::OnSizeSet( const Vector3& targetSize )
776 if( mWidgetImageView )
778 mWidgetImageView.SetSize( targetSize );
782 bool WidgetView::IsWidgetImageView()
784 return ( mWidgetImageView )? true: false;
787 void WidgetView::UpdateImageSource( tbm_surface_h source )
789 mImageSource->SetSource( source );
790 Dali::Stage::GetCurrent().KeepRendering( 0.0f );
793 void WidgetView::ConnectSignal( tizen_remote_surface* surface )
795 if( mWidgetImageView && surface )
797 mRemoteSurface = surface;
799 Self().TouchSignal().Connect( this, &WidgetView::OnTouch );
800 Self().WheelEventSignal().Connect( this, &WidgetView::OnWheelEvent );
805 bool WidgetView::OnTouch( Dali::Actor actor, const Dali::TouchData& event )
807 tizen_remote_surface_event_type type = TIZEN_REMOTE_SURFACE_EVENT_TYPE_NONE;
809 if( event.GetPointCount() == 0 || mRemoteSurface == NULL )
814 switch( event.GetState( 0 ) )
816 case Dali::PointState::UP:
818 type = TIZEN_REMOTE_SURFACE_EVENT_TYPE_MOUSE_UP;
821 case Dali::PointState::DOWN:
823 type = TIZEN_REMOTE_SURFACE_EVENT_TYPE_MOUSE_DOWN;
826 case Dali::PointState::MOTION:
828 type = TIZEN_REMOTE_SURFACE_EVENT_TYPE_MOUSE_MOVE;
839 if( type == TIZEN_REMOTE_SURFACE_EVENT_TYPE_MOUSE_MOVE )
844 Vector2 localPos = event.GetLocalPosition( 0 );
846 tizen_remote_surface_transfer_mouse_event( mRemoteSurface,
852 wl_fixed_from_double( event.GetEllipseRadius( 0 ).x ),
853 wl_fixed_from_double( event.GetEllipseRadius( 0 ).y ),
854 wl_fixed_from_double( event.GetPressure( 0 ) ),
855 wl_fixed_from_double( event.GetAngle( 0 ).degree ),
856 TIZEN_INPUT_DEVICE_CLAS_TOUCHSCREEN,
857 TIZEN_INPUT_DEVICE_SUBCLAS_NONE,
864 bool WidgetView::OnWheelEvent( Dali::Actor actor, const Dali::WheelEvent& event )
866 if( mRemoteSurface == NULL )
870 //ToDo: We should check TIZEN_INPUT_DEVICE_CLAS_MOUSE
871 tizen_remote_surface_transfer_mouse_wheel( mRemoteSurface,
874 TIZEN_INPUT_DEVICE_CLAS_MOUSE,
875 TIZEN_INPUT_DEVICE_SUBCLAS_NONE,
882 Vector3 WidgetView::GetNaturalSize()
888 if( size.x > 0 && size.y > 0 )
890 size.z = std::min( size.x, size.y );
895 return Control::GetNaturalSize();
899 float WidgetView::GetHeightForWidth( float width )
901 if( mWidth > 0 && mHeight > 0 )
903 return GetHeightForWidthBase( width );
907 return Control::GetHeightForWidthBase( width );
911 float WidgetView::GetWidthForHeight( float height )
913 if( mWidth > 0 && mHeight > 0 )
915 return GetWidthForHeightBase( height );
919 return Control::GetWidthForHeightBase( height );
923 void WidgetView::CloseRemoteSurface()
925 screen_connector_watcher_remove( mWatcherHandle );
926 mRemoteSurface = NULL;
929 } // namespace Internal
931 } // namespace WidgetView