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 )
192 WidgetView::WidgetView( const std::string& widgetId, const std::string& contentInfo, int width, int height, float updatePeriod )
193 : Control( ControlBehaviour( REQUIRES_TOUCH_EVENTS ) ),
194 mWidgetId( widgetId ),
196 mContentInfo( contentInfo ),
202 mUpdatePeriod( updatePeriod ),
203 mPreviewVisible( true ),
204 mStateTextVisible( true ),
205 mPermanentDelete( true )
209 WidgetView::~WidgetView()
211 if( !mWidgetId.empty() && !mInstanceId.empty() )
213 widget_instance_terminate( mInstanceId.c_str() );
215 if( mPermanentDelete )
217 widget_instance_destroy( mInstanceId.c_str() );
223 bundle_free( mBundle );
227 bool WidgetView::PauseWidget()
229 int ret = widget_instance_pause( mInstanceId.c_str() );
232 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::PauseWidget: Fail to pause widget(%s, %s) [%d]\n", mWidgetId.c_str(), mInstanceId.c_str(), ret );
236 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::PauseWidget: Widget is paused (%s, %s)\n", mWidgetId.c_str(), mInstanceId.c_str() );
241 bool WidgetView::ResumeWidget()
243 int ret = widget_instance_resume( mInstanceId.c_str() );
246 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::ResumeWidget: Fail to resume widget(%s, %s) [%d]\n", mWidgetId.c_str(), mInstanceId.c_str(), ret );
250 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::ResumeWidget: Widget is resumed (%s, %s)\n", mWidgetId.c_str(), mInstanceId.c_str() );
255 const std::string& WidgetView::GetWidgetId() const
260 const std::string& WidgetView::GetInstanceId() const
265 const std::string& WidgetView::GetContentInfo()
267 widget_instance_h instance;
268 char* contentInfo = NULL;
270 mContentInfo.clear();
272 if( mWidgetId.empty() || mInstanceId.empty() )
274 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::GetContentInfo: Widget id (%s) or instance id (%s) is invalid.\n", mWidgetId.c_str(), mInstanceId.c_str() );
278 instance = widget_instance_get_instance( mWidgetId.c_str(), mInstanceId.c_str() );
281 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::GetContentInfo: widget_instance_get_instance is failed. [%s]\n", mInstanceId.c_str() );
285 if( widget_instance_get_content( instance, &contentInfo ) < 0 )
287 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::GetContentInfo: Failed to get content of widget. [%s]\n", mInstanceId.c_str() );
291 mContentInfo = reinterpret_cast< char* >( contentInfo );
296 const std::string& WidgetView::GetTitle()
298 //ToDo: We should add some codes by considering widget_viewer_evas
301 mTitle = widget_service_get_name( mWidgetId.c_str(), NULL );
304 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::GetTitle: title = %s\n", mTitle.c_str() );
309 float WidgetView::GetUpdatePeriod() const
311 return mUpdatePeriod;
314 bool WidgetView::CancelTouchEvent()
318 tizen_remote_surface_transfer_touch_cancel( mRemoteSurface );
325 void WidgetView::ShowPreview( bool show )
327 if( mPreviewImage && show != mPreviewVisible )
329 mPreviewVisible = show;
330 mPreviewImage.SetVisible( show );
334 bool WidgetView::IsPreviewVisible()
336 return mPreviewVisible;
339 void WidgetView::ShowStateText( bool show )
341 if( mStateText && mStateTextVisible != show )
343 mStateTextVisible = show;
344 mStateText.SetVisible( show );
348 bool WidgetView::IsStateTextVisible()
350 return mStateTextVisible;
353 void WidgetView::ActivateFaultedWidget()
357 // Esable preview and text
358 if( mPreviewVisible )
360 mPreviewImage.SetVisible( true );
363 if( mStateTextVisible )
365 mStateText.SetVisible( true );
368 // launch widget again
369 mPid = widget_instance_launch( mInstanceId.c_str(), (char *)mContentInfo.c_str(), mWidth, mHeight );
372 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::ActivateFaultedWidget: widget_instance_launch is failed. [%s]\n", mWidgetId.c_str() );
375 Dali::WidgetView::WidgetView handle( GetOwner() );
376 mWidgetCreationAbortedSignal.Emit( handle );
381 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::ActivateFaultedWidget: widget_instance_launch is called. [%s, mPid = %d]\n", mWidgetId.c_str(), mPid );
385 bool WidgetView::IsWidgetFaulted()
387 return mPid < 0 ? true : false;
390 void WidgetView::SetPermanentDelete( bool permanentDelete )
392 mPermanentDelete = permanentDelete;
395 bool WidgetView::IsPermanentDelete()
397 return mPermanentDelete;
400 void WidgetView::CreateWidgetImageView()
403 mImageSource = Dali::NativeImageSource::New( source );
404 Dali::NativeImage image = Dali::NativeImage::New( *mImageSource );
406 mWidgetImageView = Dali::Toolkit::ImageView::New( image );
408 mWidgetImageView.SetParentOrigin( ParentOrigin::CENTER );
409 mWidgetImageView.SetAnchorPoint( AnchorPoint::CENTER );
410 mWidgetImageView.SetSize( mWidth, mHeight );
412 Self().Add( mWidgetImageView );
414 // Disable preview and text
415 if( mPreviewVisible )
417 mPreviewImage.SetVisible( false );
420 if( mStateTextVisible )
422 mStateText.SetVisible( false );
426 Dali::WidgetView::WidgetView handle( GetOwner() );
427 mWidgetAddedSignal.Emit( handle );
429 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::AddObjectView: ObjectView is added.\n" );
432 void WidgetView::RemoveObjectView()
434 // Enable preview and text
435 if( mPreviewVisible )
437 mPreviewImage.SetVisible( true );
440 if( mStateTextVisible )
442 mStateText.SetVisible( true );
446 Dali::WidgetView::WidgetView handle( GetOwner() );
447 mWidgetDeletedSignal.Emit( handle );
449 mWidgetImageView.Reset();
451 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::RemoveObjectView: ObjectView is removed.\n" );
454 void WidgetView::SendWidgetEvent( int event )
456 Dali::WidgetView::WidgetView handle( GetOwner() );
458 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::SendWidgetEvent: event = %d widget = %s\n", event, mWidgetId.c_str() );
463 case WIDGET_INSTANCE_EVENT_UPDATE:
465 mWidgetContentUpdatedSignal.Emit( handle );
468 case WIDGET_INSTANCE_EVENT_PERIOD_CHANGED:
470 mWidgetUpdatePeriodChangedSignal.Emit( handle );
473 case WIDGET_INSTANCE_EVENT_FAULT:
475 mWidgetFaultedSignal.Emit( handle );
485 bool WidgetView::DoConnectSignal( BaseObject* object, ConnectionTrackerInterface* tracker, const std::string& signalName, FunctorDelegate* functor )
487 Dali::BaseHandle handle( object );
489 bool connected( true );
490 Dali::WidgetView::WidgetView widgetView = Dali::WidgetView::WidgetView::DownCast( handle );
492 if( strcmp( signalName.c_str(), SIGNAL_WIDGET_ADDED ) == 0 )
494 widgetView.WidgetAddedSignal().Connect( tracker, functor );
496 else if( strcmp( signalName.c_str(), SIGNAL_WIDGET_DELETED ) == 0 )
498 widgetView.WidgetDeletedSignal().Connect( tracker, functor );
500 else if( strcmp( signalName.c_str(), SIGNAL_WIDGET_CREATION_ABORTED ) == 0 )
502 widgetView.WidgetCreationAbortedSignal().Connect( tracker, functor );
504 else if( strcmp( signalName.c_str(), SIGNAL_WIDGET_CONTENT_UPDATED ) == 0 )
506 widgetView.WidgetContentUpdatedSignal().Connect( tracker, functor );
508 else if( strcmp( signalName.c_str(), SIGNAL_WIDGET_UPDATE_PERIOD_CHANGED ) == 0 )
510 widgetView.WidgetUpdatePeriodChangedSignal().Connect( tracker, functor );
512 else if( strcmp( signalName.c_str(), SIGNAL_WIDGET_FAULTED ) == 0 )
514 widgetView.WidgetFaultedSignal().Connect( tracker, functor );
518 // signalName does not match any signal
525 bool WidgetView::DoAction( BaseObject* object, const std::string& actionName, const Property::Map& attributes )
529 Dali::BaseHandle handle( object );
530 Dali::WidgetView::WidgetView widgetView = Dali::WidgetView::WidgetView::DownCast( handle );
537 WidgetView& impl = GetImplementation( widgetView );
539 if( strcmp( actionName.c_str(), ACTION_WIDGETVIEW_PAUSE_WIDGET ) == 0 )
543 else if( strcmp( actionName.c_str(), ACTION_WIDGETVIEW_RESUME_WIDGET ) == 0 )
547 else if( strcmp( actionName.c_str(), ACTION_WIDGETVIEW_CANCEL_TOUCH_EVENT ) == 0 )
549 impl.CancelTouchEvent();
551 else if( strcmp( actionName.c_str(), ACTION_WIDGETVIEW_ACTIVATE_FAULTED_WIDGET ) == 0 )
553 impl.ActivateFaultedWidget();
563 void WidgetView::SetProperty( BaseObject* object, Property::Index index, const Property::Value& value )
565 Dali::WidgetView::WidgetView widgetView = Dali::WidgetView::WidgetView::DownCast( Dali::BaseHandle( object ) );
569 WidgetView& impl = GetImplementation( widgetView );
573 case Dali::WidgetView::WidgetView::Property::PREVIEW:
576 if( value.Get( previewEnabled ) )
578 impl.ShowPreview( previewEnabled );
582 case Dali::WidgetView::WidgetView::Property::LOADING_TEXT:
585 if( value.Get( textEnabled ) )
587 impl.ShowStateText( textEnabled );
591 case Dali::WidgetView::WidgetView::Property::PERMANENT_DELETE:
594 if( value.Get( del ) )
596 impl.SetPermanentDelete( del );
604 Property::Value WidgetView::GetProperty( BaseObject* object, Property::Index index )
606 Property::Value value;
607 Dali::WidgetView::WidgetView widgetView = Dali::WidgetView::WidgetView::DownCast( Dali::BaseHandle( object ) );
611 WidgetView& impl = GetImplementation( widgetView );
615 case Dali::WidgetView::WidgetView::Property::WIDGET_ID:
617 value = impl.GetWidgetId();
620 case Dali::WidgetView::WidgetView::Property::INSTANCE_ID:
622 value = impl.GetInstanceId();
625 case Dali::WidgetView::WidgetView::Property::CONTENT_INFO:
627 value = impl.GetContentInfo();
630 case Dali::WidgetView::WidgetView::Property::TITLE:
632 value = impl.GetTitle();
635 case Dali::WidgetView::WidgetView::Property::UPDATE_PERIOD:
637 value = impl.GetUpdatePeriod();
640 case Dali::WidgetView::WidgetView::Property::PREVIEW:
642 value = impl.IsPreviewVisible();
645 case Dali::WidgetView::WidgetView::Property::LOADING_TEXT:
647 value = impl.IsStateTextVisible();
650 case Dali::WidgetView::WidgetView::Property::WIDGET_STATE_FAULTED:
652 value = impl.IsWidgetFaulted();
655 case Dali::WidgetView::WidgetView::Property::PERMANENT_DELETE:
657 value = impl.IsPermanentDelete();
666 Dali::WidgetView::WidgetView::WidgetViewSignalType& WidgetView::WidgetAddedSignal()
668 return mWidgetAddedSignal;
671 Dali::WidgetView::WidgetView::WidgetViewSignalType& WidgetView::WidgetDeletedSignal()
673 return mWidgetDeletedSignal;
676 Dali::WidgetView::WidgetView::WidgetViewSignalType& WidgetView::WidgetCreationAbortedSignal()
678 return mWidgetCreationAbortedSignal;
681 Dali::WidgetView::WidgetView::WidgetViewSignalType& WidgetView::WidgetContentUpdatedSignal()
683 return mWidgetContentUpdatedSignal;
686 Dali::WidgetView::WidgetView::WidgetViewSignalType& WidgetView::WidgetUpdatePeriodChangedSignal()
688 return mWidgetUpdatePeriodChangedSignal;
691 Dali::WidgetView::WidgetView::WidgetViewSignalType& WidgetView::WidgetFaultedSignal()
693 return mWidgetFaultedSignal;
696 void WidgetView::OnInitialize()
698 char* instanceId = NULL;
699 char* previewPath = NULL;
700 std::string previewImage;
701 widget_size_type_e sizeType;
703 int ret = widget_instance_create( mWidgetId.c_str(), &instanceId );
704 if( ret < 0 || !instanceId )
706 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::OnInitialize: widget_instance_create is failed [%s].\n", mWidgetId.c_str() );
710 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::OnInitialize: widget_instance_create is called. [widget id = %s, instance id = %s]\n",
711 mWidgetId.c_str(), instanceId );
713 mInstanceId = instanceId;
716 widget_service_get_size_type( mWidth, mHeight, &sizeType );
718 previewPath = widget_service_get_preview_image_path( mWidgetId.c_str(), sizeType );
721 previewImage = previewPath;
726 previewImage = tzplatform_getenv( TZ_SYS_SHARE );
727 previewImage.append( WIDGET_VIEW_RESOURCE_DEFAULT_IMG );
730 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::OnInitialize: preview image path = %s\n", previewImage.c_str() );
732 mPreviewImage = Toolkit::ImageView::New( previewImage );
734 mPreviewImage.SetParentOrigin( ParentOrigin::CENTER );
735 mPreviewImage.SetAnchorPoint( AnchorPoint::CENTER );
739 mPreviewImage.SetSize( mWidth, mHeight );
742 Self().SetResizePolicy( ResizePolicy::FIT_TO_CHILDREN, Dimension::ALL_DIMENSIONS );
743 Self().Add( mPreviewImage );
746 // TODO: use po files
747 mStateText = Toolkit::TextLabel::New( "Loading..." );
749 mStateText.SetParentOrigin( ParentOrigin::CENTER );
750 mStateText.SetAnchorPoint( AnchorPoint::CENTER );
751 mStateText.SetProperty( Toolkit::TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
752 mStateText.SetProperty( Toolkit::TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER" );
754 mPreviewImage.Add( mStateText );
757 mPid = widget_instance_launch( instanceId, (char *)mContentInfo.c_str(), mWidth, mHeight );
760 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::OnInitialize: widget_instance_launch is failed. [%s]\n", mWidgetId.c_str() );
763 Dali::WidgetView::WidgetView handle( GetOwner() );
764 mWidgetCreationAbortedSignal.Emit( handle );
769 aul_rsm_viewer_set_surface_handler( mInstanceId.c_str(), &remoteSurfaceHandler, this );
771 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::OnInitialize: widget_instance_launch is called. [%s, mPid = %d]\n", mWidgetId.c_str(), mPid );
775 void WidgetView::OnStageConnection( int depth )
777 Control::OnStageConnection( depth );
780 void WidgetView::OnStageDisconnection()
782 Control::OnStageDisconnection();
785 void WidgetView::OnSizeSet( const Vector3& targetSize )
787 if( mWidgetImageView )
789 mWidgetImageView.SetSize( targetSize );
793 bool WidgetView::IsWidgetImageView()
795 return ( mWidgetImageView )? true: false;
798 void WidgetView::UpdateImageSource( tbm_surface_h source )
800 mImageSource->SetSource( source );
801 Dali::Stage::GetCurrent().KeepRendering( 0.0f );
804 void WidgetView::ConnectSignal( tizen_remote_surface* surface )
806 if( mWidgetImageView )
808 mRemoteSurface = surface;
809 mWidgetImageView.TouchSignal().Connect( this, &WidgetView::OnTouch );
810 mWidgetImageView.WheelEventSignal().Connect( this, &WidgetView::OnWheelEvent );
815 bool WidgetView::OnTouch( Dali::Actor actor, const Dali::TouchData& event )
817 tizen_remote_surface_event_type type = TIZEN_REMOTE_SURFACE_EVENT_TYPE_NONE;
819 switch( event.GetState( 0 ) )
821 case Dali::PointState::UP:
823 type = TIZEN_REMOTE_SURFACE_EVENT_TYPE_MOUSE_UP;
826 case Dali::PointState::DOWN:
828 type = TIZEN_REMOTE_SURFACE_EVENT_TYPE_MOUSE_DOWN;
831 case Dali::PointState::MOTION:
833 type = TIZEN_REMOTE_SURFACE_EVENT_TYPE_MOUSE_MOVE;
842 tizen_remote_surface_transfer_mouse_event( mRemoteSurface,
844 event.GetDeviceId( 0 ),
846 event.GetLocalPosition( 0 ).x,
847 event.GetLocalPosition( 0 ).y,
848 event.GetEllipseRadius( 0 ).x,
849 event.GetEllipseRadius( 0 ).y,
850 event.GetPressure( 0 ),
851 event.GetAngle( 0 ).degree,
852 TIZEN_INPUT_DEVICE_CLAS_MOUSE,
853 TIZEN_INPUT_DEVICE_SUBCLAS_NONE,
860 bool WidgetView::OnWheelEvent( Dali::Actor actor, const Dali::WheelEvent& event )
862 tizen_remote_surface_transfer_mouse_wheel( mRemoteSurface,
865 TIZEN_INPUT_DEVICE_CLAS_MOUSE,
866 TIZEN_INPUT_DEVICE_SUBCLAS_NONE,
873 Vector3 WidgetView::GetNaturalSize()
879 if( size.x > 0 && size.y > 0 )
881 size.z = std::min( size.x, size.y );
886 return Control::GetNaturalSize();
890 float WidgetView::GetHeightForWidth( float width )
892 if( mWidth > 0 && mHeight > 0 )
894 return GetHeightForWidthBase( width );
898 return Control::GetHeightForWidthBase( width );
902 float WidgetView::GetWidthForHeight( float height )
904 if( mWidth > 0 && mHeight > 0 )
906 return GetWidthForHeightBase( height );
910 return Control::GetWidthForHeightBase( height );
914 } // namespace Internal
916 } // namespace WidgetView