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 void OnSurfaceUpdate( struct tizen_remote_surface* surface, wl_buffer* buffer, uint32_t time, 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 OnSurfaceMissing( struct tizen_remote_surface* surface, void* data )
114 //ToDo: WidgetDeletedSignal
118 static struct aul_rsm_handler_s remoteSurfaceHandler = {
123 } // unnamed namespace
125 Dali::WidgetView::WidgetView WidgetView::New( const std::string& widgetId, const std::string& contentInfo, int width, int height, float updatePeriod )
127 // Create the implementation, temporarily owned on stack
128 IntrusivePtr< WidgetView > internalWidgetView = new WidgetView( widgetId, contentInfo, width, height, updatePeriod );
130 // Pass ownership to CustomActor
131 Dali::WidgetView::WidgetView widgetView( *internalWidgetView );
133 // Second-phase init of the implementation
134 // This can only be done after the CustomActor connection has been made...
135 internalWidgetView->Initialize();
140 WidgetView::WidgetView()
141 : Control( ControlBehaviour( REQUIRES_TOUCH_EVENTS ) ),
150 mUpdatePeriod( 0.0 ),
151 mPreviewVisible( true ),
152 mStateTextVisible( true ),
153 mPermanentDelete( true ),
154 mRemoteSurface( NULL )
158 WidgetView::WidgetView( const std::string& widgetId, const std::string& contentInfo, int width, int height, float updatePeriod )
159 : Control( ControlBehaviour( REQUIRES_TOUCH_EVENTS ) ),
160 mWidgetId( widgetId ),
162 mContentInfo( contentInfo ),
168 mUpdatePeriod( updatePeriod ),
169 mPreviewVisible( true ),
170 mStateTextVisible( true ),
171 mPermanentDelete( true ),
172 mRemoteSurface( NULL )
176 WidgetView::~WidgetView()
178 if( !mWidgetId.empty() && !mInstanceId.empty() )
180 widget_instance_terminate( mInstanceId.c_str() );
182 if( mPermanentDelete )
184 widget_instance_destroy( mInstanceId.c_str() );
190 bundle_free( mBundle );
194 bool WidgetView::PauseWidget()
196 int ret = widget_instance_pause( mInstanceId.c_str() );
199 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::PauseWidget: Fail to pause widget(%s, %s) [%d]\n", mWidgetId.c_str(), mInstanceId.c_str(), ret );
203 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::PauseWidget: Widget is paused (%s, %s)\n", mWidgetId.c_str(), mInstanceId.c_str() );
208 bool WidgetView::ResumeWidget()
210 int ret = widget_instance_resume( mInstanceId.c_str() );
213 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::ResumeWidget: Fail to resume widget(%s, %s) [%d]\n", mWidgetId.c_str(), mInstanceId.c_str(), ret );
217 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::ResumeWidget: Widget is resumed (%s, %s)\n", mWidgetId.c_str(), mInstanceId.c_str() );
222 const std::string& WidgetView::GetWidgetId() const
227 const std::string& WidgetView::GetInstanceId() const
232 const std::string& WidgetView::GetContentInfo()
234 widget_instance_h instance;
235 char* contentInfo = NULL;
237 mContentInfo.clear();
239 if( mWidgetId.empty() || mInstanceId.empty() )
241 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::GetContentInfo: Widget id (%s) or instance id (%s) is invalid.\n", mWidgetId.c_str(), mInstanceId.c_str() );
245 instance = widget_instance_get_instance( mWidgetId.c_str(), mInstanceId.c_str() );
248 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::GetContentInfo: widget_instance_get_instance is failed. [%s]\n", mInstanceId.c_str() );
252 if( widget_instance_get_content( instance, &contentInfo ) < 0 )
254 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::GetContentInfo: Failed to get content of widget. [%s]\n", mInstanceId.c_str() );
258 mContentInfo = reinterpret_cast< char* >( contentInfo );
263 const std::string& WidgetView::GetTitle()
265 //ToDo: We should add some codes by considering widget_viewer_evas
268 mTitle = widget_service_get_name( mWidgetId.c_str(), NULL );
271 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::GetTitle: title = %s\n", mTitle.c_str() );
276 float WidgetView::GetUpdatePeriod() const
278 return mUpdatePeriod;
281 bool WidgetView::CancelTouchEvent()
285 tizen_remote_surface_transfer_touch_cancel( mRemoteSurface );
292 void WidgetView::ShowPreview( bool show )
294 if( mPreviewImage && show != mPreviewVisible )
296 mPreviewVisible = show;
297 mPreviewImage.SetVisible( show );
301 bool WidgetView::IsPreviewVisible()
303 return mPreviewVisible;
306 void WidgetView::ShowStateText( bool show )
308 if( mStateText && mStateTextVisible != show )
310 mStateTextVisible = show;
311 mStateText.SetVisible( show );
315 bool WidgetView::IsStateTextVisible()
317 return mStateTextVisible;
320 void WidgetView::ActivateFaultedWidget()
324 // Esable preview and text
325 if( mPreviewVisible )
327 mPreviewImage.SetVisible( true );
330 if( mStateTextVisible )
332 mStateText.SetVisible( true );
335 // launch widget again
336 mPid = widget_instance_launch( mInstanceId.c_str(), (char *)mContentInfo.c_str(), mWidth, mHeight );
339 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::ActivateFaultedWidget: widget_instance_launch is failed. [%s]\n", mWidgetId.c_str() );
342 Dali::WidgetView::WidgetView handle( GetOwner() );
343 mWidgetCreationAbortedSignal.Emit( handle );
348 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::ActivateFaultedWidget: widget_instance_launch is called. [%s, mPid = %d]\n", mWidgetId.c_str(), mPid );
352 bool WidgetView::IsWidgetFaulted()
354 return mPid < 0 ? true : false;
357 void WidgetView::SetPermanentDelete( bool permanentDelete )
359 mPermanentDelete = permanentDelete;
362 bool WidgetView::IsPermanentDelete()
364 return mPermanentDelete;
367 void WidgetView::CreateWidgetImageView()
370 mImageSource = Dali::NativeImageSource::New( source );
371 Dali::NativeImage image = Dali::NativeImage::New( *mImageSource );
373 mWidgetImageView = Dali::Toolkit::ImageView::New( image );
375 mWidgetImageView.SetParentOrigin( ParentOrigin::CENTER );
376 mWidgetImageView.SetAnchorPoint( AnchorPoint::CENTER );
377 mWidgetImageView.SetSize( mWidth, mHeight );
379 Self().Add( mWidgetImageView );
381 // Disable preview and text
382 if( mPreviewVisible )
384 mPreviewImage.SetVisible( false );
387 if( mStateTextVisible )
389 mStateText.SetVisible( false );
393 Dali::WidgetView::WidgetView handle( GetOwner() );
394 mWidgetAddedSignal.Emit( handle );
396 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::AddObjectView: ObjectView is added.\n" );
399 void WidgetView::RemoveObjectView()
401 // Enable preview and text
402 if( mPreviewVisible )
404 mPreviewImage.SetVisible( true );
407 if( mStateTextVisible )
409 mStateText.SetVisible( true );
413 Dali::WidgetView::WidgetView handle( GetOwner() );
414 mWidgetDeletedSignal.Emit( handle );
416 mWidgetImageView.Reset();
418 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::RemoveObjectView: ObjectView is removed.\n" );
421 void WidgetView::SendWidgetEvent( int event )
423 Dali::WidgetView::WidgetView handle( GetOwner() );
425 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::SendWidgetEvent: event = %d widget = %s\n", event, mWidgetId.c_str() );
430 case WIDGET_INSTANCE_EVENT_UPDATE:
432 mWidgetContentUpdatedSignal.Emit( handle );
435 case WIDGET_INSTANCE_EVENT_PERIOD_CHANGED:
437 mWidgetUpdatePeriodChangedSignal.Emit( handle );
440 case WIDGET_INSTANCE_EVENT_FAULT:
442 mWidgetFaultedSignal.Emit( handle );
452 bool WidgetView::DoConnectSignal( BaseObject* object, ConnectionTrackerInterface* tracker, const std::string& signalName, FunctorDelegate* functor )
454 Dali::BaseHandle handle( object );
456 bool connected( true );
457 Dali::WidgetView::WidgetView widgetView = Dali::WidgetView::WidgetView::DownCast( handle );
459 if( strcmp( signalName.c_str(), SIGNAL_WIDGET_ADDED ) == 0 )
461 widgetView.WidgetAddedSignal().Connect( tracker, functor );
463 else if( strcmp( signalName.c_str(), SIGNAL_WIDGET_DELETED ) == 0 )
465 widgetView.WidgetDeletedSignal().Connect( tracker, functor );
467 else if( strcmp( signalName.c_str(), SIGNAL_WIDGET_CREATION_ABORTED ) == 0 )
469 widgetView.WidgetCreationAbortedSignal().Connect( tracker, functor );
471 else if( strcmp( signalName.c_str(), SIGNAL_WIDGET_CONTENT_UPDATED ) == 0 )
473 widgetView.WidgetContentUpdatedSignal().Connect( tracker, functor );
475 else if( strcmp( signalName.c_str(), SIGNAL_WIDGET_UPDATE_PERIOD_CHANGED ) == 0 )
477 widgetView.WidgetUpdatePeriodChangedSignal().Connect( tracker, functor );
479 else if( strcmp( signalName.c_str(), SIGNAL_WIDGET_FAULTED ) == 0 )
481 widgetView.WidgetFaultedSignal().Connect( tracker, functor );
485 // signalName does not match any signal
492 bool WidgetView::DoAction( BaseObject* object, const std::string& actionName, const Property::Map& attributes )
496 Dali::BaseHandle handle( object );
497 Dali::WidgetView::WidgetView widgetView = Dali::WidgetView::WidgetView::DownCast( handle );
504 WidgetView& impl = GetImplementation( widgetView );
506 if( strcmp( actionName.c_str(), ACTION_WIDGETVIEW_PAUSE_WIDGET ) == 0 )
510 else if( strcmp( actionName.c_str(), ACTION_WIDGETVIEW_RESUME_WIDGET ) == 0 )
514 else if( strcmp( actionName.c_str(), ACTION_WIDGETVIEW_CANCEL_TOUCH_EVENT ) == 0 )
516 impl.CancelTouchEvent();
518 else if( strcmp( actionName.c_str(), ACTION_WIDGETVIEW_ACTIVATE_FAULTED_WIDGET ) == 0 )
520 impl.ActivateFaultedWidget();
530 void WidgetView::SetProperty( BaseObject* object, Property::Index index, const Property::Value& value )
532 Dali::WidgetView::WidgetView widgetView = Dali::WidgetView::WidgetView::DownCast( Dali::BaseHandle( object ) );
536 WidgetView& impl = GetImplementation( widgetView );
540 case Dali::WidgetView::WidgetView::Property::PREVIEW:
543 if( value.Get( previewEnabled ) )
545 impl.ShowPreview( previewEnabled );
549 case Dali::WidgetView::WidgetView::Property::LOADING_TEXT:
552 if( value.Get( textEnabled ) )
554 impl.ShowStateText( textEnabled );
558 case Dali::WidgetView::WidgetView::Property::PERMANENT_DELETE:
561 if( value.Get( del ) )
563 impl.SetPermanentDelete( del );
571 Property::Value WidgetView::GetProperty( BaseObject* object, Property::Index index )
573 Property::Value value;
574 Dali::WidgetView::WidgetView widgetView = Dali::WidgetView::WidgetView::DownCast( Dali::BaseHandle( object ) );
578 WidgetView& impl = GetImplementation( widgetView );
582 case Dali::WidgetView::WidgetView::Property::WIDGET_ID:
584 value = impl.GetWidgetId();
587 case Dali::WidgetView::WidgetView::Property::INSTANCE_ID:
589 value = impl.GetInstanceId();
592 case Dali::WidgetView::WidgetView::Property::CONTENT_INFO:
594 value = impl.GetContentInfo();
597 case Dali::WidgetView::WidgetView::Property::TITLE:
599 value = impl.GetTitle();
602 case Dali::WidgetView::WidgetView::Property::UPDATE_PERIOD:
604 value = impl.GetUpdatePeriod();
607 case Dali::WidgetView::WidgetView::Property::PREVIEW:
609 value = impl.IsPreviewVisible();
612 case Dali::WidgetView::WidgetView::Property::LOADING_TEXT:
614 value = impl.IsStateTextVisible();
617 case Dali::WidgetView::WidgetView::Property::WIDGET_STATE_FAULTED:
619 value = impl.IsWidgetFaulted();
622 case Dali::WidgetView::WidgetView::Property::PERMANENT_DELETE:
624 value = impl.IsPermanentDelete();
633 Dali::WidgetView::WidgetView::WidgetViewSignalType& WidgetView::WidgetAddedSignal()
635 return mWidgetAddedSignal;
638 Dali::WidgetView::WidgetView::WidgetViewSignalType& WidgetView::WidgetDeletedSignal()
640 return mWidgetDeletedSignal;
643 Dali::WidgetView::WidgetView::WidgetViewSignalType& WidgetView::WidgetCreationAbortedSignal()
645 return mWidgetCreationAbortedSignal;
648 Dali::WidgetView::WidgetView::WidgetViewSignalType& WidgetView::WidgetContentUpdatedSignal()
650 return mWidgetContentUpdatedSignal;
653 Dali::WidgetView::WidgetView::WidgetViewSignalType& WidgetView::WidgetUpdatePeriodChangedSignal()
655 return mWidgetUpdatePeriodChangedSignal;
658 Dali::WidgetView::WidgetView::WidgetViewSignalType& WidgetView::WidgetFaultedSignal()
660 return mWidgetFaultedSignal;
663 void WidgetView::OnInitialize()
665 char* instanceId = NULL;
666 char* previewPath = NULL;
667 std::string previewImage;
668 widget_size_type_e sizeType;
670 int ret = widget_instance_create( mWidgetId.c_str(), &instanceId );
671 if( ret < 0 || !instanceId )
673 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::OnInitialize: widget_instance_create is failed [%s].\n", mWidgetId.c_str() );
677 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::OnInitialize: widget_instance_create is called. [widget id = %s, instance id = %s]\n",
678 mWidgetId.c_str(), instanceId );
680 mInstanceId = instanceId;
683 widget_service_get_size_type( mWidth, mHeight, &sizeType );
685 previewPath = widget_service_get_preview_image_path( mWidgetId.c_str(), sizeType );
688 previewImage = previewPath;
693 previewImage = tzplatform_getenv( TZ_SYS_SHARE );
694 previewImage.append( WIDGET_VIEW_RESOURCE_DEFAULT_IMG );
697 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::OnInitialize: preview image path = %s\n", previewImage.c_str() );
699 mPreviewImage = Toolkit::ImageView::New( previewImage );
701 mPreviewImage.SetParentOrigin( ParentOrigin::CENTER );
702 mPreviewImage.SetAnchorPoint( AnchorPoint::CENTER );
706 mPreviewImage.SetSize( mWidth, mHeight );
709 Self().SetResizePolicy( ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS );
710 Self().SetSize( mWidth, mHeight );
712 Self().Add( mPreviewImage );
715 // TODO: use po files
716 mStateText = Toolkit::TextLabel::New( "Loading..." );
718 mStateText.SetParentOrigin( ParentOrigin::CENTER );
719 mStateText.SetAnchorPoint( AnchorPoint::CENTER );
720 mStateText.SetProperty( Toolkit::TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
721 mStateText.SetProperty( Toolkit::TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER" );
723 mPreviewImage.Add( mStateText );
726 mPid = widget_instance_launch( instanceId, (char *)mContentInfo.c_str(), mWidth, mHeight );
729 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::OnInitialize: widget_instance_launch is failed. [%s]\n", mWidgetId.c_str() );
732 Dali::WidgetView::WidgetView handle( GetOwner() );
733 mWidgetCreationAbortedSignal.Emit( handle );
738 aul_rsm_viewer_set_surface_handler( mInstanceId.c_str(), &remoteSurfaceHandler, this );
740 DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::OnInitialize: widget_instance_launch is called. [%s, mPid = %d]\n", mWidgetId.c_str(), mPid );
744 void WidgetView::OnStageConnection( int depth )
746 Control::OnStageConnection( depth );
749 void WidgetView::OnStageDisconnection()
751 Control::OnStageDisconnection();
754 void WidgetView::OnSizeSet( const Vector3& targetSize )
756 if( mWidgetImageView )
758 mWidgetImageView.SetSize( targetSize );
762 bool WidgetView::IsWidgetImageView()
764 return ( mWidgetImageView )? true: false;
767 void WidgetView::UpdateImageSource( tbm_surface_h source )
769 mImageSource->SetSource( source );
770 Dali::Stage::GetCurrent().KeepRendering( 0.0f );
773 void WidgetView::ConnectSignal( tizen_remote_surface* surface )
775 if( mWidgetImageView )
777 mRemoteSurface = surface;
779 Self().TouchSignal().Connect( this, &WidgetView::OnTouch );
780 Self().WheelEventSignal().Connect( this, &WidgetView::OnWheelEvent );
785 bool WidgetView::OnTouch( Dali::Actor actor, const Dali::TouchData& event )
787 tizen_remote_surface_event_type type = TIZEN_REMOTE_SURFACE_EVENT_TYPE_NONE;
789 if( event.GetPointCount() == 0 )
794 switch( event.GetState( 0 ) )
796 case Dali::PointState::UP:
798 type = TIZEN_REMOTE_SURFACE_EVENT_TYPE_MOUSE_UP;
801 case Dali::PointState::DOWN:
803 type = TIZEN_REMOTE_SURFACE_EVENT_TYPE_MOUSE_DOWN;
806 case Dali::PointState::MOTION:
808 type = TIZEN_REMOTE_SURFACE_EVENT_TYPE_MOUSE_MOVE;
819 if( type == TIZEN_REMOTE_SURFACE_EVENT_TYPE_MOUSE_MOVE )
824 Vector2 localPos = event.GetLocalPosition( 0 );
826 tizen_remote_surface_transfer_mouse_event( mRemoteSurface,
832 wl_fixed_from_double( event.GetEllipseRadius( 0 ).x ),
833 wl_fixed_from_double( event.GetEllipseRadius( 0 ).y ),
834 wl_fixed_from_double( event.GetPressure( 0 ) ),
835 wl_fixed_from_double( event.GetAngle( 0 ).degree ),
836 TIZEN_INPUT_DEVICE_CLAS_TOUCHSCREEN,
837 TIZEN_INPUT_DEVICE_SUBCLAS_NONE,
844 bool WidgetView::OnWheelEvent( Dali::Actor actor, const Dali::WheelEvent& event )
846 //ToDo: We should check TIZEN_INPUT_DEVICE_CLAS_MOUSE
847 tizen_remote_surface_transfer_mouse_wheel( mRemoteSurface,
850 TIZEN_INPUT_DEVICE_CLAS_MOUSE,
851 TIZEN_INPUT_DEVICE_SUBCLAS_NONE,
858 Vector3 WidgetView::GetNaturalSize()
864 if( size.x > 0 && size.y > 0 )
866 size.z = std::min( size.x, size.y );
871 return Control::GetNaturalSize();
875 float WidgetView::GetHeightForWidth( float width )
877 if( mWidth > 0 && mHeight > 0 )
879 return GetHeightForWidthBase( width );
883 return Control::GetHeightForWidthBase( width );
887 float WidgetView::GetWidthForHeight( float height )
889 if( mWidth > 0 && mHeight > 0 )
891 return GetWidthForHeightBase( height );
895 return Control::GetWidthForHeightBase( height );
899 } // namespace Internal
901 } // namespace WidgetView