// INTERNAL INCLUDES
// EXTERNAL INCLUDES
+#include <dali/public-api/common/stage.h>
+#include <dali/public-api/events/touch-data.h>
+#include <dali/public-api/events/wheel-event.h>
+#include <dali/public-api/images/native-image.h>
#include <dali/integration-api/debug.h>
#include <string.h>
+#include <Ecore_Input.h>
#include <widget_service.h>
#include <widget_instance.h>
#include <tzplatform_config.h>
+#include <wayland-extension/tizen-extension-client-protocol.h>
+#include <aul_rsm_viewer.h>
namespace Dali
{
Integration::Log::Filter* gWidgetViewLogging = Integration::Log::Filter::New( Debug::Verbose, false, "LOG_WIDGET_VIEW" );
#endif
+static Eina_Bool OnKeyDown( void* data, int type, void* eventInfo )
+{
+ Ecore_Event_Key *event = static_cast< Ecore_Event_Key* >( eventInfo );
+ tizen_remote_surface* surface = static_cast< tizen_remote_surface* >( data );
+
+ tizen_remote_surface_transfer_key_event( surface,
+ TIZEN_REMOTE_SURFACE_EVENT_TYPE_KEY_DOWN,
+ event->keycode,
+ ecore_device_class_get(event->dev),
+ ecore_device_subclass_get(event->dev),
+ ecore_device_identifier_get(event->dev),
+ event->timestamp
+ );
+
+ return EINA_TRUE;
+}
+
+static Eina_Bool OnKeyUp(void* data, int type, void* eventInfo)
+{
+ Ecore_Event_Key *event = static_cast< Ecore_Event_Key* >( eventInfo );
+ tizen_remote_surface* surface = static_cast< tizen_remote_surface* >( data );
+
+ tizen_remote_surface_transfer_key_event( surface,
+ TIZEN_REMOTE_SURFACE_EVENT_TYPE_KEY_UP,
+ event->keycode,
+ ecore_device_class_get(event->dev),
+ ecore_device_subclass_get(event->dev),
+ ecore_device_identifier_get(event->dev),
+ event->timestamp
+ );
+ return EINA_TRUE;
+}
+
+static void OnSurfaceUpdate( 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 && !widgetView->IsWidgetImageView() )
+ {
+ tizen_remote_surface_transfer_visibility( surface, TIZEN_REMOTE_SURFACE_VISIBILITY_TYPE_VISIBLE);
+
+ widgetView->CreateWidgetImageView();
+ widgetView->ConnectSignal( surface );
+ ecore_event_handler_add( ECORE_EVENT_KEY_DOWN, OnKeyDown, surface );
+ ecore_event_handler_add( ECORE_EVENT_KEY_UP, OnKeyUp, 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 )
+{
+ //ToDo: WidgetDeletedSignal
+}
+
+
+static struct aul_rsm_handler_s remoteSurfaceHandler = {
+ OnSurfaceUpdate,
+ OnSurfaceMissing,
+};
+
} // unnamed namespace
Dali::WidgetView::WidgetView WidgetView::New( const std::string& widgetId, const std::string& contentInfo, int width, int height, double updatePeriod )
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() );
void WidgetView::Show()
{
- if( mObjectView )
+ if( mWidgetImageView )
{
- mObjectView.Show();
+ mWidgetImageView.SetVisible( true );
}
}
void WidgetView::Hide()
{
- if( mObjectView )
+ if( mWidgetImageView )
{
- mObjectView.Hide();
+ mWidgetImageView.SetVisible( false );
}
}
bool WidgetView::CancelTouchEvent()
{
- if( mObjectView )
+ if( mRemoteSurface )
{
- return mObjectView.CancelTouchEvent();
+ tizen_remote_surface_transfer_touch_cancel( mRemoteSurface );
+ return true;
}
return false;
mPermanentDelete = permanentDelete;
}
-void WidgetView::AddObjectView( Pepper::ObjectView objectView )
+void WidgetView::CreateWidgetImageView()
{
- mObjectView = objectView;
+ Any source;
+ mImageSource = Dali::NativeImageSource::New( source );
+ Dali::NativeImage image = Dali::NativeImage::New( *mImageSource );
+
+ mWidgetImageView = Dali::Toolkit::ImageView::New( image );
- mObjectView.SetParentOrigin( ParentOrigin::CENTER );
- mObjectView.SetAnchorPoint( AnchorPoint::CENTER );
+ mWidgetImageView.SetParentOrigin( ParentOrigin::CENTER );
+ mWidgetImageView.SetAnchorPoint( AnchorPoint::CENTER );
+ mWidgetImageView.SetSize( mWidth, mHeight );
- Self().Add( mObjectView );
+ Self().Add( mWidgetImageView );
// Disable preview and text
if( mPreviewEnabled )
Dali::WidgetView::WidgetView handle( GetOwner() );
mWidgetDeletedSignal.Emit( handle );
- mObjectView.Reset();
+ mWidgetImageView.Reset();
DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::RemoveObjectView: ObjectView is removed.\n" );
}
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::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 )
+ {
+ mRemoteSurface = surface;
+ mWidgetImageView.TouchSignal().Connect( this, &WidgetView::OnTouch );
+ mWidgetImageView.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;
+
+ switch( event.GetState( 0 ) )
{
- mObjectView.SetSize( targetSize );
+ 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;
+ }
}
+
+ tizen_remote_surface_transfer_mouse_event( mRemoteSurface,
+ type,
+ event.GetDeviceId( 0 ),
+ 1,
+ event.GetLocalPosition( 0 ).x,
+ event.GetLocalPosition( 0 ).y,
+ event.GetEllipseRadius( 0 ).x,
+ event.GetEllipseRadius( 0 ).y,
+ event.GetPressure( 0 ),
+ event.GetAngle( 0 ).degree,
+ TIZEN_INPUT_DEVICE_CLAS_MOUSE,
+ TIZEN_INPUT_DEVICE_SUBCLAS_NONE,
+ "",
+ event.GetTime()
+ );
+ return true;
+}
+
+bool WidgetView::OnWheelEvent( Dali::Actor actor, const Dali::WheelEvent& event )
+{
+ 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;
}
} // namespace Internal
#include <public_api/widget_view/widget_view.h>
// EXTERNAL INCLUDES
+#include <dali/public-api/adaptor-framework/native-image-source.h>
#include <dali-toolkit/public-api/controls/control-impl.h>
#include <dali-toolkit/public-api/controls/image-view/image-view.h>
#include <dali-toolkit/public-api/controls/text-controls/text-label.h>
-#include <pepper-dali/public-api/object-view/object-view.h>
+#include <wayland-extension/tizen-remote-surface-client-protocol.h>
+#include <tbm_surface.h>
#include <bundle.h>
namespace Dali
*/
void SetPermanentDelete( bool permanentDelete );
- void AddObjectView( Pepper::ObjectView objectView );
+// ToDo: This funstion will be used for widgetDeletedSignal
void RemoveObjectView();
void SendWidgetEvent( int event );
+ bool IsWidgetImageView();
+
+ void UpdateImageSource( tbm_surface_h source );
+
+ void CreateWidgetImageView();
+
+ void ConnectSignal( tizen_remote_surface* surface );
+
+ bool OnTouch( Dali::Actor actor, const Dali::TouchData& event );
+
+ bool OnWheelEvent( Dali::Actor actor, const Dali::WheelEvent& event );
+
public: //Signals
/**
private:
- Pepper::ObjectView mObjectView; ///< Widget content
+ Toolkit::ImageView mWidgetImageView; ///< Widget content
Toolkit::ImageView mPreviewImage; ///< Preview image
Toolkit::TextLabel mStateText; ///< State text
+ Dali::NativeImageSourcePtr mImageSource;
std::string mWidgetId;
std::string mInstanceId;
bool mStateTextEnabled;
bool mPermanentDelete;
+ tizen_remote_surface* mRemoteSurface;
+
// Signals
Dali::WidgetView::WidgetView::WidgetViewSignalType mWidgetAddedSignal;
Dali::WidgetView::WidgetView::WidgetViewSignalType mWidgetDeletedSignal;
#include <unistd.h>
#include <widget_errno.h>
#include <widget_instance.h>
+#include <aul_rsm_viewer.h>
namespace Dali
{
WidgetViewManager::~WidgetViewManager()
{
+ aul_rsm_viewer_fini();
widget_instance_unlisten_event( WidgetViewManager::WidgetEventCallback );
widget_instance_fini();
}
return WIDGET_ERROR_PERMISSION_DENIED;
}
- // create compositor
- mCompositor = Pepper::Compositor::New( application, name );
-
- mCompositor.ObjectViewAddedSignal().Connect( this, &WidgetViewManager::OnObjectViewAdded );
- mCompositor.ObjectViewDeletedSignal().Connect( this, &WidgetViewManager::OnObjectViewDeleted );
+ // Binds tizen remote surface manager & connects callback
+ if( aul_rsm_viewer_init() < 0 )
+ {
+ return WIDGET_ERROR_FAULT;
+ }
// init widget service
widget_instance_init( name.c_str() );
DALI_LOG_INFO( gWidgetViewManagerLogging, Debug::Verbose, "WidgetViewManager::Initialize: success.\n" );
- setenv("WAYLAND_DISPLAY", mCompositor.GetName().c_str(), 1);
-
return WIDGET_ERROR_NONE;
}
return widgetView;
}
-void WidgetViewManager::OnObjectViewAdded( Pepper::Compositor compositor, Pepper::ObjectView objectView )
-{
- std::string appId = objectView.GetAppId(); // widget instance id
-
- if( mWidgetViewContainer.size() > 0)
- {
- WidgetViewIter iter = mWidgetViewContainer.find( appId );
- if( iter != mWidgetViewContainer.end() )
- {
- Dali::WidgetView::WidgetView widgetView = iter->second;
-
- Dali::WidgetView::GetImplementation( widgetView ).AddObjectView( objectView );
- }
- }
-
- DALI_LOG_INFO( gWidgetViewManagerLogging, Debug::Verbose, "WidgetViewManager::OnObjectViewAdded: ObjectView is added!\n" );
-}
-
-void WidgetViewManager::OnObjectViewDeleted( Pepper::Compositor compositor, Pepper::ObjectView objectView )
-{
- std::string appId = objectView.GetAppId(); // widget instance id
-
- // Remove from map
- if( mWidgetViewContainer.size() > 0)
- {
- WidgetViewIter iter = mWidgetViewContainer.find( appId );
- if( iter != mWidgetViewContainer.end() )
- {
- Dali::WidgetView::WidgetView widgetView = iter->second;
-
- Dali::WidgetView::GetImplementation( widgetView ).RemoveObjectView();
-
- mWidgetViewContainer.erase( iter );
- }
- }
-
- DALI_LOG_INFO( gWidgetViewManagerLogging, Debug::Verbose, "WidgetViewManager::OnObjectViewDeleted: ObjectView is deleted!\n" );
-}
-
int WidgetViewManager::WidgetEventCallback( const char* widgetId, const char* instanceId, int event, void* data )
{
WidgetViewManager* widgetViewManager = static_cast< WidgetViewManager* >( data );