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 // Disable preview and text
396 if( mPreviewVisible )
398 mPreviewImage.SetVisible( false );
401 if( mStateTextVisible )
403 mStateText.SetVisible( false );
407 Dali::WidgetView::WidgetView handle( GetOwner() );
408 mWidgetAddedSignal.Emit( handle );
410 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::AddObjectView: ObjectView is added.\n" );
413 void WidgetView::RemoveObjectView()
415 // Enable preview and text
416 if( mPreviewVisible )
418 mPreviewImage.SetVisible( true );
421 if( mStateTextVisible )
423 mStateText.SetVisible( true );
427 Dali::WidgetView::WidgetView handle( GetOwner() );
428 mWidgetDeletedSignal.Emit( handle );
430 mWidgetImageView.Reset();
432 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::RemoveObjectView: ObjectView is removed.\n" );
435 void WidgetView::SendWidgetEvent( int event )
437 Dali::WidgetView::WidgetView handle( GetOwner() );
439 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::SendWidgetEvent: event = %d widget = %s\n", event, mWidgetId.c_str() );
444 case WIDGET_INSTANCE_EVENT_UPDATE:
446 mWidgetContentUpdatedSignal.Emit( handle );
449 case WIDGET_INSTANCE_EVENT_PERIOD_CHANGED:
451 mWidgetUpdatePeriodChangedSignal.Emit( handle );
454 case WIDGET_INSTANCE_EVENT_FAULT:
456 mWidgetFaultedSignal.Emit( handle );
466 bool WidgetView::DoConnectSignal( BaseObject* object, ConnectionTrackerInterface* tracker, const std::string& signalName, FunctorDelegate* functor )
468 Dali::BaseHandle handle( object );
470 bool connected( true );
471 Dali::WidgetView::WidgetView widgetView = Dali::WidgetView::WidgetView::DownCast( handle );
473 if( strcmp( signalName.c_str(), SIGNAL_WIDGET_ADDED ) == 0 )
475 widgetView.WidgetAddedSignal().Connect( tracker, functor );
477 else if( strcmp( signalName.c_str(), SIGNAL_WIDGET_DELETED ) == 0 )
479 widgetView.WidgetDeletedSignal().Connect( tracker, functor );
481 else if( strcmp( signalName.c_str(), SIGNAL_WIDGET_CREATION_ABORTED ) == 0 )
483 widgetView.WidgetCreationAbortedSignal().Connect( tracker, functor );
485 else if( strcmp( signalName.c_str(), SIGNAL_WIDGET_CONTENT_UPDATED ) == 0 )
487 widgetView.WidgetContentUpdatedSignal().Connect( tracker, functor );
489 else if( strcmp( signalName.c_str(), SIGNAL_WIDGET_UPDATE_PERIOD_CHANGED ) == 0 )
491 widgetView.WidgetUpdatePeriodChangedSignal().Connect( tracker, functor );
493 else if( strcmp( signalName.c_str(), SIGNAL_WIDGET_FAULTED ) == 0 )
495 widgetView.WidgetFaultedSignal().Connect( tracker, functor );
499 // signalName does not match any signal
506 bool WidgetView::DoAction( BaseObject* object, const std::string& actionName, const Property::Map& attributes )
510 Dali::BaseHandle handle( object );
511 Dali::WidgetView::WidgetView widgetView = Dali::WidgetView::WidgetView::DownCast( handle );
518 WidgetView& impl = GetImplementation( widgetView );
520 if( strcmp( actionName.c_str(), ACTION_WIDGETVIEW_PAUSE_WIDGET ) == 0 )
524 else if( strcmp( actionName.c_str(), ACTION_WIDGETVIEW_RESUME_WIDGET ) == 0 )
528 else if( strcmp( actionName.c_str(), ACTION_WIDGETVIEW_CANCEL_TOUCH_EVENT ) == 0 )
530 impl.CancelTouchEvent();
532 else if( strcmp( actionName.c_str(), ACTION_WIDGETVIEW_ACTIVATE_FAULTED_WIDGET ) == 0 )
534 impl.ActivateFaultedWidget();
544 void WidgetView::SetProperty( BaseObject* object, Property::Index index, const Property::Value& value )
546 Dali::WidgetView::WidgetView widgetView = Dali::WidgetView::WidgetView::DownCast( Dali::BaseHandle( object ) );
550 WidgetView& impl = GetImplementation( widgetView );
554 case Dali::WidgetView::WidgetView::Property::PREVIEW:
557 if( value.Get( previewEnabled ) )
559 impl.ShowPreview( previewEnabled );
563 case Dali::WidgetView::WidgetView::Property::LOADING_TEXT:
566 if( value.Get( textEnabled ) )
568 impl.ShowStateText( textEnabled );
572 case Dali::WidgetView::WidgetView::Property::PERMANENT_DELETE:
575 if( value.Get( del ) )
577 impl.SetPermanentDelete( del );
585 Property::Value WidgetView::GetProperty( BaseObject* object, Property::Index index )
587 Property::Value value;
588 Dali::WidgetView::WidgetView widgetView = Dali::WidgetView::WidgetView::DownCast( Dali::BaseHandle( object ) );
592 WidgetView& impl = GetImplementation( widgetView );
596 case Dali::WidgetView::WidgetView::Property::WIDGET_ID:
598 value = impl.GetWidgetId();
601 case Dali::WidgetView::WidgetView::Property::INSTANCE_ID:
603 value = impl.GetInstanceId();
606 case Dali::WidgetView::WidgetView::Property::CONTENT_INFO:
608 value = impl.GetContentInfo();
611 case Dali::WidgetView::WidgetView::Property::TITLE:
613 value = impl.GetTitle();
616 case Dali::WidgetView::WidgetView::Property::UPDATE_PERIOD:
618 value = impl.GetUpdatePeriod();
621 case Dali::WidgetView::WidgetView::Property::PREVIEW:
623 value = impl.IsPreviewVisible();
626 case Dali::WidgetView::WidgetView::Property::LOADING_TEXT:
628 value = impl.IsStateTextVisible();
631 case Dali::WidgetView::WidgetView::Property::WIDGET_STATE_FAULTED:
633 value = impl.IsWidgetFaulted();
636 case Dali::WidgetView::WidgetView::Property::PERMANENT_DELETE:
638 value = impl.IsPermanentDelete();
647 Dali::WidgetView::WidgetView::WidgetViewSignalType& WidgetView::WidgetAddedSignal()
649 return mWidgetAddedSignal;
652 Dali::WidgetView::WidgetView::WidgetViewSignalType& WidgetView::WidgetDeletedSignal()
654 return mWidgetDeletedSignal;
657 Dali::WidgetView::WidgetView::WidgetViewSignalType& WidgetView::WidgetCreationAbortedSignal()
659 return mWidgetCreationAbortedSignal;
662 Dali::WidgetView::WidgetView::WidgetViewSignalType& WidgetView::WidgetContentUpdatedSignal()
664 return mWidgetContentUpdatedSignal;
667 Dali::WidgetView::WidgetView::WidgetViewSignalType& WidgetView::WidgetUpdatePeriodChangedSignal()
669 return mWidgetUpdatePeriodChangedSignal;
672 Dali::WidgetView::WidgetView::WidgetViewSignalType& WidgetView::WidgetFaultedSignal()
674 return mWidgetFaultedSignal;
677 void WidgetView::OnInitialize()
679 char* instanceId = NULL;
680 char* previewPath = NULL;
681 std::string previewImage;
682 widget_size_type_e sizeType;
683 screen_connector_watcher_ops ops;
685 int ret = widget_instance_create( mWidgetId.c_str(), &instanceId );
686 if( ret < 0 || !instanceId )
688 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::OnInitialize: widget_instance_create is failed [%s].\n", mWidgetId.c_str() );
692 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::OnInitialize: widget_instance_create is called. [widget id = %s, instance id = %s]\n",
693 mWidgetId.c_str(), instanceId );
695 mInstanceId = instanceId;
698 widget_service_get_size_type( mWidth, mHeight, &sizeType );
700 previewPath = widget_service_get_preview_image_path( mWidgetId.c_str(), sizeType );
703 previewImage = previewPath;
708 previewImage = tzplatform_getenv( TZ_SYS_SHARE );
709 previewImage.append( WIDGET_VIEW_RESOURCE_DEFAULT_IMG );
712 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::OnInitialize: preview image path = %s\n", previewImage.c_str() );
714 mPreviewImage = Toolkit::ImageView::New( previewImage );
716 mPreviewImage.SetParentOrigin( ParentOrigin::CENTER );
717 mPreviewImage.SetAnchorPoint( AnchorPoint::CENTER );
721 mPreviewImage.SetSize( mWidth, mHeight );
724 Self().SetResizePolicy( ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS );
725 Self().SetSize( mWidth, mHeight );
727 Self().Add( mPreviewImage );
730 // TODO: use po files
731 mStateText = Toolkit::TextLabel::New( "Loading..." );
733 mStateText.SetParentOrigin( ParentOrigin::CENTER );
734 mStateText.SetAnchorPoint( AnchorPoint::CENTER );
735 mStateText.SetProperty( Toolkit::TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
736 mStateText.SetProperty( Toolkit::TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER" );
738 mPreviewImage.Add( mStateText );
741 mPid = widget_instance_launch( instanceId, (char *)mContentInfo.c_str(), mWidth, mHeight );
744 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::OnInitialize: widget_instance_launch is failed. [%s]\n", mWidgetId.c_str() );
747 Dali::WidgetView::WidgetView handle( GetOwner() );
748 mWidgetCreationAbortedSignal.Emit( handle );
753 ops.change_cb = OnBufferChanged;
754 ops.missing_cb = OnSurfaceMissing;
755 ops.update_cb = OnBufferUpdated;
756 mWatcherHandle = screen_connector_watcher_add(&ops, (char *)mWidgetId.c_str(), this);
757 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::OnInitialize: widget_instance_launch is called. [%s, mPid = %d]\n", mWidgetId.c_str(), mPid );
761 void WidgetView::OnStageConnection( int depth )
763 Control::OnStageConnection( depth );
766 void WidgetView::OnStageDisconnection()
768 Control::OnStageDisconnection();
771 void WidgetView::OnSizeSet( const Vector3& targetSize )
773 if( mWidgetImageView )
775 mWidgetImageView.SetSize( targetSize );
779 bool WidgetView::IsWidgetImageView()
781 return ( mWidgetImageView )? true: false;
784 void WidgetView::UpdateImageSource( tbm_surface_h source )
786 mImageSource->SetSource( source );
787 Dali::Stage::GetCurrent().KeepRendering( 0.0f );
790 void WidgetView::ConnectSignal( tizen_remote_surface* surface )
792 if( mWidgetImageView && surface )
794 mRemoteSurface = surface;
796 Self().TouchSignal().Connect( this, &WidgetView::OnTouch );
797 Self().WheelEventSignal().Connect( this, &WidgetView::OnWheelEvent );
802 bool WidgetView::OnTouch( Dali::Actor actor, const Dali::TouchData& event )
804 tizen_remote_surface_event_type type = TIZEN_REMOTE_SURFACE_EVENT_TYPE_NONE;
806 if( event.GetPointCount() == 0 || mRemoteSurface == NULL )
811 switch( event.GetState( 0 ) )
813 case Dali::PointState::UP:
815 type = TIZEN_REMOTE_SURFACE_EVENT_TYPE_MOUSE_UP;
818 case Dali::PointState::DOWN:
820 type = TIZEN_REMOTE_SURFACE_EVENT_TYPE_MOUSE_DOWN;
823 case Dali::PointState::MOTION:
825 type = TIZEN_REMOTE_SURFACE_EVENT_TYPE_MOUSE_MOVE;
836 if( type == TIZEN_REMOTE_SURFACE_EVENT_TYPE_MOUSE_MOVE )
841 Vector2 localPos = event.GetLocalPosition( 0 );
843 tizen_remote_surface_transfer_mouse_event( mRemoteSurface,
849 wl_fixed_from_double( event.GetEllipseRadius( 0 ).x ),
850 wl_fixed_from_double( event.GetEllipseRadius( 0 ).y ),
851 wl_fixed_from_double( event.GetPressure( 0 ) ),
852 wl_fixed_from_double( event.GetAngle( 0 ).degree ),
853 TIZEN_INPUT_DEVICE_CLAS_TOUCHSCREEN,
854 TIZEN_INPUT_DEVICE_SUBCLAS_NONE,
861 bool WidgetView::OnWheelEvent( Dali::Actor actor, const Dali::WheelEvent& event )
863 if( mRemoteSurface == NULL )
867 //ToDo: We should check TIZEN_INPUT_DEVICE_CLAS_MOUSE
868 tizen_remote_surface_transfer_mouse_wheel( mRemoteSurface,
871 TIZEN_INPUT_DEVICE_CLAS_MOUSE,
872 TIZEN_INPUT_DEVICE_SUBCLAS_NONE,
879 Vector3 WidgetView::GetNaturalSize()
885 if( size.x > 0 && size.y > 0 )
887 size.z = std::min( size.x, size.y );
892 return Control::GetNaturalSize();
896 float WidgetView::GetHeightForWidth( float width )
898 if( mWidth > 0 && mHeight > 0 )
900 return GetHeightForWidthBase( width );
904 return Control::GetHeightForWidthBase( width );
908 float WidgetView::GetWidthForHeight( float height )
910 if( mWidth > 0 && mHeight > 0 )
912 return GetWidthForHeightBase( height );
916 return Control::GetWidthForHeightBase( height );
920 void WidgetView::CloseRemoteSurface()
922 screen_connector_watcher_remove( mWatcherHandle );
923 mRemoteSurface = NULL;
926 } // namespace Internal
928 } // namespace WidgetView