Revert "Revert "HoverEvent class pimpling""
[platform/core/uifw/dali-core.git] / dali / internal / event / actors / actor-impl.cpp
index 38b9ace..d620da5 100755 (executable)
@@ -225,6 +225,7 @@ DALI_PROPERTY_TABLE_END( DEFAULT_ACTOR_PROPERTY_START_INDEX, ActorDefaultPropert
 
 // Signals
 
+const char* const SIGNAL_TOUCHED = "touched";
 const char* const SIGNAL_HOVERED = "hovered";
 const char* const SIGNAL_WHEEL_EVENT = "wheelEvent";
 const char* const SIGNAL_ON_SCENE = "onScene";
@@ -248,6 +249,7 @@ BaseHandle CreateActor()
 
 TypeRegistration mType( typeid(Dali::Actor), typeid(Dali::Handle), CreateActor, ActorDefaultProperties );
 
+SignalConnectorType signalConnector1( mType, SIGNAL_TOUCHED, &Actor::DoConnectSignal );
 SignalConnectorType signalConnector2( mType, SIGNAL_HOVERED, &Actor::DoConnectSignal );
 SignalConnectorType signalConnector3( mType, SIGNAL_WHEEL_EVENT, &Actor::DoConnectSignal );
 SignalConnectorType signalConnector4( mType, SIGNAL_ON_SCENE, &Actor::DoConnectSignal );
@@ -1788,7 +1790,7 @@ bool Actor::IsKeyboardFocusable() const
 
 bool Actor::GetTouchRequired() const
 {
-  return !mTouchSignal.Empty() || mDerivedRequiresTouch;
+  return !mTouchedSignal.Empty() || !mTouchSignal.Empty() || mDerivedRequiresTouch;
 }
 
 bool Actor::GetHoverRequired() const
@@ -1822,7 +1824,7 @@ bool Actor::IsGestureRequred( DevelGesture::Type type ) const
   return mGestureData && mGestureData->IsGestureRequred( type );
 }
 
-bool Actor::EmitTouchEventSignal( const Dali::TouchData& touch )
+bool Actor::EmitTouchEventSignal( const TouchEvent& event, const Dali::TouchData& touch )
 {
   bool consumed = false;
 
@@ -1832,6 +1834,18 @@ bool Actor::EmitTouchEventSignal( const Dali::TouchData& touch )
     consumed = mTouchSignal.Emit( handle, touch );
   }
 
+  if( !mTouchedSignal.Empty() )
+  {
+    Dali::Actor handle( this );
+    consumed |= mTouchedSignal.Emit( handle, event );
+  }
+
+  if( !consumed )
+  {
+    // Notification for derived classes
+    consumed = OnTouchEvent( event ); // TODO
+  }
+
   return consumed;
 }
 
@@ -1909,6 +1923,11 @@ void Actor::EmitChildRemovedSignal( Actor& child )
   }
 }
 
+Dali::Actor::TouchSignalType& Actor::TouchedSignal()
+{
+  return mTouchedSignal;
+}
+
 Dali::Actor::TouchDataSignalType& Actor::TouchSignal()
 {
   return mTouchSignal;
@@ -1969,7 +1988,11 @@ bool Actor::DoConnectSignal( BaseObject* object, ConnectionTrackerInterface* tra
   bool connected( true );
   Actor* actor = static_cast< Actor* >( object ); // TypeRegistry guarantees that this is the correct type.
 
-  if( 0 == signalName.compare( SIGNAL_HOVERED ) )
+  if( 0 == signalName.compare( SIGNAL_TOUCHED ) )
+  {
+    actor->TouchedSignal().Connect( tracker, functor );
+  }
+  else if( 0 == signalName.compare( SIGNAL_HOVERED ) )
   {
     actor->HoveredSignal().Connect( tracker, functor );
   }
@@ -2028,6 +2051,7 @@ Actor::Actor( DerivedType derivedType, const SceneGraph::Node& node )
   mAnchorPoint( NULL ),
   mRelayoutData( NULL ),
   mGestureData( NULL ),
+  mTouchedSignal(),
   mTouchSignal(),
   mHoveredSignal(),
   mWheelEventSignal(),
@@ -4791,12 +4815,12 @@ void Actor::SetPreferredSize( const Vector2& size )
   // A 0 width or height may also be required so if the resize policy has not been changed, i.e. is still set to DEFAULT,
   // then change to FIXED as well
 
-  if( size.width > 0.0f || GetResizePolicy( Dimension::WIDTH ) == ResizePolicy::DEFAULT )
+  if( size.width > 0.0f )
   {
     SetResizePolicy( ResizePolicy::FIXED, Dimension::WIDTH );
   }
 
-  if( size.height > 0.0f || GetResizePolicy( Dimension::HEIGHT ) == ResizePolicy::DEFAULT )
+  if( size.height > 0.0f )
   {
     SetResizePolicy( ResizePolicy::FIXED, Dimension::HEIGHT );
   }