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>
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 struct wl_buffer* preBuffer;
94 static void OnBufferUpdated( struct tizen_remote_surface *surface, uint32_t type, struct wl_buffer *buffer,
95 int32_t img_file_fd, uint32_t img_file_size, uint32_t time, struct wl_array *keys,
96 const char *appid, const char *instance_id, const int pid, void *data)
98 Dali::WidgetView::Internal::WidgetView* widgetView = static_cast< Dali::WidgetView::Internal::WidgetView* >( data );
102 if( !widgetView->IsWidgetImageView() )
104 tizen_remote_surface_transfer_visibility( surface, TIZEN_REMOTE_SURFACE_VISIBILITY_TYPE_VISIBLE);
106 widgetView->CreateWidgetImageView();
107 widgetView->ConnectSignal( surface );
110 //get tbm surface from buffer
111 tbm_surface_h tbmSurface = static_cast< tbm_surface_h >( wl_buffer_get_user_data( buffer ) );
112 widgetView->UpdateImageSource( tbmSurface );
115 if( preBuffer != NULL && tizen_remote_surface_get_version( surface ) >= TIZEN_REMOTE_SURFACE_RELEASE_SINCE_VERSION )
117 tizen_remote_surface_release( surface, preBuffer );
122 close( img_file_fd );
125 static void OnBufferAdded( const char *appid, const char *instance_id, const int pid, void *data )
129 static void OnSurfaceRemoved( const char *appid, const char *instance_id, const int pid, void *data )
131 Dali::WidgetView::Internal::WidgetView* widgetView = static_cast< Dali::WidgetView::Internal::WidgetView* >( data );
135 widgetView->CloseRemoteSurface();
139 } // unnamed namespace
141 Dali::WidgetView::WidgetView WidgetView::New( const std::string& widgetId, const std::string& contentInfo, int width, int height, float updatePeriod )
143 // Create the implementation, temporarily owned on stack
144 IntrusivePtr< WidgetView > internalWidgetView = new WidgetView( widgetId, contentInfo, width, height, updatePeriod );
146 // Pass ownership to CustomActor
147 Dali::WidgetView::WidgetView widgetView( *internalWidgetView );
149 // Second-phase init of the implementation
150 // This can only be done after the CustomActor connection has been made...
151 internalWidgetView->Initialize();
156 WidgetView::WidgetView()
157 : Control( ControlBehaviour( REQUIRES_TOUCH_EVENTS ) ),
165 mUpdatePeriod( 0.0 ),
166 mPreviewVisible( true ),
167 mStateTextVisible( true ),
168 mPermanentDelete( false ),
169 mWatcherHandle( NULL ),
170 mRemoteSurface( NULL )
174 WidgetView::WidgetView( const std::string& widgetId, const std::string& contentInfo, int width, int height, float updatePeriod )
175 : Control( ControlBehaviour( REQUIRES_TOUCH_EVENTS ) ),
176 mWidgetId( widgetId ),
178 mContentInfo( contentInfo ),
183 mUpdatePeriod( updatePeriod ),
184 mPreviewVisible( true ),
185 mStateTextVisible( true ),
186 mPermanentDelete( false ),
187 mWatcherHandle( NULL ),
188 mRemoteSurface( NULL )
192 WidgetView::~WidgetView()
194 if( !mWidgetId.empty() && !mInstanceId.empty() )
196 widget_instance_terminate( mInstanceId.c_str() );
198 if( mPermanentDelete )
200 widget_instance_destroy( mInstanceId.c_str() );
205 bool WidgetView::PauseWidget()
207 int ret = widget_instance_pause( mInstanceId.c_str() );
210 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::PauseWidget: Fail to pause widget(%s, %s) [%d]\n", mWidgetId.c_str(), mInstanceId.c_str(), ret );
214 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::PauseWidget: Widget is paused (%s, %s)\n", mWidgetId.c_str(), mInstanceId.c_str() );
219 bool WidgetView::ResumeWidget()
221 int ret = widget_instance_resume( mInstanceId.c_str() );
224 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::ResumeWidget: Fail to resume widget(%s, %s) [%d]\n", mWidgetId.c_str(), mInstanceId.c_str(), ret );
228 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::ResumeWidget: Widget is resumed (%s, %s)\n", mWidgetId.c_str(), mInstanceId.c_str() );
233 const std::string& WidgetView::GetWidgetId() const
238 const std::string& WidgetView::GetInstanceId() const
243 const std::string& WidgetView::GetContentInfo()
245 widget_instance_h instance;
246 char* contentInfo = NULL;
248 mContentInfo.clear();
250 if( mWidgetId.empty() || mInstanceId.empty() )
252 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::GetContentInfo: Widget id (%s) or instance id (%s) is invalid.\n", mWidgetId.c_str(), mInstanceId.c_str() );
256 instance = widget_instance_get_instance( mWidgetId.c_str(), mInstanceId.c_str() );
259 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::GetContentInfo: widget_instance_get_instance is failed. [%s]\n", mInstanceId.c_str() );
263 if( widget_instance_get_content( instance, &contentInfo ) < 0 )
265 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::GetContentInfo: Failed to get content of widget. [%s]\n", mInstanceId.c_str() );
269 mContentInfo = reinterpret_cast< char* >( contentInfo );
274 const std::string& WidgetView::GetTitle()
276 //ToDo: We should add some codes by considering widget_viewer_evas
279 mTitle = widget_service_get_name( mWidgetId.c_str(), NULL );
282 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::GetTitle: title = %s\n", mTitle.c_str() );
287 float WidgetView::GetUpdatePeriod() const
289 return mUpdatePeriod;
292 bool WidgetView::CancelTouchEvent()
296 tizen_remote_surface_transfer_touch_cancel( mRemoteSurface );
303 void WidgetView::ShowPreview( bool show )
305 if( mPreviewImage && show != mPreviewVisible )
307 mPreviewVisible = show;
308 mPreviewImage.SetVisible( show );
312 bool WidgetView::IsPreviewVisible()
314 return mPreviewVisible;
317 void WidgetView::ShowStateText( bool show )
319 if( mStateText && mStateTextVisible != show )
321 mStateTextVisible = show;
322 mStateText.SetVisible( show );
326 bool WidgetView::IsStateTextVisible()
328 return mStateTextVisible;
331 void WidgetView::ActivateFaultedWidget()
335 // Esable preview and text
336 if( mPreviewVisible )
338 mPreviewImage.SetVisible( true );
341 if( mStateTextVisible )
343 mStateText.SetVisible( true );
346 // launch widget again
347 mPid = widget_instance_launch( mInstanceId.c_str(), (char *)mContentInfo.c_str(), mWidth, mHeight );
350 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::ActivateFaultedWidget: widget_instance_launch is failed. [%s]\n", mWidgetId.c_str() );
353 Dali::WidgetView::WidgetView handle( GetOwner() );
354 mWidgetCreationAbortedSignal.Emit( handle );
359 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::ActivateFaultedWidget: widget_instance_launch is called. [%s, mPid = %d]\n", mWidgetId.c_str(), mPid );
363 bool WidgetView::IsWidgetFaulted()
365 return mPid < 0 ? true : false;
368 void WidgetView::SetPermanentDelete( bool permanentDelete )
370 mPermanentDelete = permanentDelete;
373 bool WidgetView::IsPermanentDelete()
375 return mPermanentDelete;
378 void WidgetView::CreateWidgetImageView()
381 mImageSource = Dali::NativeImageSource::New( source );
382 Dali::NativeImage image = Dali::NativeImage::New( *mImageSource );
384 mWidgetImageView = Dali::Toolkit::ImageView::New( image );
386 mWidgetImageView.SetParentOrigin( ParentOrigin::CENTER );
387 mWidgetImageView.SetAnchorPoint( AnchorPoint::CENTER );
388 mWidgetImageView.SetSize( mWidth, mHeight );
390 Self().Add( mWidgetImageView );
392 //EFL app should be pre multiplied image.
393 mWidgetImageView.SetProperty( Toolkit::ImageView::Property::PRE_MULTIPLIED_ALPHA, true );
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:
445 case WIDGET_INSTANCE_EVENT_EXTRA_UPDATED:
447 mWidgetContentUpdatedSignal.Emit( handle );
450 case WIDGET_INSTANCE_EVENT_PERIOD_CHANGED:
452 mWidgetUpdatePeriodChangedSignal.Emit( handle );
455 case WIDGET_INSTANCE_EVENT_FAULT:
457 mWidgetFaultedSignal.Emit( handle );
467 bool WidgetView::DoConnectSignal( BaseObject* object, ConnectionTrackerInterface* tracker, const std::string& signalName, FunctorDelegate* functor )
469 Dali::BaseHandle handle( object );
471 bool connected( true );
472 Dali::WidgetView::WidgetView widgetView = Dali::WidgetView::WidgetView::DownCast( handle );
474 if( strcmp( signalName.c_str(), SIGNAL_WIDGET_ADDED ) == 0 )
476 widgetView.WidgetAddedSignal().Connect( tracker, functor );
478 else if( strcmp( signalName.c_str(), SIGNAL_WIDGET_DELETED ) == 0 )
480 widgetView.WidgetDeletedSignal().Connect( tracker, functor );
482 else if( strcmp( signalName.c_str(), SIGNAL_WIDGET_CREATION_ABORTED ) == 0 )
484 widgetView.WidgetCreationAbortedSignal().Connect( tracker, functor );
486 else if( strcmp( signalName.c_str(), SIGNAL_WIDGET_CONTENT_UPDATED ) == 0 )
488 widgetView.WidgetContentUpdatedSignal().Connect( tracker, functor );
490 else if( strcmp( signalName.c_str(), SIGNAL_WIDGET_UPDATE_PERIOD_CHANGED ) == 0 )
492 widgetView.WidgetUpdatePeriodChangedSignal().Connect( tracker, functor );
494 else if( strcmp( signalName.c_str(), SIGNAL_WIDGET_FAULTED ) == 0 )
496 widgetView.WidgetFaultedSignal().Connect( tracker, functor );
500 // signalName does not match any signal
507 bool WidgetView::DoAction( BaseObject* object, const std::string& actionName, const Property::Map& attributes )
511 Dali::BaseHandle handle( object );
512 Dali::WidgetView::WidgetView widgetView = Dali::WidgetView::WidgetView::DownCast( handle );
519 WidgetView& impl = GetImplementation( widgetView );
521 if( strcmp( actionName.c_str(), ACTION_WIDGETVIEW_PAUSE_WIDGET ) == 0 )
525 else if( strcmp( actionName.c_str(), ACTION_WIDGETVIEW_RESUME_WIDGET ) == 0 )
529 else if( strcmp( actionName.c_str(), ACTION_WIDGETVIEW_CANCEL_TOUCH_EVENT ) == 0 )
531 impl.CancelTouchEvent();
533 else if( strcmp( actionName.c_str(), ACTION_WIDGETVIEW_ACTIVATE_FAULTED_WIDGET ) == 0 )
535 impl.ActivateFaultedWidget();
545 void WidgetView::SetProperty( BaseObject* object, Property::Index index, const Property::Value& value )
547 Dali::WidgetView::WidgetView widgetView = Dali::WidgetView::WidgetView::DownCast( Dali::BaseHandle( object ) );
551 WidgetView& impl = GetImplementation( widgetView );
555 case Dali::WidgetView::WidgetView::Property::PREVIEW:
558 if( value.Get( previewEnabled ) )
560 impl.ShowPreview( previewEnabled );
564 case Dali::WidgetView::WidgetView::Property::LOADING_TEXT:
567 if( value.Get( textEnabled ) )
569 impl.ShowStateText( textEnabled );
573 case Dali::WidgetView::WidgetView::Property::PERMANENT_DELETE:
576 if( value.Get( del ) )
578 impl.SetPermanentDelete( del );
586 Property::Value WidgetView::GetProperty( BaseObject* object, Property::Index index )
588 Property::Value value;
589 Dali::WidgetView::WidgetView widgetView = Dali::WidgetView::WidgetView::DownCast( Dali::BaseHandle( object ) );
593 WidgetView& impl = GetImplementation( widgetView );
597 case Dali::WidgetView::WidgetView::Property::WIDGET_ID:
599 value = impl.GetWidgetId();
602 case Dali::WidgetView::WidgetView::Property::INSTANCE_ID:
604 value = impl.GetInstanceId();
607 case Dali::WidgetView::WidgetView::Property::CONTENT_INFO:
609 value = impl.GetContentInfo();
612 case Dali::WidgetView::WidgetView::Property::TITLE:
614 value = impl.GetTitle();
617 case Dali::WidgetView::WidgetView::Property::UPDATE_PERIOD:
619 value = impl.GetUpdatePeriod();
622 case Dali::WidgetView::WidgetView::Property::PREVIEW:
624 value = impl.IsPreviewVisible();
627 case Dali::WidgetView::WidgetView::Property::LOADING_TEXT:
629 value = impl.IsStateTextVisible();
632 case Dali::WidgetView::WidgetView::Property::WIDGET_STATE_FAULTED:
634 value = impl.IsWidgetFaulted();
637 case Dali::WidgetView::WidgetView::Property::PERMANENT_DELETE:
639 value = impl.IsPermanentDelete();
648 Dali::WidgetView::WidgetView::WidgetViewSignalType& WidgetView::WidgetAddedSignal()
650 return mWidgetAddedSignal;
653 Dali::WidgetView::WidgetView::WidgetViewSignalType& WidgetView::WidgetDeletedSignal()
655 return mWidgetDeletedSignal;
658 Dali::WidgetView::WidgetView::WidgetViewSignalType& WidgetView::WidgetCreationAbortedSignal()
660 return mWidgetCreationAbortedSignal;
663 Dali::WidgetView::WidgetView::WidgetViewSignalType& WidgetView::WidgetContentUpdatedSignal()
665 return mWidgetContentUpdatedSignal;
668 Dali::WidgetView::WidgetView::WidgetViewSignalType& WidgetView::WidgetUpdatePeriodChangedSignal()
670 return mWidgetUpdatePeriodChangedSignal;
673 Dali::WidgetView::WidgetView::WidgetViewSignalType& WidgetView::WidgetFaultedSignal()
675 return mWidgetFaultedSignal;
678 void WidgetView::OnInitialize()
680 char* instanceId = NULL;
681 char* previewPath = NULL;
682 std::string previewImage;
683 widget_size_type_e sizeType;
684 screen_connector_toolkit_ops ops;
686 int ret = widget_instance_create( mWidgetId.c_str(), &instanceId );
687 if( ret < 0 || !instanceId )
689 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::OnInitialize: widget_instance_create is failed [%s].\n", mWidgetId.c_str() );
693 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::OnInitialize: widget_instance_create is called. [widget id = %s, instance id = %s]\n",
694 mWidgetId.c_str(), instanceId );
696 mInstanceId = instanceId;
699 widget_service_get_size_type( mWidth, mHeight, &sizeType );
701 previewPath = widget_service_get_preview_image_path( mWidgetId.c_str(), sizeType );
704 previewImage = previewPath;
709 previewImage = tzplatform_getenv( TZ_SYS_SHARE );
710 previewImage.append( WIDGET_VIEW_RESOURCE_DEFAULT_IMG );
713 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::OnInitialize: preview image path = %s\n", previewImage.c_str() );
715 mPreviewImage = Toolkit::ImageView::New( previewImage );
717 mPreviewImage.SetParentOrigin( ParentOrigin::CENTER );
718 mPreviewImage.SetAnchorPoint( AnchorPoint::CENTER );
722 mPreviewImage.SetSize( mWidth, mHeight );
725 Self().SetResizePolicy( ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS );
726 Self().SetSize( mWidth, mHeight );
728 Self().Add( mPreviewImage );
731 // TODO: use po files
732 mStateText = Toolkit::TextLabel::New( "Loading..." );
734 mStateText.SetParentOrigin( ParentOrigin::CENTER );
735 mStateText.SetAnchorPoint( AnchorPoint::CENTER );
736 mStateText.SetProperty( Toolkit::TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
737 mStateText.SetProperty( Toolkit::TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER" );
739 mPreviewImage.Add( mStateText );
742 mPid = widget_instance_launch( instanceId, (char *)mContentInfo.c_str(), mWidth, mHeight );
745 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::OnInitialize: widget_instance_launch is failed. [%s]\n", mWidgetId.c_str() );
748 Dali::WidgetView::WidgetView handle( GetOwner() );
749 mWidgetCreationAbortedSignal.Emit( handle );
754 ops.updated_cb = OnBufferUpdated;
755 ops.removed_cb = OnSurfaceRemoved;
756 ops.added_cb = OnBufferAdded;
757 mWatcherHandle = screen_connector_toolkit_add(&ops, (char *)instanceId, SCREEN_CONNECTOR_SCREEEN_TYPE_WIDGET, this);
758 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::OnInitialize: widget_instance_launch is called. [%s, mPid = %d]\n", mWidgetId.c_str(), mPid );
762 void WidgetView::OnStageConnection( int depth )
764 Control::OnStageConnection( depth );
767 void WidgetView::OnStageDisconnection()
769 Control::OnStageDisconnection();
772 void WidgetView::OnSizeSet( const Vector3& targetSize )
774 if( mWidgetImageView )
776 mWidgetImageView.SetSize( targetSize );
780 bool WidgetView::IsWidgetImageView()
782 return ( mWidgetImageView )? true: false;
785 void WidgetView::UpdateImageSource( tbm_surface_h source )
787 mImageSource->SetSource( source );
788 Dali::Stage::GetCurrent().KeepRendering( 0.0f );
791 void WidgetView::ConnectSignal( tizen_remote_surface* surface )
793 if( mWidgetImageView && surface )
795 mRemoteSurface = surface;
797 Self().TouchSignal().Connect( this, &WidgetView::OnTouch );
798 Self().WheelEventSignal().Connect( this, &WidgetView::OnWheelEvent );
803 bool WidgetView::OnTouch( Dali::Actor actor, const Dali::TouchData& event )
805 tizen_remote_surface_event_type type = TIZEN_REMOTE_SURFACE_EVENT_TYPE_NONE;
807 if( event.GetPointCount() == 0 || mRemoteSurface == NULL )
812 switch( event.GetState( 0 ) )
814 case Dali::PointState::UP:
816 type = TIZEN_REMOTE_SURFACE_EVENT_TYPE_MOUSE_UP;
819 case Dali::PointState::DOWN:
821 type = TIZEN_REMOTE_SURFACE_EVENT_TYPE_MOUSE_DOWN;
824 case Dali::PointState::MOTION:
826 type = TIZEN_REMOTE_SURFACE_EVENT_TYPE_MOUSE_MOVE;
837 if( type == TIZEN_REMOTE_SURFACE_EVENT_TYPE_MOUSE_MOVE )
842 Vector2 localPos = event.GetLocalPosition( 0 );
844 tizen_remote_surface_transfer_mouse_event( mRemoteSurface,
850 wl_fixed_from_double( event.GetEllipseRadius( 0 ).x ),
851 wl_fixed_from_double( event.GetEllipseRadius( 0 ).y ),
852 wl_fixed_from_double( event.GetPressure( 0 ) ),
853 wl_fixed_from_double( event.GetAngle( 0 ).degree ),
854 TIZEN_INPUT_DEVICE_CLAS_TOUCHSCREEN,
855 TIZEN_INPUT_DEVICE_SUBCLAS_NONE,
862 bool WidgetView::OnWheelEvent( Dali::Actor actor, const Dali::WheelEvent& event )
864 if( mRemoteSurface == NULL )
868 //ToDo: We should check TIZEN_INPUT_DEVICE_CLAS_MOUSE
869 tizen_remote_surface_transfer_mouse_wheel( mRemoteSurface,
872 TIZEN_INPUT_DEVICE_CLAS_MOUSE,
873 TIZEN_INPUT_DEVICE_SUBCLAS_NONE,
880 Vector3 WidgetView::GetNaturalSize()
886 if( size.x > 0 && size.y > 0 )
888 size.z = std::min( size.x, size.y );
893 return Control::GetNaturalSize();
897 float WidgetView::GetHeightForWidth( float width )
899 if( mWidth > 0 && mHeight > 0 )
901 return GetHeightForWidthBase( width );
905 return Control::GetHeightForWidthBase( width );
909 float WidgetView::GetWidthForHeight( float height )
911 if( mWidth > 0 && mHeight > 0 )
913 return GetWidthForHeightBase( height );
917 return Control::GetWidthForHeightBase( height );
921 void WidgetView::CloseRemoteSurface()
923 screen_connector_toolkit_remove( mWatcherHandle );
924 mRemoteSurface = NULL;
927 } // namespace Internal
929 } // namespace WidgetView