X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=internal%2Fwidget_view%2Fwidget_view_impl.cpp;h=a98d16b43e09f4b90e4ae468da8c78896561a166;hb=e8d741b0c9fa00b763818c0bb71225b5a6444c92;hp=271ef4f32eb6acfd8f05e93ba1ba1b550d8632d2;hpb=1d1aa1b3cfdcc38260c830c82857829fccbbc565;p=platform%2Fcore%2Fuifw%2Fwidget-viewer-dali.git diff --git a/internal/widget_view/widget_view_impl.cpp b/internal/widget_view/widget_view_impl.cpp index 271ef4f..a98d16b 100644 --- a/internal/widget_view/widget_view_impl.cpp +++ b/internal/widget_view/widget_view_impl.cpp @@ -1,18 +1,18 @@ /* + * Samsung API * Copyright (c) 2016 Samsung Electronics Co., Ltd. * - * Licensed under the Apache License, Version 2.0 (the "License"); + * Licensed under the Flora License, Version 1.1 (the License); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://floralicense.org/license/ * * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, + * distributed under the License is distributed on an AS IS BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. - * */ // CLASS HEADER @@ -21,11 +21,22 @@ // INTERNAL INCLUDES // EXTERNAL INCLUDES +#include +#include +#include +#include +#include +#include +#include +#include #include #include +#include #include #include #include +#include +#include namespace Dali { @@ -45,9 +56,78 @@ namespace Integration::Log::Filter* gWidgetViewLogging = Integration::Log::Filter::New( Debug::Verbose, false, "LOG_WIDGET_VIEW" ); #endif +BaseHandle Create() +{ + return Dali::BaseHandle(); +} + +// Setup properties, signals and actions using the type-registry. +DALI_TYPE_REGISTRATION_BEGIN( Dali::WidgetView::WidgetView, Toolkit::Control, Create ); +DALI_PROPERTY_REGISTRATION( Dali::WidgetView, WidgetView, "widgetId", BOOLEAN, WIDGET_ID ) +DALI_PROPERTY_REGISTRATION( Dali::WidgetView, WidgetView, "instanceId", BOOLEAN, INSTANCE_ID ) +DALI_PROPERTY_REGISTRATION( Dali::WidgetView, WidgetView, "contentInfo", BOOLEAN, CONTENT_INFO ) +DALI_PROPERTY_REGISTRATION( Dali::WidgetView, WidgetView, "title", BOOLEAN, TITLE ) +DALI_PROPERTY_REGISTRATION( Dali::WidgetView, WidgetView, "updatePeriod", BOOLEAN, UPDATE_PERIOD ) +DALI_PROPERTY_REGISTRATION( Dali::WidgetView, WidgetView, "preview", MAP, PREVIEW ) +DALI_PROPERTY_REGISTRATION( Dali::WidgetView, WidgetView, "loadingText", MAP, LOADING_TEXT ) +DALI_PROPERTY_REGISTRATION( Dali::WidgetView, WidgetView, "widgetStateFaulted", BOOLEAN, WIDGET_STATE_FAULTED ) +DALI_PROPERTY_REGISTRATION( Dali::WidgetView, WidgetView, "permanentDelete", BOOLEAN, PERMANENT_DELETE ) + +// Signals +DALI_SIGNAL_REGISTRATION( Dali::WidgetView, WidgetView, "widgetAdded", SIGNAL_WIDGET_ADDED ) +DALI_SIGNAL_REGISTRATION( Dali::WidgetView, WidgetView, "widgetDeleted", SIGNAL_WIDGET_DELETED ) +DALI_SIGNAL_REGISTRATION( Dali::WidgetView, WidgetView, "widgetCreationAborted", SIGNAL_WIDGET_CREATION_ABORTED ) +DALI_SIGNAL_REGISTRATION( Dali::WidgetView, WidgetView, "widgetContentUpdated", SIGNAL_WIDGET_CONTENT_UPDATED ) +DALI_SIGNAL_REGISTRATION( Dali::WidgetView, WidgetView, "widgetUpdatePeriodChanged", SIGNAL_WIDGET_UPDATE_PERIOD_CHANGED ) +DALI_SIGNAL_REGISTRATION( Dali::WidgetView, WidgetView, "widgetFaulted", SIGNAL_WIDGET_FAULTED ) + +// Actions +DALI_ACTION_REGISTRATION( Dali::WidgetView, WidgetView, "pauseWidget", ACTION_WIDGETVIEW_PAUSE_WIDGET ); +DALI_ACTION_REGISTRATION( Dali::WidgetView, WidgetView, "resumeWidget", ACTION_WIDGETVIEW_RESUME_WIDGET ); +DALI_ACTION_REGISTRATION( Dali::WidgetView, WidgetView, "cancelTouchEvent", ACTION_WIDGETVIEW_CANCEL_TOUCH_EVENT ); +DALI_ACTION_REGISTRATION( Dali::WidgetView, WidgetView, "activateFaultedWidget", ACTION_WIDGETVIEW_ACTIVATE_FAULTED_WIDGET ); + +DALI_TYPE_REGISTRATION_END() + +static void OnBufferUpdate( struct tizen_remote_surface* surface, wl_buffer* buffer, uint32_t time, void* data ) +{ + Dali::WidgetView::Internal::WidgetView* widgetView = static_cast< Dali::WidgetView::Internal::WidgetView* >( data ); + + if( widgetView ) + { + if( !widgetView->IsWidgetImageView() ) + { + tizen_remote_surface_transfer_visibility( surface, TIZEN_REMOTE_SURFACE_VISIBILITY_TYPE_VISIBLE); + + widgetView->CreateWidgetImageView(); + widgetView->ConnectSignal( surface ); + } + + //get tbm surface from buffer + tbm_surface_h tbmSurface = static_cast< tbm_surface_h >( wl_buffer_get_user_data( buffer ) ); + widgetView->UpdateImageSource( tbmSurface ); + } +} + +static void OnSurfaceMissing( struct tizen_remote_surface* surface, void* data ) +{ + Dali::WidgetView::Internal::WidgetView* widgetView = static_cast< Dali::WidgetView::Internal::WidgetView* >( data ); + + if( widgetView ) + { + widgetView->CloseRemoteSurface(); + } +} + + +static struct aul_rsm_handler_s remoteSurfaceHandler = { + OnBufferUpdate, + OnSurfaceMissing, +}; + } // unnamed namespace -Dali::WidgetView::WidgetView WidgetView::New( const std::string& widgetId, const std::string& contentInfo, int width, int height, double updatePeriod ) +Dali::WidgetView::WidgetView WidgetView::New( const std::string& widgetId, const std::string& contentInfo, int width, int height, float updatePeriod ) { // Create the implementation, temporarily owned on stack IntrusivePtr< WidgetView > internalWidgetView = new WidgetView( widgetId, contentInfo, width, height, updatePeriod ); @@ -68,31 +148,31 @@ WidgetView::WidgetView() mInstanceId(), mContentInfo(), mTitle(), - mBundle( NULL ), mWidth( 0 ), mHeight( 0 ), mPid( 0 ), mUpdatePeriod( 0.0 ), - mPreviewEnabled( true ), - mStateTextEnabled( true ), - mPermanentDelete( true ) + mPreviewVisible( true ), + mStateTextVisible( true ), + mPermanentDelete( false ), + mRemoteSurface( NULL ) { } -WidgetView::WidgetView( const std::string& widgetId, const std::string& contentInfo, int width, int height, double updatePeriod ) +WidgetView::WidgetView( const std::string& widgetId, const std::string& contentInfo, int width, int height, float updatePeriod ) : Control( ControlBehaviour( REQUIRES_TOUCH_EVENTS ) ), mWidgetId( widgetId ), mInstanceId(), mContentInfo( contentInfo ), mTitle(), - mBundle( NULL ), mWidth( width ), mHeight( height ), mPid( 0 ), mUpdatePeriod( updatePeriod ), - mPreviewEnabled( true ), - mStateTextEnabled( true ), - mPermanentDelete( true ) + mPreviewVisible( true ), + mStateTextVisible( true ), + mPermanentDelete( false ), + mRemoteSurface( NULL ) { } @@ -100,23 +180,18 @@ WidgetView::~WidgetView() { if( !mWidgetId.empty() && !mInstanceId.empty() ) { - widget_instance_terminate( mWidgetId.c_str(), mInstanceId.c_str() ); + widget_instance_terminate( mInstanceId.c_str() ); if( mPermanentDelete ) { - widget_instance_destroy( mWidgetId.c_str(), mInstanceId.c_str() ); + widget_instance_destroy( mInstanceId.c_str() ); } } - - if( mBundle ) - { - bundle_free( mBundle ); - } } bool WidgetView::PauseWidget() { - int ret = widget_instance_pause( mWidgetId.c_str(), mInstanceId.c_str() ); + int ret = widget_instance_pause( mInstanceId.c_str() ); if( ret < 0 ) { DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::PauseWidget: Fail to pause widget(%s, %s) [%d]\n", mWidgetId.c_str(), mInstanceId.c_str(), ret ); @@ -130,7 +205,7 @@ bool WidgetView::PauseWidget() bool WidgetView::ResumeWidget() { - int ret = widget_instance_resume( mWidgetId.c_str(), mInstanceId.c_str() ); + int ret = widget_instance_resume( mInstanceId.c_str() ); if( ret < 0 ) { DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::ResumeWidget: Fail to resume widget(%s, %s) [%d]\n", mWidgetId.c_str(), mInstanceId.c_str(), ret ); @@ -155,9 +230,7 @@ const std::string& WidgetView::GetInstanceId() const const std::string& WidgetView::GetContentInfo() { widget_instance_h instance; - bundle* bundle = NULL; - bundle_raw* contentInfo = NULL; - int contentLength = 0; + char* contentInfo = NULL; mContentInfo.clear(); @@ -174,24 +247,12 @@ const std::string& WidgetView::GetContentInfo() return mContentInfo; } - if( widget_instance_get_content( instance, &bundle ) < 0 ) + if( widget_instance_get_content( instance, &contentInfo ) < 0 ) { DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::GetContentInfo: Failed to get content of widget. [%s]\n", mInstanceId.c_str() ); return mContentInfo; } - if( !bundle ) - { - DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::GetContentInfo: Cotent of widget [%s] is invalid.\n", mInstanceId.c_str() ); - return mContentInfo; - } - - if( bundle_encode( bundle, &contentInfo, &contentLength ) < 0 ) - { - DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::GetContentInfo: bundle_encode is failed. [%s]\n", mInstanceId.c_str() ); - return mContentInfo; - } - mContentInfo = reinterpret_cast< char* >( contentInfo ); return mContentInfo; @@ -199,13 +260,10 @@ const std::string& WidgetView::GetContentInfo() const std::string& WidgetView::GetTitle() { - if( mObjectView ) + //ToDo: We should add some codes by considering widget_viewer_evas + if( mTitle.empty() ) { - mTitle = mObjectView.GetTitle(); - if( mTitle.empty() ) - { - mTitle = widget_service_get_name( mWidgetId.c_str(), NULL ); - } + mTitle = widget_service_get_name( mWidgetId.c_str(), NULL ); } DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::GetTitle: title = %s\n", mTitle.c_str() ); @@ -213,65 +271,48 @@ const std::string& WidgetView::GetTitle() return mTitle; } -double WidgetView::GetUpdatePeriod() const +float WidgetView::GetUpdatePeriod() const { return mUpdatePeriod; } -void WidgetView::Show() -{ - if( mObjectView ) - { - mObjectView.Show(); - } -} - -void WidgetView::Hide() -{ - if( mObjectView ) - { - mObjectView.Hide(); - } -} - bool WidgetView::CancelTouchEvent() { - if( mObjectView ) + if( mRemoteSurface ) { - return mObjectView.CancelTouchEvent(); + tizen_remote_surface_transfer_touch_cancel( mRemoteSurface ); + return true; } return false; } -void WidgetView::SetPreviewEnabled( bool enabled ) +void WidgetView::ShowPreview( bool show ) { - mPreviewEnabled = enabled; - - if( mPreviewImage ) + if( mPreviewImage && show != mPreviewVisible ) { - mPreviewImage.SetVisible( enabled ); + mPreviewVisible = show; + mPreviewImage.SetVisible( show ); } } -bool WidgetView::GetPreviewEnabled() const +bool WidgetView::IsPreviewVisible() { - return mPreviewEnabled; + return mPreviewVisible; } -void WidgetView::SetStateTextEnabled( bool enabled ) +void WidgetView::ShowStateText( bool show ) { - mStateTextEnabled = enabled; - - if( mStateText ) + if( mStateText && mStateTextVisible != show ) { - mStateText.SetVisible( enabled ); + mStateTextVisible = show; + mStateText.SetVisible( show ); } } -bool WidgetView::GetStateTextEnabled() const +bool WidgetView::IsStateTextVisible() { - return mStateTextEnabled; + return mStateTextVisible; } void WidgetView::ActivateFaultedWidget() @@ -279,18 +320,18 @@ void WidgetView::ActivateFaultedWidget() if( mPid < 0 ) { // Esable preview and text - if( mPreviewEnabled ) + if( mPreviewVisible ) { mPreviewImage.SetVisible( true ); } - if( mStateTextEnabled ) + if( mStateTextVisible ) { mStateText.SetVisible( true ); } // launch widget again - mPid = widget_instance_launch( mWidgetId.c_str(), mInstanceId.c_str(), mBundle, mWidth, mHeight ); + mPid = widget_instance_launch( mInstanceId.c_str(), (char *)mContentInfo.c_str(), mWidth, mHeight ); if( mPid < 0) { DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::ActivateFaultedWidget: widget_instance_launch is failed. [%s]\n", mWidgetId.c_str() ); @@ -316,22 +357,32 @@ void WidgetView::SetPermanentDelete( bool permanentDelete ) mPermanentDelete = permanentDelete; } -void WidgetView::AddObjectView( Pepper::ObjectView objectView ) +bool WidgetView::IsPermanentDelete() { - mObjectView = objectView; + return mPermanentDelete; +} - mObjectView.SetParentOrigin( ParentOrigin::CENTER ); - mObjectView.SetAnchorPoint( AnchorPoint::CENTER ); +void WidgetView::CreateWidgetImageView() +{ + Any source; + mImageSource = Dali::NativeImageSource::New( source ); + Dali::NativeImage image = Dali::NativeImage::New( *mImageSource ); - Self().Add( mObjectView ); + mWidgetImageView = Dali::Toolkit::ImageView::New( image ); + + mWidgetImageView.SetParentOrigin( ParentOrigin::CENTER ); + mWidgetImageView.SetAnchorPoint( AnchorPoint::CENTER ); + mWidgetImageView.SetSize( mWidth, mHeight ); + + Self().Add( mWidgetImageView ); // Disable preview and text - if( mPreviewEnabled ) + if( mPreviewVisible ) { mPreviewImage.SetVisible( false ); } - if( mStateTextEnabled ) + if( mStateTextVisible ) { mStateText.SetVisible( false ); } @@ -346,12 +397,12 @@ void WidgetView::AddObjectView( Pepper::ObjectView objectView ) void WidgetView::RemoveObjectView() { // Enable preview and text - if( mPreviewEnabled ) + if( mPreviewVisible ) { mPreviewImage.SetVisible( true ); } - if( mStateTextEnabled ) + if( mStateTextVisible ) { mStateText.SetVisible( true ); } @@ -360,7 +411,7 @@ void WidgetView::RemoveObjectView() Dali::WidgetView::WidgetView handle( GetOwner() ); mWidgetDeletedSignal.Emit( handle ); - mObjectView.Reset(); + mWidgetImageView.Reset(); DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::RemoveObjectView: ObjectView is removed.\n" ); } @@ -384,26 +435,197 @@ void WidgetView::SendWidgetEvent( int event ) mWidgetUpdatePeriodChangedSignal.Emit( handle ); break; } - case WIDGET_INSTANCE_EVENT_SIZE_CHANGED: + case WIDGET_INSTANCE_EVENT_FAULT: { - mWidgetResizedSignal.Emit( handle ); + mWidgetFaultedSignal.Emit( handle ); break; } - case WIDGET_INSTANCE_EVENT_EXTRA_UPDATED: + default: { - mWidgetExtraInfoUpdatedSignal.Emit( handle ); break; } - case WIDGET_INSTANCE_EVENT_FAULT: + } +} + +bool WidgetView::DoConnectSignal( BaseObject* object, ConnectionTrackerInterface* tracker, const std::string& signalName, FunctorDelegate* functor ) +{ + Dali::BaseHandle handle( object ); + + bool connected( true ); + Dali::WidgetView::WidgetView widgetView = Dali::WidgetView::WidgetView::DownCast( handle ); + + if( strcmp( signalName.c_str(), SIGNAL_WIDGET_ADDED ) == 0 ) + { + widgetView.WidgetAddedSignal().Connect( tracker, functor ); + } + else if( strcmp( signalName.c_str(), SIGNAL_WIDGET_DELETED ) == 0 ) + { + widgetView.WidgetDeletedSignal().Connect( tracker, functor ); + } + else if( strcmp( signalName.c_str(), SIGNAL_WIDGET_CREATION_ABORTED ) == 0 ) + { + widgetView.WidgetCreationAbortedSignal().Connect( tracker, functor ); + } + else if( strcmp( signalName.c_str(), SIGNAL_WIDGET_CONTENT_UPDATED ) == 0 ) + { + widgetView.WidgetContentUpdatedSignal().Connect( tracker, functor ); + } + else if( strcmp( signalName.c_str(), SIGNAL_WIDGET_UPDATE_PERIOD_CHANGED ) == 0 ) + { + widgetView.WidgetUpdatePeriodChangedSignal().Connect( tracker, functor ); + } + else if( strcmp( signalName.c_str(), SIGNAL_WIDGET_FAULTED ) == 0 ) + { + widgetView.WidgetFaultedSignal().Connect( tracker, functor ); + } + else + { + // signalName does not match any signal + connected = false; + } + + return connected; +} + +bool WidgetView::DoAction( BaseObject* object, const std::string& actionName, const Property::Map& attributes ) +{ + bool ret = true; + + Dali::BaseHandle handle( object ); + Dali::WidgetView::WidgetView widgetView = Dali::WidgetView::WidgetView::DownCast( handle ); + + if( !widgetView ) + { + return false; + } + + WidgetView& impl = GetImplementation( widgetView ); + + if( strcmp( actionName.c_str(), ACTION_WIDGETVIEW_PAUSE_WIDGET ) == 0 ) + { + impl.PauseWidget(); + } + else if( strcmp( actionName.c_str(), ACTION_WIDGETVIEW_RESUME_WIDGET ) == 0 ) + { + impl.ResumeWidget(); + } + else if( strcmp( actionName.c_str(), ACTION_WIDGETVIEW_CANCEL_TOUCH_EVENT ) == 0 ) + { + impl.CancelTouchEvent(); + } + else if( strcmp( actionName.c_str(), ACTION_WIDGETVIEW_ACTIVATE_FAULTED_WIDGET ) == 0 ) + { + impl.ActivateFaultedWidget(); + } + else + { + ret = false; + } + + return ret; +} + +void WidgetView::SetProperty( BaseObject* object, Property::Index index, const Property::Value& value ) +{ + Dali::WidgetView::WidgetView widgetView = Dali::WidgetView::WidgetView::DownCast( Dali::BaseHandle( object ) ); + + if( widgetView ) + { + WidgetView& impl = GetImplementation( widgetView ); + + switch( index ) { - mWidgetFaultedSignal.Emit( handle ); - break; + case Dali::WidgetView::WidgetView::Property::PREVIEW: + { + bool previewEnabled; + if( value.Get( previewEnabled ) ) + { + impl.ShowPreview( previewEnabled ); + } + break; + } + case Dali::WidgetView::WidgetView::Property::LOADING_TEXT: + { + bool textEnabled; + if( value.Get( textEnabled ) ) + { + impl.ShowStateText( textEnabled ); + } + break; + } + case Dali::WidgetView::WidgetView::Property::PERMANENT_DELETE: + { + bool del; + if( value.Get( del ) ) + { + impl.SetPermanentDelete( del ); + } + break; + } } - default: + } +} + +Property::Value WidgetView::GetProperty( BaseObject* object, Property::Index index ) +{ + Property::Value value; + Dali::WidgetView::WidgetView widgetView = Dali::WidgetView::WidgetView::DownCast( Dali::BaseHandle( object ) ); + + if( widgetView ) + { + WidgetView& impl = GetImplementation( widgetView ); + + switch( index ) { - break; + case Dali::WidgetView::WidgetView::Property::WIDGET_ID: + { + value = impl.GetWidgetId(); + break; + } + case Dali::WidgetView::WidgetView::Property::INSTANCE_ID: + { + value = impl.GetInstanceId(); + break; + } + case Dali::WidgetView::WidgetView::Property::CONTENT_INFO: + { + value = impl.GetContentInfo(); + break; + } + case Dali::WidgetView::WidgetView::Property::TITLE: + { + value = impl.GetTitle(); + break; + } + case Dali::WidgetView::WidgetView::Property::UPDATE_PERIOD: + { + value = impl.GetUpdatePeriod(); + break; + } + case Dali::WidgetView::WidgetView::Property::PREVIEW: + { + value = impl.IsPreviewVisible(); + break; + } + case Dali::WidgetView::WidgetView::Property::LOADING_TEXT: + { + value = impl.IsStateTextVisible(); + break; + } + case Dali::WidgetView::WidgetView::Property::WIDGET_STATE_FAULTED: + { + value = impl.IsWidgetFaulted(); + break; + } + case Dali::WidgetView::WidgetView::Property::PERMANENT_DELETE: + { + value = impl.IsPermanentDelete(); + break; + } } } + + return value; } Dali::WidgetView::WidgetView::WidgetViewSignalType& WidgetView::WidgetAddedSignal() @@ -421,21 +643,11 @@ Dali::WidgetView::WidgetView::WidgetViewSignalType& WidgetView::WidgetCreationAb return mWidgetCreationAbortedSignal; } -Dali::WidgetView::WidgetView::WidgetViewSignalType& WidgetView::WidgetResizedSignal() -{ - return mWidgetResizedSignal; -} - Dali::WidgetView::WidgetView::WidgetViewSignalType& WidgetView::WidgetContentUpdatedSignal() { return mWidgetContentUpdatedSignal; } -Dali::WidgetView::WidgetView::WidgetViewSignalType& WidgetView::WidgetExtraInfoUpdatedSignal() -{ - return mWidgetExtraInfoUpdatedSignal; -} - Dali::WidgetView::WidgetView::WidgetViewSignalType& WidgetView::WidgetUpdatePeriodChangedSignal() { return mWidgetUpdatePeriodChangedSignal; @@ -453,32 +665,15 @@ void WidgetView::OnInitialize() std::string previewImage; widget_size_type_e sizeType; - if( !mContentInfo.empty() ) + int ret = widget_instance_create( mWidgetId.c_str(), &instanceId ); + if( ret < 0 || !instanceId ) { - DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::OnInitialize: decode bundle\n" ); - - mBundle = bundle_decode( reinterpret_cast< const bundle_raw* >( mContentInfo.c_str() ), mContentInfo.length() ); - if( !mBundle ) - { - DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::OnInitialize: Invalid bundle data.\n" ); - return; - } - - bundle_get_str( mBundle, WIDGET_K_INSTANCE, &instanceId ); + DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::OnInitialize: widget_instance_create is failed [%s].\n", mWidgetId.c_str() ); + return; } - if( !instanceId ) - { - int ret = widget_instance_create( mWidgetId.c_str(), &instanceId ); - if( ret < 0 || !instanceId ) - { - DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::OnInitialize: widget_instance_create is failed [%s].\n", mWidgetId.c_str() ); - return; - } - - DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::OnInitialize: widget_instance_create is called. [widget id = %s, instance id = %s]\n", - mWidgetId.c_str(), instanceId ); - } + DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::OnInitialize: widget_instance_create is called. [widget id = %s, instance id = %s]\n", + mWidgetId.c_str(), instanceId ); mInstanceId = instanceId; @@ -509,7 +704,9 @@ void WidgetView::OnInitialize() mPreviewImage.SetSize( mWidth, mHeight ); } - Self().SetResizePolicy( ResizePolicy::FIT_TO_CHILDREN, Dimension::ALL_DIMENSIONS ); + Self().SetResizePolicy( ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS ); + Self().SetSize( mWidth, mHeight ); + Self().Add( mPreviewImage ); // State text @@ -524,7 +721,7 @@ void WidgetView::OnInitialize() mPreviewImage.Add( mStateText ); // launch widget - mPid = widget_instance_launch( mWidgetId.c_str(), instanceId, mBundle, mWidth, mHeight ); + mPid = widget_instance_launch( instanceId, (char *)mContentInfo.c_str(), mWidth, mHeight ); if( mPid < 0) { DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::OnInitialize: widget_instance_launch is failed. [%s]\n", mWidgetId.c_str() ); @@ -536,15 +733,175 @@ void WidgetView::OnInitialize() return; } + aul_rsm_viewer_set_surface_handler( mInstanceId.c_str(), &remoteSurfaceHandler, this ); + DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::OnInitialize: widget_instance_launch is called. [%s, mPid = %d]\n", mWidgetId.c_str(), mPid ); + +} + +void WidgetView::OnStageConnection( int depth ) +{ + Control::OnStageConnection( depth ); +} + +void WidgetView::OnStageDisconnection() +{ + Control::OnStageDisconnection(); } void WidgetView::OnSizeSet( const Vector3& targetSize ) { - if( mObjectView ) + if( mWidgetImageView ) + { + mWidgetImageView.SetSize( targetSize ); + } +} + +bool WidgetView::IsWidgetImageView() +{ + return ( mWidgetImageView )? true: false; +} + +void WidgetView::UpdateImageSource( tbm_surface_h source ) +{ + mImageSource->SetSource( source ); + Dali::Stage::GetCurrent().KeepRendering( 0.0f ); +} + +void WidgetView::ConnectSignal( tizen_remote_surface* surface ) +{ + if( mWidgetImageView && surface ) + { + mRemoteSurface = surface; + + Self().TouchSignal().Connect( this, &WidgetView::OnTouch ); + Self().WheelEventSignal().Connect( this, &WidgetView::OnWheelEvent ); + } + +} + +bool WidgetView::OnTouch( Dali::Actor actor, const Dali::TouchData& event ) +{ + tizen_remote_surface_event_type type = TIZEN_REMOTE_SURFACE_EVENT_TYPE_NONE; + + if( event.GetPointCount() == 0 || mRemoteSurface == NULL ) + { + return false; + } + + switch( event.GetState( 0 ) ) + { + case Dali::PointState::UP: + { + type = TIZEN_REMOTE_SURFACE_EVENT_TYPE_MOUSE_UP; + break; + } + case Dali::PointState::DOWN: + { + type = TIZEN_REMOTE_SURFACE_EVENT_TYPE_MOUSE_DOWN; + break; + } + case Dali::PointState::MOTION: + { + type = TIZEN_REMOTE_SURFACE_EVENT_TYPE_MOUSE_MOVE; + break; + } + default: + { + return false; + } + } + + int button = 1; + + if( type == TIZEN_REMOTE_SURFACE_EVENT_TYPE_MOUSE_MOVE ) + { + button = 0 ; + } + + Vector2 localPos = event.GetLocalPosition( 0 ); + + tizen_remote_surface_transfer_mouse_event( mRemoteSurface, + type, + 0, + button, + (int)localPos.x, + (int)localPos.y, + wl_fixed_from_double( event.GetEllipseRadius( 0 ).x ), + wl_fixed_from_double( event.GetEllipseRadius( 0 ).y ), + wl_fixed_from_double( event.GetPressure( 0 ) ), + wl_fixed_from_double( event.GetAngle( 0 ).degree ), + TIZEN_INPUT_DEVICE_CLAS_TOUCHSCREEN, + TIZEN_INPUT_DEVICE_SUBCLAS_NONE, + "", + event.GetTime() + ); + return true; +} + +bool WidgetView::OnWheelEvent( Dali::Actor actor, const Dali::WheelEvent& event ) +{ + if( mRemoteSurface == NULL ) + { + return false; + } + //ToDo: We should check TIZEN_INPUT_DEVICE_CLAS_MOUSE + tizen_remote_surface_transfer_mouse_wheel( mRemoteSurface, + event.direction, + event.z, + TIZEN_INPUT_DEVICE_CLAS_MOUSE, + TIZEN_INPUT_DEVICE_SUBCLAS_NONE, + "", + event.timeStamp + ); + return true; +} + +Vector3 WidgetView::GetNaturalSize() +{ + Vector3 size; + size.x = mWidth; + size.y = mHeight; + + if( size.x > 0 && size.y > 0 ) + { + size.z = std::min( size.x, size.y ); + return size; + } + else + { + return Control::GetNaturalSize(); + } +} + +float WidgetView::GetHeightForWidth( float width ) +{ + if( mWidth > 0 && mHeight > 0 ) { - mObjectView.SetSize( targetSize ); + return GetHeightForWidthBase( width ); } + else + { + return Control::GetHeightForWidthBase( width ); + } +} + +float WidgetView::GetWidthForHeight( float height ) +{ + if( mWidth > 0 && mHeight > 0 ) + { + return GetWidthForHeightBase( height ); + } + else + { + return Control::GetWidthForHeightBase( height ); + } +} + +void WidgetView::CloseRemoteSurface() +{ + aul_rsm_viewer_unset_surface_handler( mInstanceId.c_str() ); + mRemoteSurface = NULL; } } // namespace Internal