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>
39 #include <aul_rsm_viewer.h>
53 #define WIDGET_VIEW_RESOURCE_DEFAULT_IMG "/widget_viewer_dali/images/unknown.png"
55 #if defined(DEBUG_ENABLED)
56 Integration::Log::Filter* gWidgetViewLogging = Integration::Log::Filter::New( Debug::Verbose, false, "LOG_WIDGET_VIEW" );
61 return Dali::BaseHandle();
64 // Setup properties, signals and actions using the type-registry.
65 DALI_TYPE_REGISTRATION_BEGIN( Dali::WidgetView::WidgetView, Toolkit::Control, Create );
66 DALI_PROPERTY_REGISTRATION( Dali::WidgetView, WidgetView, "widgetId", BOOLEAN, WIDGET_ID )
67 DALI_PROPERTY_REGISTRATION( Dali::WidgetView, WidgetView, "instanceId", BOOLEAN, INSTANCE_ID )
68 DALI_PROPERTY_REGISTRATION( Dali::WidgetView, WidgetView, "contentInfo", BOOLEAN, CONTENT_INFO )
69 DALI_PROPERTY_REGISTRATION( Dali::WidgetView, WidgetView, "title", BOOLEAN, TITLE )
70 DALI_PROPERTY_REGISTRATION( Dali::WidgetView, WidgetView, "updatePeriod", BOOLEAN, UPDATE_PERIOD )
71 DALI_PROPERTY_REGISTRATION( Dali::WidgetView, WidgetView, "preview", MAP, PREVIEW )
72 DALI_PROPERTY_REGISTRATION( Dali::WidgetView, WidgetView, "loadingText", MAP, LOADING_TEXT )
73 DALI_PROPERTY_REGISTRATION( Dali::WidgetView, WidgetView, "widgetStateFaulted", BOOLEAN, WIDGET_STATE_FAULTED )
74 DALI_PROPERTY_REGISTRATION( Dali::WidgetView, WidgetView, "permanentDelete", BOOLEAN, PERMANENT_DELETE )
77 DALI_SIGNAL_REGISTRATION( Dali::WidgetView, WidgetView, "widgetAdded", SIGNAL_WIDGET_ADDED )
78 DALI_SIGNAL_REGISTRATION( Dali::WidgetView, WidgetView, "widgetDeleted", SIGNAL_WIDGET_DELETED )
79 DALI_SIGNAL_REGISTRATION( Dali::WidgetView, WidgetView, "widgetCreationAborted", SIGNAL_WIDGET_CREATION_ABORTED )
80 DALI_SIGNAL_REGISTRATION( Dali::WidgetView, WidgetView, "widgetContentUpdated", SIGNAL_WIDGET_CONTENT_UPDATED )
81 DALI_SIGNAL_REGISTRATION( Dali::WidgetView, WidgetView, "widgetUpdatePeriodChanged", SIGNAL_WIDGET_UPDATE_PERIOD_CHANGED )
82 DALI_SIGNAL_REGISTRATION( Dali::WidgetView, WidgetView, "widgetFaulted", SIGNAL_WIDGET_FAULTED )
85 DALI_ACTION_REGISTRATION( Dali::WidgetView, WidgetView, "pauseWidget", ACTION_WIDGETVIEW_PAUSE_WIDGET );
86 DALI_ACTION_REGISTRATION( Dali::WidgetView, WidgetView, "resumeWidget", ACTION_WIDGETVIEW_RESUME_WIDGET );
87 DALI_ACTION_REGISTRATION( Dali::WidgetView, WidgetView, "cancelTouchEvent", ACTION_WIDGETVIEW_CANCEL_TOUCH_EVENT );
88 DALI_ACTION_REGISTRATION( Dali::WidgetView, WidgetView, "activateFaultedWidget", ACTION_WIDGETVIEW_ACTIVATE_FAULTED_WIDGET );
90 DALI_TYPE_REGISTRATION_END()
92 static Eina_Bool OnKeyDown( void* data, int type, void* eventInfo )
94 Ecore_Event_Key *event = static_cast< Ecore_Event_Key* >( eventInfo );
95 tizen_remote_surface* surface = static_cast< tizen_remote_surface* >( data );
97 tizen_remote_surface_transfer_key_event( surface,
98 TIZEN_REMOTE_SURFACE_EVENT_TYPE_KEY_DOWN,
100 ecore_device_class_get(event->dev),
101 ecore_device_subclass_get(event->dev),
102 ecore_device_identifier_get(event->dev),
109 static Eina_Bool OnKeyUp(void* data, int type, void* eventInfo)
111 Ecore_Event_Key *event = static_cast< Ecore_Event_Key* >( eventInfo );
112 tizen_remote_surface* surface = static_cast< tizen_remote_surface* >( data );
114 tizen_remote_surface_transfer_key_event( surface,
115 TIZEN_REMOTE_SURFACE_EVENT_TYPE_KEY_UP,
117 ecore_device_class_get(event->dev),
118 ecore_device_subclass_get(event->dev),
119 ecore_device_identifier_get(event->dev),
125 static void OnSurfaceUpdate( struct tizen_remote_surface* surface, wl_buffer* buffer, uint32_t time, void* data )
127 Dali::WidgetView::Internal::WidgetView* widgetView = static_cast< Dali::WidgetView::Internal::WidgetView* >( data );
131 if( !widgetView->IsWidgetImageView() )
133 tizen_remote_surface_transfer_visibility( surface, TIZEN_REMOTE_SURFACE_VISIBILITY_TYPE_VISIBLE);
135 widgetView->CreateWidgetImageView();
136 widgetView->ConnectSignal( surface );
137 ecore_event_handler_add( ECORE_EVENT_KEY_DOWN, OnKeyDown, surface );
138 ecore_event_handler_add( ECORE_EVENT_KEY_UP, OnKeyUp, surface );
141 //get tbm surface from buffer
142 tbm_surface_h tbmSurface = static_cast< tbm_surface_h >( wl_buffer_get_user_data( buffer ) );
143 widgetView->UpdateImageSource( tbmSurface );
147 static void OnSurfaceMissing( struct tizen_remote_surface* surface, void* data )
149 //ToDo: WidgetDeletedSignal
153 static struct aul_rsm_handler_s remoteSurfaceHandler = {
158 } // unnamed namespace
160 Dali::WidgetView::WidgetView WidgetView::New( const std::string& widgetId, const std::string& contentInfo, int width, int height, float updatePeriod )
162 // Create the implementation, temporarily owned on stack
163 IntrusivePtr< WidgetView > internalWidgetView = new WidgetView( widgetId, contentInfo, width, height, updatePeriod );
165 // Pass ownership to CustomActor
166 Dali::WidgetView::WidgetView widgetView( *internalWidgetView );
168 // Second-phase init of the implementation
169 // This can only be done after the CustomActor connection has been made...
170 internalWidgetView->Initialize();
175 WidgetView::WidgetView()
176 : Control( ControlBehaviour( REQUIRES_TOUCH_EVENTS ) ),
185 mUpdatePeriod( 0.0 ),
186 mPreviewVisible( true ),
187 mStateTextVisible( true ),
188 mPermanentDelete( true ),
189 mRemoteSurface( NULL )
193 WidgetView::WidgetView( const std::string& widgetId, const std::string& contentInfo, int width, int height, float updatePeriod )
194 : Control( ControlBehaviour( REQUIRES_TOUCH_EVENTS ) ),
195 mWidgetId( widgetId ),
197 mContentInfo( contentInfo ),
203 mUpdatePeriod( updatePeriod ),
204 mPreviewVisible( true ),
205 mStateTextVisible( true ),
206 mPermanentDelete( true ),
207 mRemoteSurface( NULL )
211 WidgetView::~WidgetView()
213 if( !mWidgetId.empty() && !mInstanceId.empty() )
215 widget_instance_terminate( mInstanceId.c_str() );
217 if( mPermanentDelete )
219 widget_instance_destroy( mInstanceId.c_str() );
225 bundle_free( mBundle );
229 bool WidgetView::PauseWidget()
231 int ret = widget_instance_pause( mInstanceId.c_str() );
234 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::PauseWidget: Fail to pause widget(%s, %s) [%d]\n", mWidgetId.c_str(), mInstanceId.c_str(), ret );
238 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::PauseWidget: Widget is paused (%s, %s)\n", mWidgetId.c_str(), mInstanceId.c_str() );
243 bool WidgetView::ResumeWidget()
245 int ret = widget_instance_resume( mInstanceId.c_str() );
248 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::ResumeWidget: Fail to resume widget(%s, %s) [%d]\n", mWidgetId.c_str(), mInstanceId.c_str(), ret );
252 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::ResumeWidget: Widget is resumed (%s, %s)\n", mWidgetId.c_str(), mInstanceId.c_str() );
257 const std::string& WidgetView::GetWidgetId() const
262 const std::string& WidgetView::GetInstanceId() const
267 const std::string& WidgetView::GetContentInfo()
269 widget_instance_h instance;
270 char* contentInfo = NULL;
272 mContentInfo.clear();
274 if( mWidgetId.empty() || mInstanceId.empty() )
276 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::GetContentInfo: Widget id (%s) or instance id (%s) is invalid.\n", mWidgetId.c_str(), mInstanceId.c_str() );
280 instance = widget_instance_get_instance( mWidgetId.c_str(), mInstanceId.c_str() );
283 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::GetContentInfo: widget_instance_get_instance is failed. [%s]\n", mInstanceId.c_str() );
287 if( widget_instance_get_content( instance, &contentInfo ) < 0 )
289 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::GetContentInfo: Failed to get content of widget. [%s]\n", mInstanceId.c_str() );
293 mContentInfo = reinterpret_cast< char* >( contentInfo );
298 const std::string& WidgetView::GetTitle()
300 //ToDo: We should add some codes by considering widget_viewer_evas
303 mTitle = widget_service_get_name( mWidgetId.c_str(), NULL );
306 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::GetTitle: title = %s\n", mTitle.c_str() );
311 float WidgetView::GetUpdatePeriod() const
313 return mUpdatePeriod;
316 bool WidgetView::CancelTouchEvent()
320 tizen_remote_surface_transfer_touch_cancel( mRemoteSurface );
327 void WidgetView::ShowPreview( bool show )
329 if( mPreviewImage && show != mPreviewVisible )
331 mPreviewVisible = show;
332 mPreviewImage.SetVisible( show );
336 bool WidgetView::IsPreviewVisible()
338 return mPreviewVisible;
341 void WidgetView::ShowStateText( bool show )
343 if( mStateText && mStateTextVisible != show )
345 mStateTextVisible = show;
346 mStateText.SetVisible( show );
350 bool WidgetView::IsStateTextVisible()
352 return mStateTextVisible;
355 void WidgetView::ActivateFaultedWidget()
359 // Esable preview and text
360 if( mPreviewVisible )
362 mPreviewImage.SetVisible( true );
365 if( mStateTextVisible )
367 mStateText.SetVisible( true );
370 // launch widget again
371 mPid = widget_instance_launch( mInstanceId.c_str(), (char *)mContentInfo.c_str(), mWidth, mHeight );
374 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::ActivateFaultedWidget: widget_instance_launch is failed. [%s]\n", mWidgetId.c_str() );
377 Dali::WidgetView::WidgetView handle( GetOwner() );
378 mWidgetCreationAbortedSignal.Emit( handle );
383 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::ActivateFaultedWidget: widget_instance_launch is called. [%s, mPid = %d]\n", mWidgetId.c_str(), mPid );
387 bool WidgetView::IsWidgetFaulted()
389 return mPid < 0 ? true : false;
392 void WidgetView::SetPermanentDelete( bool permanentDelete )
394 mPermanentDelete = permanentDelete;
397 bool WidgetView::IsPermanentDelete()
399 return mPermanentDelete;
402 void WidgetView::CreateWidgetImageView()
405 mImageSource = Dali::NativeImageSource::New( source );
406 Dali::NativeImage image = Dali::NativeImage::New( *mImageSource );
408 mWidgetImageView = Dali::Toolkit::ImageView::New( image );
410 mWidgetImageView.SetParentOrigin( ParentOrigin::CENTER );
411 mWidgetImageView.SetAnchorPoint( AnchorPoint::CENTER );
412 mWidgetImageView.SetSize( mWidth, mHeight );
414 Self().Add( mWidgetImageView );
416 // Disable preview and text
417 if( mPreviewVisible )
419 mPreviewImage.SetVisible( false );
422 if( mStateTextVisible )
424 mStateText.SetVisible( false );
428 Dali::WidgetView::WidgetView handle( GetOwner() );
429 mWidgetAddedSignal.Emit( handle );
431 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::AddObjectView: ObjectView is added.\n" );
434 void WidgetView::RemoveObjectView()
436 // Enable preview and text
437 if( mPreviewVisible )
439 mPreviewImage.SetVisible( true );
442 if( mStateTextVisible )
444 mStateText.SetVisible( true );
448 Dali::WidgetView::WidgetView handle( GetOwner() );
449 mWidgetDeletedSignal.Emit( handle );
451 mWidgetImageView.Reset();
453 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::RemoveObjectView: ObjectView is removed.\n" );
456 void WidgetView::SendWidgetEvent( int event )
458 Dali::WidgetView::WidgetView handle( GetOwner() );
460 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::SendWidgetEvent: event = %d widget = %s\n", event, mWidgetId.c_str() );
465 case WIDGET_INSTANCE_EVENT_UPDATE:
467 mWidgetContentUpdatedSignal.Emit( handle );
470 case WIDGET_INSTANCE_EVENT_PERIOD_CHANGED:
472 mWidgetUpdatePeriodChangedSignal.Emit( handle );
475 case WIDGET_INSTANCE_EVENT_FAULT:
477 mWidgetFaultedSignal.Emit( handle );
487 bool WidgetView::DoConnectSignal( BaseObject* object, ConnectionTrackerInterface* tracker, const std::string& signalName, FunctorDelegate* functor )
489 Dali::BaseHandle handle( object );
491 bool connected( true );
492 Dali::WidgetView::WidgetView widgetView = Dali::WidgetView::WidgetView::DownCast( handle );
494 if( strcmp( signalName.c_str(), SIGNAL_WIDGET_ADDED ) == 0 )
496 widgetView.WidgetAddedSignal().Connect( tracker, functor );
498 else if( strcmp( signalName.c_str(), SIGNAL_WIDGET_DELETED ) == 0 )
500 widgetView.WidgetDeletedSignal().Connect( tracker, functor );
502 else if( strcmp( signalName.c_str(), SIGNAL_WIDGET_CREATION_ABORTED ) == 0 )
504 widgetView.WidgetCreationAbortedSignal().Connect( tracker, functor );
506 else if( strcmp( signalName.c_str(), SIGNAL_WIDGET_CONTENT_UPDATED ) == 0 )
508 widgetView.WidgetContentUpdatedSignal().Connect( tracker, functor );
510 else if( strcmp( signalName.c_str(), SIGNAL_WIDGET_UPDATE_PERIOD_CHANGED ) == 0 )
512 widgetView.WidgetUpdatePeriodChangedSignal().Connect( tracker, functor );
514 else if( strcmp( signalName.c_str(), SIGNAL_WIDGET_FAULTED ) == 0 )
516 widgetView.WidgetFaultedSignal().Connect( tracker, functor );
520 // signalName does not match any signal
527 bool WidgetView::DoAction( BaseObject* object, const std::string& actionName, const Property::Map& attributes )
531 Dali::BaseHandle handle( object );
532 Dali::WidgetView::WidgetView widgetView = Dali::WidgetView::WidgetView::DownCast( handle );
539 WidgetView& impl = GetImplementation( widgetView );
541 if( strcmp( actionName.c_str(), ACTION_WIDGETVIEW_PAUSE_WIDGET ) == 0 )
545 else if( strcmp( actionName.c_str(), ACTION_WIDGETVIEW_RESUME_WIDGET ) == 0 )
549 else if( strcmp( actionName.c_str(), ACTION_WIDGETVIEW_CANCEL_TOUCH_EVENT ) == 0 )
551 impl.CancelTouchEvent();
553 else if( strcmp( actionName.c_str(), ACTION_WIDGETVIEW_ACTIVATE_FAULTED_WIDGET ) == 0 )
555 impl.ActivateFaultedWidget();
565 void WidgetView::SetProperty( BaseObject* object, Property::Index index, const Property::Value& value )
567 Dali::WidgetView::WidgetView widgetView = Dali::WidgetView::WidgetView::DownCast( Dali::BaseHandle( object ) );
571 WidgetView& impl = GetImplementation( widgetView );
575 case Dali::WidgetView::WidgetView::Property::PREVIEW:
578 if( value.Get( previewEnabled ) )
580 impl.ShowPreview( previewEnabled );
584 case Dali::WidgetView::WidgetView::Property::LOADING_TEXT:
587 if( value.Get( textEnabled ) )
589 impl.ShowStateText( textEnabled );
593 case Dali::WidgetView::WidgetView::Property::PERMANENT_DELETE:
596 if( value.Get( del ) )
598 impl.SetPermanentDelete( del );
606 Property::Value WidgetView::GetProperty( BaseObject* object, Property::Index index )
608 Property::Value value;
609 Dali::WidgetView::WidgetView widgetView = Dali::WidgetView::WidgetView::DownCast( Dali::BaseHandle( object ) );
613 WidgetView& impl = GetImplementation( widgetView );
617 case Dali::WidgetView::WidgetView::Property::WIDGET_ID:
619 value = impl.GetWidgetId();
622 case Dali::WidgetView::WidgetView::Property::INSTANCE_ID:
624 value = impl.GetInstanceId();
627 case Dali::WidgetView::WidgetView::Property::CONTENT_INFO:
629 value = impl.GetContentInfo();
632 case Dali::WidgetView::WidgetView::Property::TITLE:
634 value = impl.GetTitle();
637 case Dali::WidgetView::WidgetView::Property::UPDATE_PERIOD:
639 value = impl.GetUpdatePeriod();
642 case Dali::WidgetView::WidgetView::Property::PREVIEW:
644 value = impl.IsPreviewVisible();
647 case Dali::WidgetView::WidgetView::Property::LOADING_TEXT:
649 value = impl.IsStateTextVisible();
652 case Dali::WidgetView::WidgetView::Property::WIDGET_STATE_FAULTED:
654 value = impl.IsWidgetFaulted();
657 case Dali::WidgetView::WidgetView::Property::PERMANENT_DELETE:
659 value = impl.IsPermanentDelete();
668 Dali::WidgetView::WidgetView::WidgetViewSignalType& WidgetView::WidgetAddedSignal()
670 return mWidgetAddedSignal;
673 Dali::WidgetView::WidgetView::WidgetViewSignalType& WidgetView::WidgetDeletedSignal()
675 return mWidgetDeletedSignal;
678 Dali::WidgetView::WidgetView::WidgetViewSignalType& WidgetView::WidgetCreationAbortedSignal()
680 return mWidgetCreationAbortedSignal;
683 Dali::WidgetView::WidgetView::WidgetViewSignalType& WidgetView::WidgetContentUpdatedSignal()
685 return mWidgetContentUpdatedSignal;
688 Dali::WidgetView::WidgetView::WidgetViewSignalType& WidgetView::WidgetUpdatePeriodChangedSignal()
690 return mWidgetUpdatePeriodChangedSignal;
693 Dali::WidgetView::WidgetView::WidgetViewSignalType& WidgetView::WidgetFaultedSignal()
695 return mWidgetFaultedSignal;
698 void WidgetView::OnInitialize()
700 char* instanceId = NULL;
701 char* previewPath = NULL;
702 std::string previewImage;
703 widget_size_type_e sizeType;
705 int ret = widget_instance_create( mWidgetId.c_str(), &instanceId );
706 if( ret < 0 || !instanceId )
708 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::OnInitialize: widget_instance_create is failed [%s].\n", mWidgetId.c_str() );
712 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::OnInitialize: widget_instance_create is called. [widget id = %s, instance id = %s]\n",
713 mWidgetId.c_str(), instanceId );
715 mInstanceId = instanceId;
718 widget_service_get_size_type( mWidth, mHeight, &sizeType );
720 previewPath = widget_service_get_preview_image_path( mWidgetId.c_str(), sizeType );
723 previewImage = previewPath;
728 previewImage = tzplatform_getenv( TZ_SYS_SHARE );
729 previewImage.append( WIDGET_VIEW_RESOURCE_DEFAULT_IMG );
732 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::OnInitialize: preview image path = %s\n", previewImage.c_str() );
734 mPreviewImage = Toolkit::ImageView::New( previewImage );
736 mPreviewImage.SetParentOrigin( ParentOrigin::CENTER );
737 mPreviewImage.SetAnchorPoint( AnchorPoint::CENTER );
741 mPreviewImage.SetSize( mWidth, mHeight );
744 Self().SetResizePolicy( ResizePolicy::FIT_TO_CHILDREN, Dimension::ALL_DIMENSIONS );
745 Self().Add( mPreviewImage );
748 // TODO: use po files
749 mStateText = Toolkit::TextLabel::New( "Loading..." );
751 mStateText.SetParentOrigin( ParentOrigin::CENTER );
752 mStateText.SetAnchorPoint( AnchorPoint::CENTER );
753 mStateText.SetProperty( Toolkit::TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
754 mStateText.SetProperty( Toolkit::TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER" );
756 mPreviewImage.Add( mStateText );
759 mPid = widget_instance_launch( instanceId, (char *)mContentInfo.c_str(), mWidth, mHeight );
762 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::OnInitialize: widget_instance_launch is failed. [%s]\n", mWidgetId.c_str() );
765 Dali::WidgetView::WidgetView handle( GetOwner() );
766 mWidgetCreationAbortedSignal.Emit( handle );
771 aul_rsm_viewer_set_surface_handler( mInstanceId.c_str(), &remoteSurfaceHandler, this );
773 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::OnInitialize: widget_instance_launch is called. [%s, mPid = %d]\n", mWidgetId.c_str(), mPid );
777 void WidgetView::OnStageConnection( int depth )
779 Control::OnStageConnection( depth );
782 void WidgetView::OnStageDisconnection()
784 Control::OnStageDisconnection();
787 void WidgetView::OnSizeSet( const Vector3& targetSize )
789 if( mWidgetImageView )
791 mWidgetImageView.SetSize( targetSize );
795 bool WidgetView::IsWidgetImageView()
797 return ( mWidgetImageView )? true: false;
800 void WidgetView::UpdateImageSource( tbm_surface_h source )
802 mImageSource->SetSource( source );
803 Dali::Stage::GetCurrent().KeepRendering( 0.0f );
806 void WidgetView::ConnectSignal( tizen_remote_surface* surface )
808 if( mWidgetImageView )
810 mRemoteSurface = surface;
812 Self().TouchSignal().Connect( this, &WidgetView::OnTouch );
813 Self().WheelEventSignal().Connect( this, &WidgetView::OnWheelEvent );
818 bool WidgetView::OnTouch( Dali::Actor actor, const Dali::TouchData& event )
820 tizen_remote_surface_event_type type = TIZEN_REMOTE_SURFACE_EVENT_TYPE_NONE;
822 if( event.GetPointCount() == 0 )
827 switch( event.GetState( 0 ) )
829 case Dali::PointState::UP:
831 type = TIZEN_REMOTE_SURFACE_EVENT_TYPE_MOUSE_UP;
834 case Dali::PointState::DOWN:
836 type = TIZEN_REMOTE_SURFACE_EVENT_TYPE_MOUSE_DOWN;
839 case Dali::PointState::MOTION:
841 type = TIZEN_REMOTE_SURFACE_EVENT_TYPE_MOUSE_MOVE;
852 if( type == TIZEN_REMOTE_SURFACE_EVENT_TYPE_MOUSE_MOVE )
857 Vector2 localPos = event.GetLocalPosition( 0 );
859 tizen_remote_surface_transfer_mouse_event( mRemoteSurface,
865 wl_fixed_from_double( event.GetEllipseRadius( 0 ).x ),
866 wl_fixed_from_double( event.GetEllipseRadius( 0 ).y ),
867 wl_fixed_from_double( event.GetPressure( 0 ) ),
868 wl_fixed_from_double( event.GetAngle( 0 ).degree ),
869 TIZEN_INPUT_DEVICE_CLAS_TOUCHSCREEN,
870 TIZEN_INPUT_DEVICE_SUBCLAS_NONE,
877 bool WidgetView::OnWheelEvent( Dali::Actor actor, const Dali::WheelEvent& event )
879 //ToDo: We should check TIZEN_INPUT_DEVICE_CLAS_MOUSE
880 tizen_remote_surface_transfer_mouse_wheel( mRemoteSurface,
883 TIZEN_INPUT_DEVICE_CLAS_MOUSE,
884 TIZEN_INPUT_DEVICE_SUBCLAS_NONE,
891 Vector3 WidgetView::GetNaturalSize()
897 if( size.x > 0 && size.y > 0 )
899 size.z = std::min( size.x, size.y );
904 return Control::GetNaturalSize();
908 float WidgetView::GetHeightForWidth( float width )
910 if( mWidth > 0 && mHeight > 0 )
912 return GetHeightForWidthBase( width );
916 return Control::GetHeightForWidthBase( width );
920 float WidgetView::GetWidthForHeight( float height )
922 if( mWidth > 0 && mHeight > 0 )
924 return GetWidthForHeightBase( height );
928 return Control::GetWidthForHeightBase( height );
932 } // namespace Internal
934 } // namespace WidgetView