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 #if defined(DEBUG_ENABLED)
54 Integration::Log::Filter* gWidgetViewLogging = Integration::Log::Filter::New( Debug::Verbose, false, "LOG_WIDGET_VIEW" );
59 return Dali::BaseHandle();
62 // Setup properties, signals and actions using the type-registry.
63 DALI_TYPE_REGISTRATION_BEGIN( Dali::WidgetView::WidgetView, Toolkit::Control, Create );
64 DALI_PROPERTY_REGISTRATION( Dali::WidgetView, WidgetView, "widgetId", BOOLEAN, WIDGET_ID )
65 DALI_PROPERTY_REGISTRATION( Dali::WidgetView, WidgetView, "instanceId", BOOLEAN, INSTANCE_ID )
66 DALI_PROPERTY_REGISTRATION( Dali::WidgetView, WidgetView, "contentInfo", BOOLEAN, CONTENT_INFO )
67 DALI_PROPERTY_REGISTRATION( Dali::WidgetView, WidgetView, "title", BOOLEAN, TITLE )
68 DALI_PROPERTY_REGISTRATION( Dali::WidgetView, WidgetView, "updatePeriod", BOOLEAN, UPDATE_PERIOD )
69 DALI_PROPERTY_REGISTRATION( Dali::WidgetView, WidgetView, "preview", MAP, PREVIEW )
70 DALI_PROPERTY_REGISTRATION( Dali::WidgetView, WidgetView, "loadingText", MAP, LOADING_TEXT )
71 DALI_PROPERTY_REGISTRATION( Dali::WidgetView, WidgetView, "widgetStateFaulted", BOOLEAN, WIDGET_STATE_FAULTED )
72 DALI_PROPERTY_REGISTRATION( Dali::WidgetView, WidgetView, "permanentDelete", BOOLEAN, PERMANENT_DELETE )
75 DALI_SIGNAL_REGISTRATION( Dali::WidgetView, WidgetView, "widgetAdded", SIGNAL_WIDGET_ADDED )
76 DALI_SIGNAL_REGISTRATION( Dali::WidgetView, WidgetView, "widgetDeleted", SIGNAL_WIDGET_DELETED )
77 DALI_SIGNAL_REGISTRATION( Dali::WidgetView, WidgetView, "widgetCreationAborted", SIGNAL_WIDGET_CREATION_ABORTED )
78 DALI_SIGNAL_REGISTRATION( Dali::WidgetView, WidgetView, "widgetContentUpdated", SIGNAL_WIDGET_CONTENT_UPDATED )
79 DALI_SIGNAL_REGISTRATION( Dali::WidgetView, WidgetView, "widgetUpdatePeriodChanged", SIGNAL_WIDGET_UPDATE_PERIOD_CHANGED )
80 DALI_SIGNAL_REGISTRATION( Dali::WidgetView, WidgetView, "widgetFaulted", SIGNAL_WIDGET_FAULTED )
83 DALI_ACTION_REGISTRATION( Dali::WidgetView, WidgetView, "pauseWidget", ACTION_WIDGETVIEW_PAUSE_WIDGET );
84 DALI_ACTION_REGISTRATION( Dali::WidgetView, WidgetView, "resumeWidget", ACTION_WIDGETVIEW_RESUME_WIDGET );
85 DALI_ACTION_REGISTRATION( Dali::WidgetView, WidgetView, "cancelTouchEvent", ACTION_WIDGETVIEW_CANCEL_TOUCH_EVENT );
86 DALI_ACTION_REGISTRATION( Dali::WidgetView, WidgetView, "activateFaultedWidget", ACTION_WIDGETVIEW_ACTIVATE_FAULTED_WIDGET );
88 DALI_TYPE_REGISTRATION_END()
90 struct wl_buffer* preBuffer;
92 const char* const FONT_STYLE( "fontStyle" );
93 const char* const TEXT_POINT_SIZE( "textPointSize" );
94 const char* const TEXT_COLOR( "textColor" );
96 static void OnBufferUpdated( struct tizen_remote_surface *surface, uint32_t type, struct wl_buffer *buffer,
97 int32_t img_file_fd, uint32_t img_file_size, uint32_t time, struct wl_array *keys,
98 const char *appid, const char *instance_id, const int pid, void *data)
100 Dali::WidgetView::Internal::WidgetView* widgetView = static_cast< Dali::WidgetView::Internal::WidgetView* >( data );
104 if( !widgetView->IsWidgetImageView() )
106 tizen_remote_surface_transfer_visibility( surface, TIZEN_REMOTE_SURFACE_VISIBILITY_TYPE_VISIBLE);
108 widgetView->CreateWidgetImageView();
109 widgetView->ConnectSignal( surface );
112 //get tbm surface from buffer
113 tbm_surface_h tbmSurface = static_cast< tbm_surface_h >( wl_buffer_get_user_data( buffer ) );
114 widgetView->UpdateImageSource( tbmSurface );
117 if( preBuffer != NULL && tizen_remote_surface_get_version( surface ) >= TIZEN_REMOTE_SURFACE_RELEASE_SINCE_VERSION )
119 tizen_remote_surface_release( surface, preBuffer );
124 close( img_file_fd );
127 static void OnBufferAdded( const char *appid, const char *instance_id, const int pid, void *data )
131 static void OnSurfaceRemoved( const char *appid, const char *instance_id, const int pid, void *data )
133 Dali::WidgetView::Internal::WidgetView* widgetView = static_cast< Dali::WidgetView::Internal::WidgetView* >( data );
137 widgetView->CloseRemoteSurface();
138 widgetView->RemoveWidgetImage();
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 //EFL app should be pre multiplied image.
396 mWidgetImageView.SetProperty( Toolkit::ImageView::Property::PRE_MULTIPLIED_ALPHA, true );
398 // Disable preview and text
399 if( mPreviewVisible )
401 mPreviewImage.SetVisible( false );
404 if( mStateTextVisible )
406 mStateText.SetVisible( false );
410 Dali::WidgetView::WidgetView handle( GetOwner() );
411 mWidgetAddedSignal.Emit( handle );
413 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::CreateWidgetImageView: Widget image is added.\n" );
416 void WidgetView::RemoveWidgetImage()
419 Dali::WidgetView::WidgetView handle( GetOwner() );
420 mWidgetDeletedSignal.Emit( handle );
422 mWidgetImageView.Reset();
424 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::RemoveWidgetImage: Widget image is removed.\n" );
427 void WidgetView::SendWidgetEvent( int event )
429 Dali::WidgetView::WidgetView handle( GetOwner() );
431 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::SendWidgetEvent: event = %d widget = %s\n", event, mWidgetId.c_str() );
436 case WIDGET_INSTANCE_EVENT_UPDATE:
437 case WIDGET_INSTANCE_EVENT_EXTRA_UPDATED:
439 mWidgetContentUpdatedSignal.Emit( handle );
442 case WIDGET_INSTANCE_EVENT_PERIOD_CHANGED:
444 mWidgetUpdatePeriodChangedSignal.Emit( handle );
447 case WIDGET_INSTANCE_EVENT_FAULT:
449 mWidgetFaultedSignal.Emit( handle );
459 bool WidgetView::DoConnectSignal( BaseObject* object, ConnectionTrackerInterface* tracker, const std::string& signalName, FunctorDelegate* functor )
461 Dali::BaseHandle handle( object );
463 bool connected( true );
464 Dali::WidgetView::WidgetView widgetView = Dali::WidgetView::WidgetView::DownCast( handle );
466 if( strcmp( signalName.c_str(), SIGNAL_WIDGET_ADDED ) == 0 )
468 widgetView.WidgetAddedSignal().Connect( tracker, functor );
470 else if( strcmp( signalName.c_str(), SIGNAL_WIDGET_DELETED ) == 0 )
472 widgetView.WidgetDeletedSignal().Connect( tracker, functor );
474 else if( strcmp( signalName.c_str(), SIGNAL_WIDGET_CREATION_ABORTED ) == 0 )
476 widgetView.WidgetCreationAbortedSignal().Connect( tracker, functor );
478 else if( strcmp( signalName.c_str(), SIGNAL_WIDGET_CONTENT_UPDATED ) == 0 )
480 widgetView.WidgetContentUpdatedSignal().Connect( tracker, functor );
482 else if( strcmp( signalName.c_str(), SIGNAL_WIDGET_UPDATE_PERIOD_CHANGED ) == 0 )
484 widgetView.WidgetUpdatePeriodChangedSignal().Connect( tracker, functor );
486 else if( strcmp( signalName.c_str(), SIGNAL_WIDGET_FAULTED ) == 0 )
488 widgetView.WidgetFaultedSignal().Connect( tracker, functor );
492 // signalName does not match any signal
499 bool WidgetView::DoAction( BaseObject* object, const std::string& actionName, const Property::Map& attributes )
503 Dali::BaseHandle handle( object );
504 Dali::WidgetView::WidgetView widgetView = Dali::WidgetView::WidgetView::DownCast( handle );
511 WidgetView& impl = GetImplementation( widgetView );
513 if( strcmp( actionName.c_str(), ACTION_WIDGETVIEW_PAUSE_WIDGET ) == 0 )
517 else if( strcmp( actionName.c_str(), ACTION_WIDGETVIEW_RESUME_WIDGET ) == 0 )
521 else if( strcmp( actionName.c_str(), ACTION_WIDGETVIEW_CANCEL_TOUCH_EVENT ) == 0 )
523 impl.CancelTouchEvent();
525 else if( strcmp( actionName.c_str(), ACTION_WIDGETVIEW_ACTIVATE_FAULTED_WIDGET ) == 0 )
527 impl.ActivateFaultedWidget();
537 void WidgetView::SetProperty( BaseObject* object, Property::Index index, const Property::Value& value )
539 Dali::WidgetView::WidgetView widgetView = Dali::WidgetView::WidgetView::DownCast( Dali::BaseHandle( object ) );
543 WidgetView& impl = GetImplementation( widgetView );
547 case Dali::WidgetView::WidgetView::Property::PREVIEW:
551 if( value.Get( previewEnabled ) )
553 impl.ShowPreview( previewEnabled );
557 case Dali::WidgetView::WidgetView::Property::LOADING_TEXT:
562 if( value.Get( textEnabled ) )
564 impl.ShowStateText( textEnabled );
566 else if( value.Get( map ) )
568 impl.SetLoadingTextPropertyMap( map );
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_toolkit_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 = WIDGET_VIEW_RESOURCE_DEFAULT_IMG;
711 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::OnInitialize: preview image path = %s\n", previewImage.c_str() );
714 mPreviewActor = Dali::Actor::New();
715 mPreviewActor.SetParentOrigin( ParentOrigin::CENTER );
716 mPreviewActor.SetAnchorPoint( AnchorPoint::CENTER );
717 mPreviewActor.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
719 mPreviewImage = Toolkit::ImageView::New( previewImage );
720 mPreviewImage.SetParentOrigin( ParentOrigin::CENTER );
721 mPreviewImage.SetAnchorPoint( AnchorPoint::CENTER );
722 mPreviewImage.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
724 Self().SetResizePolicy( ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS );
725 Self().SetSize( mWidth, mHeight );
727 Self().Add( mPreviewActor );
728 mPreviewActor.Add( mPreviewImage );
730 mStateTextActor = Dali::Actor::New();
731 mStateTextActor.SetParentOrigin( ParentOrigin::CENTER );
732 mStateTextActor.SetAnchorPoint( AnchorPoint::CENTER );
733 mStateTextActor.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
736 // TODO: use po files
737 mStateText = Toolkit::TextLabel::New( "Loading..." );
738 mStateText.SetParentOrigin( ParentOrigin::CENTER );
739 mStateText.SetAnchorPoint( AnchorPoint::CENTER );
740 mStateText.SetProperty( Toolkit::TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
741 mStateText.SetProperty( Toolkit::TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER" );
742 mStateText.SetProperty( Toolkit::TextLabel::Property::TEXT_COLOR, Dali::Color::WHITE );
743 mStateText.SetProperty( Toolkit::TextLabel::Property::FONT_STYLE, "Bold" );
745 mPreviewActor.Add( mStateTextActor );
746 mStateTextActor.Add( mStateText );
749 mPid = widget_instance_launch( instanceId, (char *)mContentInfo.c_str(), mWidth, mHeight );
752 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::OnInitialize: widget_instance_launch is failed. [%s]\n", mWidgetId.c_str() );
755 Dali::WidgetView::WidgetView handle( GetOwner() );
756 mWidgetCreationAbortedSignal.Emit( handle );
761 ops.updated_cb = OnBufferUpdated;
762 ops.removed_cb = OnSurfaceRemoved;
763 ops.added_cb = OnBufferAdded;
764 mWatcherHandle = screen_connector_toolkit_add(&ops, (char *)instanceId, SCREEN_CONNECTOR_SCREEEN_TYPE_WIDGET, this);
765 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::OnInitialize: widget_instance_launch is called. [%s, mPid = %d]\n", mWidgetId.c_str(), mPid );
769 void WidgetView::OnStageConnection( int depth )
771 Control::OnStageConnection( depth );
774 void WidgetView::OnStageDisconnection()
776 Control::OnStageDisconnection();
779 void WidgetView::OnSizeSet( const Vector3& targetSize )
781 if( mWidgetImageView )
783 mWidgetImageView.SetSize( targetSize );
787 bool WidgetView::IsWidgetImageView()
789 return ( mWidgetImageView )? true: false;
792 void WidgetView::UpdateImageSource( tbm_surface_h source )
794 mImageSource->SetSource( source );
795 Dali::Stage::GetCurrent().KeepRendering( 0.0f );
798 void WidgetView::ConnectSignal( tizen_remote_surface* surface )
800 if( mWidgetImageView && surface )
802 mRemoteSurface = surface;
804 Self().TouchSignal().Connect( this, &WidgetView::OnTouch );
805 Self().WheelEventSignal().Connect( this, &WidgetView::OnWheelEvent );
810 bool WidgetView::OnTouch( Dali::Actor actor, const Dali::TouchData& event )
812 tizen_remote_surface_event_type type = TIZEN_REMOTE_SURFACE_EVENT_TYPE_NONE;
814 if( event.GetPointCount() == 0 || mRemoteSurface == NULL )
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;
844 if( type == TIZEN_REMOTE_SURFACE_EVENT_TYPE_MOUSE_MOVE )
849 Vector2 localPos = event.GetLocalPosition( 0 );
851 tizen_remote_surface_transfer_mouse_event( mRemoteSurface,
857 wl_fixed_from_double( event.GetEllipseRadius( 0 ).x ),
858 wl_fixed_from_double( event.GetEllipseRadius( 0 ).y ),
859 wl_fixed_from_double( event.GetPressure( 0 ) ),
860 wl_fixed_from_double( event.GetAngle( 0 ).degree ),
861 TIZEN_INPUT_DEVICE_CLAS_TOUCHSCREEN,
862 TIZEN_INPUT_DEVICE_SUBCLAS_NONE,
869 bool WidgetView::OnWheelEvent( Dali::Actor actor, const Dali::WheelEvent& event )
871 if( mRemoteSurface == NULL )
875 //ToDo: We should check TIZEN_INPUT_DEVICE_CLAS_MOUSE
876 tizen_remote_surface_transfer_mouse_wheel( mRemoteSurface,
879 TIZEN_INPUT_DEVICE_CLAS_MOUSE,
880 TIZEN_INPUT_DEVICE_SUBCLAS_NONE,
887 Vector3 WidgetView::GetNaturalSize()
893 if( size.x > 0 && size.y > 0 )
895 size.z = std::min( size.x, size.y );
900 return Control::GetNaturalSize();
904 float WidgetView::GetHeightForWidth( float width )
906 if( mWidth > 0 && mHeight > 0 )
908 return GetHeightForWidthBase( width );
912 return Control::GetHeightForWidthBase( width );
916 float WidgetView::GetWidthForHeight( float height )
918 if( mWidth > 0 && mHeight > 0 )
920 return GetWidthForHeightBase( height );
924 return Control::GetWidthForHeightBase( height );
928 void WidgetView::CloseRemoteSurface()
930 screen_connector_toolkit_remove( mWatcherHandle );
931 mRemoteSurface = NULL;
934 void WidgetView::SetLoadingTextPropertyMap( Property::Map map )
938 Property::Value* fontStyle = map.Find( FONT_STYLE );
941 if( fontStyle && fontStyle->Get( style ) )
943 mStateText.SetProperty( Toolkit::TextLabel::Property::FONT_STYLE, style );
946 Property::Value* textPointSize = map.Find( TEXT_POINT_SIZE );
949 if( textPointSize && textPointSize->Get( size ) )
951 mStateText.SetProperty( Toolkit::TextLabel::Property::POINT_SIZE, size );
954 Property::Value* textColor = map.Find( TEXT_COLOR );
957 if( textColor && textColor->Get( color ) )
959 mStateText.SetProperty( Toolkit::TextLabel::Property::TEXT_COLOR, color );
964 } // namespace Internal
966 } // namespace WidgetView