// EXTERNAL INCLUDES
#include <dali/public-api/common/stage.h>
#include <dali/public-api/events/touch-data.h>
+#include <dali/public-api/events/key-event.h>
#include <dali/public-api/events/wheel-event.h>
#include <dali/public-api/images/native-image.h>
#include <dali/public-api/object/type-registry.h>
#include <dali-toolkit/public-api/visuals/visual-properties.h>
#include <dali-toolkit/devel-api/visual-factory/visual-factory.h>
#include <dali/integration-api/debug.h>
+#include <dali/devel-api/events/touch-event-devel.h>
+#include <dali/devel-api/events/key-event-devel.h>
#include <string.h>
+#include <Ecore_Wayland.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 <tbm_surface_internal.h>
#include <unistd.h>
#include <libintl.h>
+#include <xkbcommon/xkbcommon.h>
namespace Dali
{
DALI_PROPERTY_REGISTRATION( Dali::WidgetView, WidgetView, "widgetStateFaulted", BOOLEAN, WIDGET_STATE_FAULTED )
DALI_PROPERTY_REGISTRATION( Dali::WidgetView, WidgetView, "permanentDelete", BOOLEAN, PERMANENT_DELETE )
+// Internal property
+// ToDo it should be changed public property.
+const int TERMINATE_WIDGET = Dali::WidgetView::WidgetView::Property::PERMANENT_DELETE+1;
+const int RETRY_TEXT = TERMINATE_WIDGET+1;
+const int WIDGET_IMAGE = RETRY_TEXT+1;
+
+Dali::PropertyRegistration internalProperty1( typeRegistration, "terminateWidget", TERMINATE_WIDGET, Property::BOOLEAN, Dali::WidgetView::Internal::WidgetView::SetProperty, Dali::WidgetView::Internal::WidgetView::GetProperty );
+Dali::PropertyRegistration internalProperty2( typeRegistration, "retryText", RETRY_TEXT, Property::MAP, Dali::WidgetView::Internal::WidgetView::SetProperty, Dali::WidgetView::Internal::WidgetView::GetProperty );
+Dali::PropertyRegistration internalProperty3( typeRegistration, "widgetImage", WIDGET_IMAGE, Property::MAP, Dali::WidgetView::Internal::WidgetView::SetProperty, Dali::WidgetView::Internal::WidgetView::GetProperty );
+
// 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, "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 )
+DALI_SIGNAL_REGISTRATION( Dali::WidgetView, WidgetView, "widgetTerminated", SIGNAL_WIDGET_TERMINATED )
// Actions
DALI_ACTION_REGISTRATION( Dali::WidgetView, WidgetView, "pauseWidget", ACTION_WIDGETVIEW_PAUSE_WIDGET );
DALI_TYPE_REGISTRATION_END()
struct wl_buffer* preBuffer;
+struct tizen_remote_surface* remoteSurface;
+const char* const STATE_TEXT( "stateText" );
const char* const FONT_STYLE( "fontStyle" );
const char* const TEXT_POINT_SIZE( "textPointSize" );
const char* const TEXT_COLOR( "textColor" );
+const char* const TEXT_VISIBLE( "textVisible" ); //ToDo: it should be removed after retry text property is public one
+
+// ToDo: Now dali provides only dali key codes.
+// This funtion will be used to get platform specific key codes from key name
+struct KeyCodeMap
+{
+ xkb_keysym_t keySym;
+ xkb_keycode_t keyCode;
+ bool isKeyCode;
+};
+
+static void FindKeyCode( struct xkb_keymap* keyMap, xkb_keycode_t key, void* data )
+{
+ KeyCodeMap* foundKeyCode = static_cast< KeyCodeMap* >( data );
+ if( foundKeyCode->isKeyCode )
+ {
+ return;
+ }
+
+ xkb_keysym_t keySym = foundKeyCode->keySym;
+ int nsyms = 0;
+ const xkb_keysym_t* symsOut = NULL;
+
+ nsyms = xkb_keymap_key_get_syms_by_level( keyMap, key, 0, 0, &symsOut );
+
+ if( nsyms && symsOut )
+ {
+ if( *symsOut == keySym )
+ {
+ foundKeyCode->keyCode = key;
+ foundKeyCode->isKeyCode = true;
+ }
+ }
+}
+
+static bool GetKeyCode( std::string keyName, int32_t& keyCode )
+{
+ xkb_keymap* keyMap = NULL;
+ Ecore_Wl_Input* ecoreWlInput = NULL;
+ xkb_keysym_t sym = XKB_KEY_NoSymbol;
+ KeyCodeMap foundKeyCode;
+
+ ecoreWlInput = ecore_wl_input_get();
+ if( !ecoreWlInput )
+ {
+ DALI_LOG_ERROR( "Failed to get Ecore_Wl_Input in WidgetView\n" );
+ return false;
+ }
+
+ keyMap = ecore_wl_input_keymap_get( ecoreWlInput );
+ if( !keyMap )
+ {
+ DALI_LOG_ERROR( "Failed to get keymap in WidgetView\n" );
+ return false;
+ }
+
+ sym = xkb_keysym_from_name( keyName.c_str(), XKB_KEYSYM_NO_FLAGS );
+ if( sym == XKB_KEY_NoSymbol )
+ {
+ DALI_LOG_ERROR( "Failed to get keysym in WidgetView\n" );
+ return false;
+ }
+
+ foundKeyCode.keySym = sym;
+ foundKeyCode.isKeyCode = false;
+ xkb_keymap_key_for_each( keyMap, FindKeyCode, &foundKeyCode );
+ keyCode = static_cast< int32_t >( foundKeyCode.keyCode );
+ return true;
+}
static void OnBufferUpdated( struct tizen_remote_surface *surface, uint32_t type, struct wl_buffer *buffer,
int32_t img_file_fd, uint32_t img_file_size, uint32_t time, struct wl_array *keys,
if( preBuffer != NULL && tizen_remote_surface_get_version( surface ) >= TIZEN_REMOTE_SURFACE_RELEASE_SINCE_VERSION )
{
tizen_remote_surface_release( surface, preBuffer );
+ tbm_surface_h preTbmSurface = (tbm_surface_h)wl_buffer_get_user_data( preBuffer );
+ tbm_surface_internal_unref( preTbmSurface );
+ wl_buffer_destroy( preBuffer );
}
+ remoteSurface = surface;
preBuffer = buffer;
close( img_file_fd );
{
Dali::WidgetView::Internal::WidgetView* widgetView = static_cast< Dali::WidgetView::Internal::WidgetView* >( data );
- if( widgetView )
+ if( widgetView && !widgetView->IsWidgetFaulted() )
{
widgetView->CloseRemoteSurface();
widgetView->RemoveWidgetImage();
mUpdatePeriod( 0.0 ),
mPreviewVisible( true ),
mLoadingTextVisible( true ),
- mTapTextVisible( true ),
+ mLoadingTextString(),
+ mRetryTextVisible( true ),
+ mRetryTextString(),
+ mRetryState( false ),
mPermanentDelete( false ),
mWatcherHandle( NULL ),
mRemoteSurface( NULL )
mUpdatePeriod( updatePeriod ),
mPreviewVisible( true ),
mLoadingTextVisible( true ),
- mTapTextVisible( true ),
+ mLoadingTextString(),
+ mRetryTextVisible( true ),
+ mRetryTextString(),
+ mRetryState( false ),
mPermanentDelete( false ),
mWatcherHandle( NULL ),
mRemoteSurface( NULL )
WidgetView::~WidgetView()
{
- if( !mWidgetId.empty() && !mInstanceId.empty() )
- {
- widget_instance_terminate( mInstanceId.c_str() );
-
- if( mPermanentDelete )
- {
- widget_instance_destroy( mInstanceId.c_str() );
- }
- }
}
bool WidgetView::PauseWidget()
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 );
+ DALI_LOG_ERROR( "WidgetView::PauseWidget: Fail to pause widget(%s, %s) [%d]\n", mWidgetId.c_str(), mInstanceId.c_str(), ret );
return false;
}
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 );
+ DALI_LOG_ERROR( "WidgetView::ResumeWidget: Fail to resume widget(%s, %s) [%d]\n", mWidgetId.c_str(), mInstanceId.c_str(), ret );
return false;
}
void WidgetView::SetLoadingTextVisible( bool visible )
{
- if( mStateText && mLoadingTextVisible != visible )
+ if( mLoadingText && mLoadingTextVisible != visible )
{
mLoadingTextVisible = visible;
if( visible )
{
- mStateText.SetProperty( Toolkit::TextLabel::Property::TEXT, GET_LOCALE_TEXT( "IDS_ST_POP_LOADING_ING" ) );
+ mLoadingText.SetProperty( Toolkit::TextLabel::Property::TEXT,
+ ( mLoadingTextString.empty() )? GET_LOCALE_TEXT( "IDS_ST_POP_LOADING_ING" ) : mLoadingTextString );
+ }
+ mLoadingText.SetVisible( visible );
+ }
+}
+
+void WidgetView::SetRetryTextVisible( bool visible )
+{
+ if( mRetryText && mRetryTextVisible != visible )
+ {
+ mRetryTextVisible = visible;
+
+ if( visible )
+ {
+ mRetryText.SetProperty( Toolkit::TextLabel::Property::TEXT,
+ ( mRetryTextString.empty() )? GET_LOCALE_TEXT( "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" ) : mRetryTextString );
}
- mStateText.SetVisible( visible );
+ mRetryText.SetVisible( visible );
}
}
return mLoadingTextVisible;
}
+bool WidgetView::IsRetryTextVisible()
+{
+ return mRetryTextVisible;
+}
+
void WidgetView::ActivateFaultedWidget()
{
if( mPid < 0 )
{
// Enable preview and loading text
- ShowTapWidgetState( false );
+ ShowRetryState( false );
ShowLoadingState( true );
// launch widget again
DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::ActivateFaultedWidget: widget_instance_launch is failed. [%s]\n", mWidgetId.c_str() );
ShowLoadingState( false );
- ShowTapWidgetState( true );
+ ShowRetryState( true );
// Emit signal
Dali::WidgetView::WidgetView handle( GetOwner() );
mWidgetCreationAbortedSignal.Emit( handle );
-
return;
}
+ screen_connector_toolkit_ops ops;
+ ops.updated_cb = OnBufferUpdated;
+ ops.removed_cb = OnSurfaceRemoved;
+ ops.added_cb = OnBufferAdded;
+ mWatcherHandle = screen_connector_toolkit_add(&ops, (char *)mInstanceId.c_str(), SCREEN_CONNECTOR_SCREEN_TYPE_WIDGET, this);
+
DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::ActivateFaultedWidget: widget_instance_launch is called. [%s, mPid = %d]\n", mWidgetId.c_str(), mPid );
}
}
mWidgetImageView.SetAnchorPoint( AnchorPoint::CENTER );
mWidgetImageView.SetSize( mWidth, mHeight );
+ if( !mWidgetImagePropertyMap.Empty() )
+ {
+ mWidgetImageView.SetProperty( Toolkit::ImageView::Property::IMAGE, mWidgetImagePropertyMap );
+ }
+
Self().Add( mWidgetImageView );
//EFL app should be pre multiplied image.
void WidgetView::RemoveWidgetImage()
{
- ShowTapWidgetState( true );
+ if( mWidgetImageView )
+ {
+ mWidgetImageView.SetVisible( false );
+ mWidgetImageView.Reset();
- // Emit signal
- Dali::WidgetView::WidgetView handle( GetOwner() );
- mWidgetDeletedSignal.Emit( handle );
+ ShowRetryState( true );
- mWidgetImageView.SetVisible( false );
- mWidgetImageView.Reset();
+ Dali::WidgetView::WidgetView handle( GetOwner() );
+ mWidgetDeletedSignal.Emit( handle );
+ }
DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::RemoveWidgetImage: Widget image is removed.\n" );
}
+void WidgetView::TerminateWidget()
+{
+ if( !mWidgetId.empty() && !mInstanceId.empty() )
+ {
+ widget_instance_terminate( mInstanceId.c_str() );
+
+ if( mPermanentDelete )
+ {
+ widget_instance_destroy( mInstanceId.c_str() );
+ }
+
+ Dali::WidgetView::WidgetView handle( GetOwner() );
+ mWidgetTerminatedSignal.Emit( handle );
+ mWidgetDeletedSignal.Emit( handle );
+
+ mWidgetId.clear();
+ mInstanceId.clear();
+
+ CloseRemoteSurface();
+ }
+
+ DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::TerminateWidget: Widget is terminated/destroyed and deleted signal is emitted.\n" );
+
+}
+
void WidgetView::SendWidgetEvent( int event )
{
Dali::WidgetView::WidgetView handle( GetOwner() );
case WIDGET_INSTANCE_EVENT_FAULT:
{
mWidgetFaultedSignal.Emit( handle );
+ CloseRemoteSurface();
+ RemoveWidgetImage();
break;
}
default:
}
case Dali::WidgetView::WidgetView::Property::PERMANENT_DELETE:
{
- bool del;
- if( value.Get( del ) )
+ bool permanent;
+ if( value.Get( permanent ) )
+ {
+ impl.SetPermanentDelete( permanent );
+ }
+ break;
+ }
+ case TERMINATE_WIDGET:
+ {
+ bool del = false;
+ if( value.Get( del ) && del )
+ {
+ impl.TerminateWidget();
+ }
+ break;
+ }
+ case RETRY_TEXT:
+ {
+ Property::Map map;
+
+ if( value.Get( map ) )
+ {
+ impl.SetRetryTextPropertyMap( map );
+ }
+ break;
+ }
+ case WIDGET_IMAGE:
+ {
+ Property::Map map;
+ if( value.Get( map ) )
{
- impl.SetPermanentDelete( del );
+ impl.SetWidgetImagePropertyMap( map );
}
break;
}
return mWidgetFaultedSignal;
}
+Dali::WidgetView::WidgetView::WidgetViewSignalType& WidgetView::WidgetTerminatedSignal()
+{
+ return mWidgetTerminatedSignal;
+}
+
void WidgetView::OnInitialize()
{
char* instanceId = NULL;
mStateTextActor.SetAnchorPoint( AnchorPoint::CENTER );
mStateTextActor.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
- // State text
- mStateText = Toolkit::TextLabel::New( GET_LOCALE_TEXT( "IDS_ST_POP_LOADING_ING" ) );
- mStateText.SetParentOrigin( ParentOrigin::CENTER );
- mStateText.SetAnchorPoint( AnchorPoint::CENTER );
- mStateText.SetProperty( Toolkit::TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
- mStateText.SetProperty( Toolkit::TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER" );
- mStateText.SetProperty( Toolkit::TextLabel::Property::TEXT_COLOR, Dali::Color::WHITE );
- mStateText.SetProperty( Toolkit::TextLabel::Property::FONT_STYLE, "Bold" );
- mStateText.SetProperty( Toolkit::TextLabel::Property::POINT_SIZE, TextPixelToPointSize( DEFAULT_FONT_PIXEL_SIZE ) );
+ // Loading text
+ mLoadingText = Toolkit::TextLabel::New( ( mLoadingTextString.empty() )? GET_LOCALE_TEXT( "IDS_ST_POP_LOADING_ING" ) : mLoadingTextString );
+ mLoadingText.SetParentOrigin( ParentOrigin::CENTER );
+ mLoadingText.SetAnchorPoint( AnchorPoint::CENTER );
+ mLoadingText.SetProperty( Toolkit::TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
+ mLoadingText.SetProperty( Toolkit::TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER" );
+ mLoadingText.SetProperty( Toolkit::TextLabel::Property::TEXT_COLOR, Dali::Color::WHITE );
+ mLoadingText.SetProperty( Toolkit::TextLabel::Property::FONT_STYLE, "Bold" );
+ mLoadingText.SetProperty( Toolkit::TextLabel::Property::POINT_SIZE, TextPixelToPointSize( DEFAULT_FONT_PIXEL_SIZE ) );
mPreviewActor.Add( mStateTextActor );
- mStateTextActor.Add( mStateText );
+ mStateTextActor.Add( mLoadingText );
+
+ // Retry text
+ mRetryText = Toolkit::TextLabel::New( ( mRetryTextString.empty() )? GET_LOCALE_TEXT( "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" ) : mRetryTextString );
+ mRetryText.SetParentOrigin( ParentOrigin::CENTER );
+ mRetryText.SetAnchorPoint( AnchorPoint::CENTER );
+ mRetryText.SetProperty( Toolkit::TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
+ mRetryText.SetProperty( Toolkit::TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER" );
+ mRetryText.SetProperty( Toolkit::TextLabel::Property::TEXT_COLOR, Dali::Color::WHITE );
+ mRetryText.SetProperty( Toolkit::TextLabel::Property::FONT_STYLE, "Bold" );
+ mRetryText.SetProperty( Toolkit::TextLabel::Property::POINT_SIZE, TextPixelToPointSize( DEFAULT_FONT_PIXEL_SIZE ) );
+
+ mStateTextActor.Add( mRetryText );
+ mRetryText.SetVisible( false );
// launch widget
mPid = widget_instance_launch( instanceId, (char *)mContentInfo.c_str(), mWidth, mHeight );
if( mPid < 0)
{
- ShowTapWidgetState( true );
+ ShowLoadingState( false );
+ ShowRetryState( true );
DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::OnInitialize: widget_instance_launch is failed. [%s]\n", mWidgetId.c_str() );
ops.updated_cb = OnBufferUpdated;
ops.removed_cb = OnSurfaceRemoved;
ops.added_cb = OnBufferAdded;
- mWatcherHandle = screen_connector_toolkit_add(&ops, (char *)instanceId, SCREEN_CONNECTOR_SCREEEN_TYPE_WIDGET, this);
+ mWatcherHandle = screen_connector_toolkit_add(&ops, (char *)instanceId, SCREEN_CONNECTOR_SCREEN_TYPE_WIDGET, this);
DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::OnInitialize: widget_instance_launch is called. [%s, mPid = %d]\n", mWidgetId.c_str(), mPid );
}
void WidgetView::UpdateImageSource( tbm_surface_h source )
{
- mImageSource->SetSource( source );
- Dali::Stage::GetCurrent().KeepRendering( 0.0f );
+ mImageSource = Dali::NativeImageSource::New( source );
+ Dali::NativeImage image = Dali::NativeImage::New( *mImageSource );
+
+ if( mWidgetImageView )
+ {
+ mWidgetImageView.SetImage( image );
+ mWidgetImageView.SetProperty( Toolkit::ImageView::Property::PRE_MULTIPLIED_ALPHA, true );
+ }
}
void WidgetView::ConnectSignal( tizen_remote_surface* 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 )
+ if( event.GetPointCount() == 0 )
{
return false;
}
- switch( event.GetState( 0 ) )
+ if( mRemoteSurface == NULL )
{
- 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;
- }
+ return false;
}
- int button = 1;
-
- if( type == TIZEN_REMOTE_SURFACE_EVENT_TYPE_MOUSE_MOVE )
+ DevelDevice::Class::Type deviceType = DevelTouchData::GetDeviceClass( event, 0 );
+ if( deviceType == DevelDevice::Class::MOUSE )
{
- button = 0 ;
+ return MouseEvent( event );
+ }
+ else if( deviceType == DevelDevice::Class::TOUCH )
+ {
+ return TouchEvent( event );
}
- 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;
+ return false;
}
bool WidgetView::OnWheelEvent( Dali::Actor actor, const Dali::WheelEvent& event )
"",
event.timeStamp
);
- return true;
+ return false;
+}
+
+bool WidgetView::OnKeyEvent( const Dali::KeyEvent& event )
+{
+ if( mRemoteSurface == NULL )
+ {
+ return false;
+ }
+
+ tizen_remote_surface_event_type type = TIZEN_REMOTE_SURFACE_EVENT_TYPE_NONE;
+
+ switch( event.state )
+ {
+ case Dali::KeyEvent::Down:
+ {
+ type = TIZEN_REMOTE_SURFACE_EVENT_TYPE_KEY_DOWN;
+ break;
+ }
+ case Dali::KeyEvent::Up:
+ {
+ type = TIZEN_REMOTE_SURFACE_EVENT_TYPE_KEY_UP;
+ break;
+ }
+ case Dali::KeyEvent::Last:
+ {
+ break;
+ }
+ default:
+ {
+ return false;
+ }
+ }
+
+ int32_t keyCode;
+ if( GetKeyCode( event.keyPressedName, keyCode ) == false )
+ {
+ return false;
+ }
+
+ tizen_remote_surface_transfer_key_event( mRemoteSurface,
+ type,
+ keyCode,
+ Dali::DevelKeyEvent::GetDeviceClass( event ),
+ Dali::DevelKeyEvent::GetDeviceSubclass( event ),
+ "",
+ static_cast< uint32_t >( event.time )
+ );
+
+ return false;
}
Vector3 WidgetView::GetNaturalSize()
void WidgetView::CloseRemoteSurface()
{
- screen_connector_toolkit_remove( mWatcherHandle );
- mRemoteSurface = NULL;
+ if( mWatcherHandle != NULL )
+ {
+ if( remoteSurface != NULL && preBuffer != NULL && tizen_remote_surface_get_version( remoteSurface ) >= TIZEN_REMOTE_SURFACE_RELEASE_SINCE_VERSION )
+ {
+ tizen_remote_surface_release( remoteSurface, preBuffer );
+ tbm_surface_h preTbmSurface = (tbm_surface_h)wl_buffer_get_user_data( preBuffer );
+ tbm_surface_internal_unref( preTbmSurface );
+ wl_buffer_destroy( preBuffer );
+ preBuffer = NULL;
+ }
+
+ screen_connector_toolkit_remove( mWatcherHandle );
+ mWatcherHandle = NULL;
+ mRemoteSurface = NULL;
+ mPid = -1;
+ }
}
void WidgetView::ShowLoadingState( bool show )
mPreviewImage.SetVisible( show );
}
- if( mStateText && mLoadingTextVisible )
+ if( mLoadingText && mLoadingTextVisible )
{
- mStateText.SetProperty( Toolkit::TextLabel::Property::TEXT, GET_LOCALE_TEXT( "IDS_ST_POP_LOADING_ING" ) );
- mStateText.SetVisible( show );
+ mLoadingText.SetProperty( Toolkit::TextLabel::Property::TEXT,
+ ( mLoadingTextString.empty() )? GET_LOCALE_TEXT( "IDS_ST_POP_LOADING_ING" ) : mLoadingTextString );
+ mLoadingText.SetVisible( show );
}
}
-void WidgetView::ShowTapWidgetState( bool show )
+void WidgetView::ShowRetryState( bool show )
{
if( mPreviewImage && mPreviewVisible )
{
mPreviewImage.SetVisible( false );
}
- if( mStateText && mTapTextVisible )
+ if( mRetryText && mRetryTextVisible )
{
- mStateText.SetProperty( Toolkit::TextLabel::Property::TEXT, GET_LOCALE_TEXT( "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" ) );
- mStateText.SetVisible( show );
+ mRetryText.SetProperty( Toolkit::TextLabel::Property::TEXT,
+ ( mRetryTextString.empty() )? GET_LOCALE_TEXT( "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY" ) : mRetryTextString );
+ mRetryText.SetVisible( show );
+ mRetryState = show;
}
}
void WidgetView::SetLoadingTextPropertyMap( Property::Map map )
{
- if( mStateText )
+ if( mLoadingText )
{
+ Property::Value* loadingText = map.Find( STATE_TEXT );
+ std::string text;
+ if( loadingText && loadingText->Get( text ) )
+ {
+ mLoadingText.SetProperty( Toolkit::TextLabel::Property::TEXT, text );
+ mLoadingTextString = text;
+ }
+
Property::Value* fontStyle = map.Find( FONT_STYLE );
std::string style;
if( fontStyle && fontStyle->Get( style ) )
{
- mStateText.SetProperty( Toolkit::TextLabel::Property::FONT_STYLE, style );
+ mLoadingText.SetProperty( Toolkit::TextLabel::Property::FONT_STYLE, style );
}
Property::Value* textPointSize = map.Find( TEXT_POINT_SIZE );
if( textPointSize && textPointSize->Get( size ) )
{
- mStateText.SetProperty( Toolkit::TextLabel::Property::POINT_SIZE, size );
+ mLoadingText.SetProperty( Toolkit::TextLabel::Property::POINT_SIZE, size );
}
Property::Value* textColor = map.Find( TEXT_COLOR );
if( textColor && textColor->Get( color ) )
{
- mStateText.SetProperty( Toolkit::TextLabel::Property::TEXT_COLOR, color );
+ mLoadingText.SetProperty( Toolkit::TextLabel::Property::TEXT_COLOR, color );
+ }
+ }
+}
+
+void WidgetView::SetRetryTextPropertyMap( Property::Map map )
+{
+ if( mRetryText )
+ {
+ Property::Value* retryText = map.Find( STATE_TEXT );
+ std::string text;
+ if( retryText && retryText->Get( text ) )
+ {
+ mRetryText.SetProperty( Toolkit::TextLabel::Property::TEXT, text );
+ mRetryTextString = text;
}
+
+ Property::Value* fontStyle = map.Find( FONT_STYLE );
+ std::string style;
+
+ if( fontStyle && fontStyle->Get( style ) )
+ {
+ mRetryText.SetProperty( Toolkit::TextLabel::Property::FONT_STYLE, style );
+ }
+
+ Property::Value* textPointSize = map.Find( TEXT_POINT_SIZE );
+ float size = 0.f;
+
+ if( textPointSize && textPointSize->Get( size ) )
+ {
+ mRetryText.SetProperty( Toolkit::TextLabel::Property::POINT_SIZE, size );
+ }
+
+ Property::Value* textColor = map.Find( TEXT_COLOR );
+ Vector4 color;
+ if( textColor && textColor->Get( color ) )
+ {
+ mRetryText.SetProperty( Toolkit::TextLabel::Property::TEXT_COLOR, color );
+ }
+
+ Property::Value* textVisible = map.Find( TEXT_VISIBLE );
+ bool visible = true;
+ if( textVisible && textVisible->Get( visible ) )
+ {
+ SetRetryTextVisible( visible );
+ }
+ }
+}
+
+void WidgetView::SetWidgetImagePropertyMap( Property::Map map )
+{
+ mWidgetImagePropertyMap = map;
+ if( mWidgetImageView )
+ {
+ mWidgetImageView.SetProperty( Toolkit::ImageView::Property::IMAGE, map );
}
}
return (pixelSize * 72.0f) / meanDpi;
}
+void WidgetView::MouseIn( const Dali::TouchData& event )
+{
+ Vector2 localPos = event.GetLocalPosition( 0 );
+
+ tizen_remote_surface_transfer_mouse_event( mRemoteSurface,
+ TIZEN_REMOTE_SURFACE_EVENT_TYPE_MOUSE_IN,
+ 0,
+ 0,
+ (int)localPos.x,
+ (int)localPos.y,
+ 0,
+ 0,
+ 0,
+ 0,
+ TIZEN_INPUT_DEVICE_CLAS_MOUSE,
+ DevelTouchData::GetDeviceSubclass( event, 0 ),
+ "",
+ event.GetTime()
+ );
+}
+
+void WidgetView::MouseOut( const Dali::TouchData& event )
+{
+ tizen_remote_surface_transfer_mouse_event( mRemoteSurface,
+ TIZEN_REMOTE_SURFACE_EVENT_TYPE_MOUSE_OUT,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ TIZEN_INPUT_DEVICE_CLAS_MOUSE,
+ DevelTouchData::GetDeviceSubclass( event, 0 ),
+ "",
+ event.GetTime()
+ );
+}
+
+bool WidgetView::MouseEvent( const Dali::TouchData& event )
+{
+ tizen_remote_surface_event_type type = TIZEN_REMOTE_SURFACE_EVENT_TYPE_NONE;
+ int button = 1;
+
+ switch( event.GetState( 0 ) )
+ {
+ case Dali::PointState::UP:
+ {
+ type = TIZEN_REMOTE_SURFACE_EVENT_TYPE_MOUSE_UP;
+
+ if( mRetryState )
+ {
+ ActivateFaultedWidget();
+ return false;
+ }
+
+ break;
+ }
+ case Dali::PointState::DOWN:
+ {
+ type = TIZEN_REMOTE_SURFACE_EVENT_TYPE_MOUSE_DOWN;
+ MouseIn( event );
+
+ break;
+ }
+ case Dali::PointState::MOTION:
+ {
+ type = TIZEN_REMOTE_SURFACE_EVENT_TYPE_MOUSE_MOVE;
+ button = 0 ;
+ break;
+ }
+ default:
+ {
+ return false;
+ }
+ }
+
+ 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_MOUSE,
+ DevelTouchData::GetDeviceSubclass( event, 0 ),
+ "",
+ event.GetTime()
+ );
+
+ if( event.GetState( 0 ) == Dali::PointState::UP)
+ {
+ MouseOut( event );
+ }
+
+ return true;
+}
+
+bool WidgetView::TouchEvent( const Dali::TouchData& event )
+{
+ tizen_remote_surface_event_type type = TIZEN_REMOTE_SURFACE_EVENT_TYPE_NONE;
+ int button = 1;
+
+ switch( event.GetState( 0 ) )
+ {
+ case Dali::PointState::UP:
+ {
+ type = TIZEN_REMOTE_SURFACE_EVENT_TYPE_TOUCH_UP;
+
+ if( mRetryState )
+ {
+ ActivateFaultedWidget();
+ return false;
+ }
+
+ break;
+ }
+ case Dali::PointState::DOWN:
+ {
+ type = TIZEN_REMOTE_SURFACE_EVENT_TYPE_TOUCH_DOWN;
+
+ break;
+ }
+ case Dali::PointState::MOTION:
+ {
+ type = TIZEN_REMOTE_SURFACE_EVENT_TYPE_TOUCH_MOVE;
+ button = 0;
+ break;
+ }
+ default:
+ {
+ return false;
+ }
+ }
+
+ Vector2 localPos = event.GetLocalPosition( 0 );
+
+ tizen_remote_surface_transfer_touch_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,
+ DevelTouchData::GetDeviceSubclass( event, 0 ),
+ "",
+ event.GetTime()
+ );
+ return true;
+}
+
} // namespace Internal
} // namespace WidgetView