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 );
129 if( widgetView && !widgetView->IsWidgetImageView() )
131 tizen_remote_surface_transfer_visibility( surface, TIZEN_REMOTE_SURFACE_VISIBILITY_TYPE_VISIBLE);
133 widgetView->CreateWidgetImageView();
134 widgetView->ConnectSignal( surface );
135 ecore_event_handler_add( ECORE_EVENT_KEY_DOWN, OnKeyDown, surface );
136 ecore_event_handler_add( ECORE_EVENT_KEY_UP, OnKeyUp, surface );
140 //get tbm surface from buffer
141 tbm_surface_h tbmSurface = static_cast< tbm_surface_h >( wl_buffer_get_user_data( buffer ) );
142 widgetView->UpdateImageSource( tbmSurface );
145 static void OnSurfaceMissing( struct tizen_remote_surface* surface, void* data )
147 //ToDo: WidgetDeletedSignal
151 static struct aul_rsm_handler_s remoteSurfaceHandler = {
156 } // unnamed namespace
158 Dali::WidgetView::WidgetView WidgetView::New( const std::string& widgetId, const std::string& contentInfo, int width, int height, float updatePeriod )
160 // Create the implementation, temporarily owned on stack
161 IntrusivePtr< WidgetView > internalWidgetView = new WidgetView( widgetId, contentInfo, width, height, updatePeriod );
163 // Pass ownership to CustomActor
164 Dali::WidgetView::WidgetView widgetView( *internalWidgetView );
166 // Second-phase init of the implementation
167 // This can only be done after the CustomActor connection has been made...
168 internalWidgetView->Initialize();
173 WidgetView::WidgetView()
174 : Control( ControlBehaviour( REQUIRES_TOUCH_EVENTS ) ),
183 mUpdatePeriod( 0.0 ),
184 mPreviewVisible( true ),
185 mStateTextVisible( true ),
186 mPermanentDelete( true )
190 WidgetView::WidgetView( const std::string& widgetId, const std::string& contentInfo, int width, int height, float updatePeriod )
191 : Control( ControlBehaviour( REQUIRES_TOUCH_EVENTS ) ),
192 mWidgetId( widgetId ),
194 mContentInfo( contentInfo ),
200 mUpdatePeriod( updatePeriod ),
201 mPreviewVisible( true ),
202 mStateTextVisible( true ),
203 mPermanentDelete( true )
207 WidgetView::~WidgetView()
209 if( !mWidgetId.empty() && !mInstanceId.empty() )
211 widget_instance_terminate( mInstanceId.c_str() );
213 if( mPermanentDelete )
215 widget_instance_destroy( mInstanceId.c_str() );
221 bundle_free( mBundle );
225 bool WidgetView::PauseWidget()
227 int ret = widget_instance_pause( mInstanceId.c_str() );
230 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::PauseWidget: Fail to pause widget(%s, %s) [%d]\n", mWidgetId.c_str(), mInstanceId.c_str(), ret );
234 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::PauseWidget: Widget is paused (%s, %s)\n", mWidgetId.c_str(), mInstanceId.c_str() );
239 bool WidgetView::ResumeWidget()
241 int ret = widget_instance_resume( mInstanceId.c_str() );
244 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::ResumeWidget: Fail to resume widget(%s, %s) [%d]\n", mWidgetId.c_str(), mInstanceId.c_str(), ret );
248 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::ResumeWidget: Widget is resumed (%s, %s)\n", mWidgetId.c_str(), mInstanceId.c_str() );
253 const std::string& WidgetView::GetWidgetId() const
258 const std::string& WidgetView::GetInstanceId() const
263 const std::string& WidgetView::GetContentInfo()
265 widget_instance_h instance;
266 char* contentInfo = NULL;
268 mContentInfo.clear();
270 if( mWidgetId.empty() || mInstanceId.empty() )
272 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::GetContentInfo: Widget id (%s) or instance id (%s) is invalid.\n", mWidgetId.c_str(), mInstanceId.c_str() );
276 instance = widget_instance_get_instance( mWidgetId.c_str(), mInstanceId.c_str() );
279 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::GetContentInfo: widget_instance_get_instance is failed. [%s]\n", mInstanceId.c_str() );
283 if( widget_instance_get_content( instance, &contentInfo ) < 0 )
285 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::GetContentInfo: Failed to get content of widget. [%s]\n", mInstanceId.c_str() );
289 mContentInfo = reinterpret_cast< char* >( contentInfo );
294 const std::string& WidgetView::GetTitle()
296 //ToDo: We should add some codes by considering widget_viewer_evas
299 mTitle = widget_service_get_name( mWidgetId.c_str(), NULL );
302 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::GetTitle: title = %s\n", mTitle.c_str() );
307 float WidgetView::GetUpdatePeriod() const
309 return mUpdatePeriod;
312 bool WidgetView::CancelTouchEvent()
316 tizen_remote_surface_transfer_touch_cancel( mRemoteSurface );
323 void WidgetView::ShowPreview( bool show )
325 if( mPreviewImage && show != mPreviewVisible )
327 mPreviewVisible = show;
328 mPreviewImage.SetVisible( show );
332 bool WidgetView::IsPreviewVisible()
334 return mPreviewVisible;
337 void WidgetView::ShowStateText( bool show )
339 if( mStateText && mStateTextVisible != show )
341 mStateTextVisible = show;
342 mStateText.SetVisible( show );
346 bool WidgetView::IsStateTextVisible()
348 return mStateTextVisible;
351 void WidgetView::ActivateFaultedWidget()
355 // Esable preview and text
356 if( mPreviewVisible )
358 mPreviewImage.SetVisible( true );
361 if( mStateTextVisible )
363 mStateText.SetVisible( true );
366 // launch widget again
367 mPid = widget_instance_launch( mInstanceId.c_str(), (char *)mContentInfo.c_str(), mWidth, mHeight );
370 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::ActivateFaultedWidget: widget_instance_launch is failed. [%s]\n", mWidgetId.c_str() );
373 Dali::WidgetView::WidgetView handle( GetOwner() );
374 mWidgetCreationAbortedSignal.Emit( handle );
379 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::ActivateFaultedWidget: widget_instance_launch is called. [%s, mPid = %d]\n", mWidgetId.c_str(), mPid );
383 bool WidgetView::IsWidgetFaulted()
385 return mPid < 0 ? true : false;
388 void WidgetView::SetPermanentDelete( bool permanentDelete )
390 mPermanentDelete = permanentDelete;
393 bool WidgetView::IsPermanentDelete()
395 return mPermanentDelete;
398 void WidgetView::CreateWidgetImageView()
401 mImageSource = Dali::NativeImageSource::New( source );
402 Dali::NativeImage image = Dali::NativeImage::New( *mImageSource );
404 mWidgetImageView = Dali::Toolkit::ImageView::New( image );
406 mWidgetImageView.SetParentOrigin( ParentOrigin::CENTER );
407 mWidgetImageView.SetAnchorPoint( AnchorPoint::CENTER );
408 mWidgetImageView.SetSize( mWidth, mHeight );
410 Self().Add( mWidgetImageView );
412 // Disable preview and text
413 if( mPreviewVisible )
415 mPreviewImage.SetVisible( false );
418 if( mStateTextVisible )
420 mStateText.SetVisible( false );
424 Dali::WidgetView::WidgetView handle( GetOwner() );
425 mWidgetAddedSignal.Emit( handle );
427 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::AddObjectView: ObjectView is added.\n" );
430 void WidgetView::RemoveObjectView()
432 // Enable preview and text
433 if( mPreviewVisible )
435 mPreviewImage.SetVisible( true );
438 if( mStateTextVisible )
440 mStateText.SetVisible( true );
444 Dali::WidgetView::WidgetView handle( GetOwner() );
445 mWidgetDeletedSignal.Emit( handle );
447 mWidgetImageView.Reset();
449 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::RemoveObjectView: ObjectView is removed.\n" );
452 void WidgetView::SendWidgetEvent( int event )
454 Dali::WidgetView::WidgetView handle( GetOwner() );
456 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::SendWidgetEvent: event = %d widget = %s\n", event, mWidgetId.c_str() );
461 case WIDGET_INSTANCE_EVENT_UPDATE:
463 mWidgetContentUpdatedSignal.Emit( handle );
466 case WIDGET_INSTANCE_EVENT_PERIOD_CHANGED:
468 mWidgetUpdatePeriodChangedSignal.Emit( handle );
471 case WIDGET_INSTANCE_EVENT_FAULT:
473 mWidgetFaultedSignal.Emit( handle );
483 bool WidgetView::DoConnectSignal( BaseObject* object, ConnectionTrackerInterface* tracker, const std::string& signalName, FunctorDelegate* functor )
485 Dali::BaseHandle handle( object );
487 bool connected( true );
488 Dali::WidgetView::WidgetView widgetView = Dali::WidgetView::WidgetView::DownCast( handle );
490 if( strcmp( signalName.c_str(), SIGNAL_WIDGET_ADDED ) == 0 )
492 widgetView.WidgetAddedSignal().Connect( tracker, functor );
494 else if( strcmp( signalName.c_str(), SIGNAL_WIDGET_DELETED ) == 0 )
496 widgetView.WidgetDeletedSignal().Connect( tracker, functor );
498 else if( strcmp( signalName.c_str(), SIGNAL_WIDGET_CREATION_ABORTED ) == 0 )
500 widgetView.WidgetCreationAbortedSignal().Connect( tracker, functor );
502 else if( strcmp( signalName.c_str(), SIGNAL_WIDGET_CONTENT_UPDATED ) == 0 )
504 widgetView.WidgetContentUpdatedSignal().Connect( tracker, functor );
506 else if( strcmp( signalName.c_str(), SIGNAL_WIDGET_UPDATE_PERIOD_CHANGED ) == 0 )
508 widgetView.WidgetUpdatePeriodChangedSignal().Connect( tracker, functor );
510 else if( strcmp( signalName.c_str(), SIGNAL_WIDGET_FAULTED ) == 0 )
512 widgetView.WidgetFaultedSignal().Connect( tracker, functor );
516 // signalName does not match any signal
523 bool WidgetView::DoAction( BaseObject* object, const std::string& actionName, const Property::Map& attributes )
527 Dali::BaseHandle handle( object );
528 Dali::WidgetView::WidgetView widgetView = Dali::WidgetView::WidgetView::DownCast( handle );
535 WidgetView& impl = GetImplementation( widgetView );
537 if( strcmp( actionName.c_str(), ACTION_WIDGETVIEW_PAUSE_WIDGET ) == 0 )
541 else if( strcmp( actionName.c_str(), ACTION_WIDGETVIEW_RESUME_WIDGET ) == 0 )
545 else if( strcmp( actionName.c_str(), ACTION_WIDGETVIEW_CANCEL_TOUCH_EVENT ) == 0 )
547 impl.CancelTouchEvent();
549 else if( strcmp( actionName.c_str(), ACTION_WIDGETVIEW_ACTIVATE_FAULTED_WIDGET ) == 0 )
551 impl.ActivateFaultedWidget();
561 void WidgetView::SetProperty( BaseObject* object, Property::Index index, const Property::Value& value )
563 Dali::WidgetView::WidgetView widgetView = Dali::WidgetView::WidgetView::DownCast( Dali::BaseHandle( object ) );
567 WidgetView& impl = GetImplementation( widgetView );
571 case Dali::WidgetView::WidgetView::Property::PREVIEW:
574 if( value.Get( previewEnabled ) )
576 impl.ShowPreview( previewEnabled );
580 case Dali::WidgetView::WidgetView::Property::LOADING_TEXT:
583 if( value.Get( textEnabled ) )
585 impl.ShowStateText( textEnabled );
589 case Dali::WidgetView::WidgetView::Property::PERMANENT_DELETE:
592 if( value.Get( del ) )
594 impl.SetPermanentDelete( del );
602 Property::Value WidgetView::GetProperty( BaseObject* object, Property::Index index )
604 Property::Value value;
605 Dali::WidgetView::WidgetView widgetView = Dali::WidgetView::WidgetView::DownCast( Dali::BaseHandle( object ) );
609 WidgetView& impl = GetImplementation( widgetView );
613 case Dali::WidgetView::WidgetView::Property::WIDGET_ID:
615 value = impl.GetWidgetId();
618 case Dali::WidgetView::WidgetView::Property::INSTANCE_ID:
620 value = impl.GetInstanceId();
623 case Dali::WidgetView::WidgetView::Property::CONTENT_INFO:
625 value = impl.GetContentInfo();
628 case Dali::WidgetView::WidgetView::Property::TITLE:
630 value = impl.GetTitle();
633 case Dali::WidgetView::WidgetView::Property::UPDATE_PERIOD:
635 value = impl.GetUpdatePeriod();
638 case Dali::WidgetView::WidgetView::Property::PREVIEW:
640 value = impl.IsPreviewVisible();
643 case Dali::WidgetView::WidgetView::Property::LOADING_TEXT:
645 value = impl.IsStateTextVisible();
648 case Dali::WidgetView::WidgetView::Property::WIDGET_STATE_FAULTED:
650 value = impl.IsWidgetFaulted();
653 case Dali::WidgetView::WidgetView::Property::PERMANENT_DELETE:
655 value = impl.IsPermanentDelete();
664 Dali::WidgetView::WidgetView::WidgetViewSignalType& WidgetView::WidgetAddedSignal()
666 return mWidgetAddedSignal;
669 Dali::WidgetView::WidgetView::WidgetViewSignalType& WidgetView::WidgetDeletedSignal()
671 return mWidgetDeletedSignal;
674 Dali::WidgetView::WidgetView::WidgetViewSignalType& WidgetView::WidgetCreationAbortedSignal()
676 return mWidgetCreationAbortedSignal;
679 Dali::WidgetView::WidgetView::WidgetViewSignalType& WidgetView::WidgetContentUpdatedSignal()
681 return mWidgetContentUpdatedSignal;
684 Dali::WidgetView::WidgetView::WidgetViewSignalType& WidgetView::WidgetUpdatePeriodChangedSignal()
686 return mWidgetUpdatePeriodChangedSignal;
689 Dali::WidgetView::WidgetView::WidgetViewSignalType& WidgetView::WidgetFaultedSignal()
691 return mWidgetFaultedSignal;
694 void WidgetView::OnInitialize()
696 char* instanceId = NULL;
697 char* previewPath = NULL;
698 std::string previewImage;
699 widget_size_type_e sizeType;
701 int ret = widget_instance_create( mWidgetId.c_str(), &instanceId );
702 if( ret < 0 || !instanceId )
704 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::OnInitialize: widget_instance_create is failed [%s].\n", mWidgetId.c_str() );
708 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::OnInitialize: widget_instance_create is called. [widget id = %s, instance id = %s]\n",
709 mWidgetId.c_str(), instanceId );
711 mInstanceId = instanceId;
714 widget_service_get_size_type( mWidth, mHeight, &sizeType );
716 previewPath = widget_service_get_preview_image_path( mWidgetId.c_str(), sizeType );
719 previewImage = previewPath;
724 previewImage = tzplatform_getenv( TZ_SYS_SHARE );
725 previewImage.append( WIDGET_VIEW_RESOURCE_DEFAULT_IMG );
728 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::OnInitialize: preview image path = %s\n", previewImage.c_str() );
730 mPreviewImage = Toolkit::ImageView::New( previewImage );
732 mPreviewImage.SetParentOrigin( ParentOrigin::CENTER );
733 mPreviewImage.SetAnchorPoint( AnchorPoint::CENTER );
737 mPreviewImage.SetSize( mWidth, mHeight );
740 Self().SetResizePolicy( ResizePolicy::FIT_TO_CHILDREN, Dimension::ALL_DIMENSIONS );
741 Self().Add( mPreviewImage );
744 // TODO: use po files
745 mStateText = Toolkit::TextLabel::New( "Loading..." );
747 mStateText.SetParentOrigin( ParentOrigin::CENTER );
748 mStateText.SetAnchorPoint( AnchorPoint::CENTER );
749 mStateText.SetProperty( Toolkit::TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
750 mStateText.SetProperty( Toolkit::TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER" );
752 mPreviewImage.Add( mStateText );
755 mPid = widget_instance_launch( instanceId, (char *)mContentInfo.c_str(), mWidth, mHeight );
758 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::OnInitialize: widget_instance_launch is failed. [%s]\n", mWidgetId.c_str() );
761 Dali::WidgetView::WidgetView handle( GetOwner() );
762 mWidgetCreationAbortedSignal.Emit( handle );
767 aul_rsm_viewer_set_surface_handler( mInstanceId.c_str(), &remoteSurfaceHandler, this );
769 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::OnInitialize: widget_instance_launch is called. [%s, mPid = %d]\n", mWidgetId.c_str(), mPid );
773 void WidgetView::OnStageConnection( int depth )
775 Control::OnStageConnection( depth );
778 void WidgetView::OnStageDisconnection()
780 Control::OnStageDisconnection();
783 void WidgetView::OnSizeSet( const Vector3& targetSize )
785 if( mWidgetImageView )
787 mWidgetImageView.SetSize( targetSize );
791 bool WidgetView::IsWidgetImageView()
793 return ( mWidgetImageView )? true: false;
796 void WidgetView::UpdateImageSource( tbm_surface_h source )
798 mImageSource->SetSource( source );
799 Dali::Stage::GetCurrent().KeepRendering( 0.0f );
802 void WidgetView::ConnectSignal( tizen_remote_surface* surface )
804 if( mWidgetImageView )
806 mRemoteSurface = surface;
807 mWidgetImageView.TouchSignal().Connect( this, &WidgetView::OnTouch );
808 mWidgetImageView.WheelEventSignal().Connect( this, &WidgetView::OnWheelEvent );
813 bool WidgetView::OnTouch( Dali::Actor actor, const Dali::TouchData& event )
815 tizen_remote_surface_event_type type = TIZEN_REMOTE_SURFACE_EVENT_TYPE_NONE;
817 switch( event.GetState( 0 ) )
819 case Dali::PointState::UP:
821 type = TIZEN_REMOTE_SURFACE_EVENT_TYPE_MOUSE_UP;
824 case Dali::PointState::DOWN:
826 type = TIZEN_REMOTE_SURFACE_EVENT_TYPE_MOUSE_DOWN;
829 case Dali::PointState::MOTION:
831 type = TIZEN_REMOTE_SURFACE_EVENT_TYPE_MOUSE_MOVE;
840 tizen_remote_surface_transfer_mouse_event( mRemoteSurface,
842 event.GetDeviceId( 0 ),
844 event.GetLocalPosition( 0 ).x,
845 event.GetLocalPosition( 0 ).y,
846 event.GetEllipseRadius( 0 ).x,
847 event.GetEllipseRadius( 0 ).y,
848 event.GetPressure( 0 ),
849 event.GetAngle( 0 ).degree,
850 TIZEN_INPUT_DEVICE_CLAS_MOUSE,
851 TIZEN_INPUT_DEVICE_SUBCLAS_NONE,
858 bool WidgetView::OnWheelEvent( Dali::Actor actor, const Dali::WheelEvent& event )
860 tizen_remote_surface_transfer_mouse_wheel( mRemoteSurface,
863 TIZEN_INPUT_DEVICE_CLAS_MOUSE,
864 TIZEN_INPUT_DEVICE_SUBCLAS_NONE,
871 Vector3 WidgetView::GetNaturalSize()
877 if( size.x > 0 && size.y > 0 )
879 size.z = std::min( size.x, size.y );
884 return Control::GetNaturalSize();
888 float WidgetView::GetHeightForWidth( float width )
890 if( mWidth > 0 && mHeight > 0 )
892 return GetHeightForWidthBase( width );
896 return Control::GetHeightForWidthBase( width );
900 float WidgetView::GetWidthForHeight( float height )
902 if( mWidth > 0 && mHeight > 0 )
904 return GetWidthForHeightBase( height );
908 return Control::GetWidthForHeightBase( height );
912 } // namespace Internal
914 } // namespace WidgetView