Moved Gesture::State and -::Type to gesture-enumerations.h.
[platform/core/uifw/dali-core.git] / dali / internal / event / events / actor-gesture-data.cpp
index 1b41d0a..24cc051 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2020 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -24,124 +24,97 @@ namespace Dali
 namespace Internal
 {
 
-namespace
+ActorGestureData::ActorGestureData()
+: gesturesRequired( GestureType::Value( 0 ) ),
+  panDetectors( nullptr ),
+  pinchDetectors( nullptr ),
+  longPressDetectors( nullptr ),
+  tapDetectors( nullptr ),
+  rotationDetectors( nullptr )
 {
+}
 
-/**
- * Template to add a detector to the appropriate container. Dynamically allocates the container only if it is used.
- */
-template< typename DetectorType, typename ContainerType >
-inline void AddDetector( ContainerType*& containerPtr, GestureDetector* detector, Gesture::Type& gesturesRequired )
+ActorGestureData::~ActorGestureData()
+{
+  delete panDetectors;
+  delete pinchDetectors;
+  delete longPressDetectors;
+  delete tapDetectors;
+  delete rotationDetectors;
+}
+
+void ActorGestureData::AddGestureDetector( GestureDetector& detector )
 {
+  const GestureType::Value type( detector.GetType() );
+
+  GestureDetectorContainer*& containerPtr( GetContainerPtr( type ) );
   if ( NULL == containerPtr )
   {
-    containerPtr = new ContainerType;
+    containerPtr = new GestureDetectorContainer;
   }
+  containerPtr->push_back( &detector );
 
-  containerPtr->push_back( static_cast< DetectorType* >( detector ) );
-  gesturesRequired = Gesture::Type( gesturesRequired | detector->GetType() );
+  gesturesRequired = GestureType::Value( gesturesRequired | type );
 }
 
-/**
- * Template to remove a detector from the appropriate container. Deletes the container if it is no longer required.
- */
-template< typename ContainerType >
-inline void RemoveDetector( ContainerType*& containerPtr, GestureDetector* detector, Gesture::Type& gesturesRequired )
+void ActorGestureData::RemoveGestureDetector( GestureDetector& detector )
 {
-  if ( NULL != containerPtr )
-  {
-    ContainerType& container( *containerPtr );
-    typename ContainerType::iterator match( std::remove( container.begin(), container.end(), detector ) );
-    DALI_ASSERT_DEBUG( match != container.end() && "Actor does not have the detector" );
-    container.erase( match, container.end() );
+  const GestureType::Value type( detector.GetType() );
 
-    if ( container.empty() )
-    {
-      gesturesRequired = Gesture::Type( gesturesRequired & ~detector->GetType() );
-      delete containerPtr;
-      containerPtr = NULL;
-    }
-  }
-}
+  GestureDetectorContainer*& containerPtr( GetContainerPtr( type ) );
+  DALI_ASSERT_DEBUG( containerPtr && "Container had not been created" );
 
-} // unnamed namespace
+  GestureDetectorContainer& container( *containerPtr );
+  GestureDetectorContainer::iterator match( std::remove( container.begin(), container.end(), &detector ) );
+  DALI_ASSERT_DEBUG( match != container.end() && "Actor does not have the detector" );
+  container.erase( match, container.end() );
 
-ActorGestureData::ActorGestureData()
-: gesturesRequired( Gesture::Type( 0 ) ),
-  panDetectors( NULL ),
-  pinchDetectors( NULL ),
-  longPressDetectors( NULL ),
-  tapDetectors( NULL )
-{
+  if ( container.empty() )
+  {
+    gesturesRequired = GestureType::Value( gesturesRequired & ~type );
+    delete containerPtr;
+    containerPtr = NULL;
+  }
 }
 
-ActorGestureData::~ActorGestureData()
+GestureDetectorContainer& ActorGestureData::GetGestureDetectorContainer( GestureType::Value type )
 {
-  delete panDetectors;
-  delete pinchDetectors;
-  delete longPressDetectors;
-  delete tapDetectors;
+  return *GetContainerPtr( type );
 }
 
-void ActorGestureData::AddGestureDetector( GestureDetector& detector )
+GestureDetectorContainer*& ActorGestureData::GetContainerPtr( GestureType::Value type )
 {
-  const Gesture::Type type( detector.GetType() );
   switch ( type )
   {
-    case Gesture::Pan:
-    {
-      AddDetector< PanGestureDetector, PanGestureDetectorContainer >( panDetectors, &detector, gesturesRequired );
-      break;
-    }
-
-    case Gesture::Pinch:
-    {
-      AddDetector< PinchGestureDetector, PinchGestureDetectorContainer >( pinchDetectors, &detector, gesturesRequired );
-      break;
-    }
-
-    case Gesture::LongPress:
+    case GestureType::PAN:
     {
-      AddDetector< LongPressGestureDetector, LongPressGestureDetectorContainer >( longPressDetectors, &detector, gesturesRequired );
-      break;
+      return panDetectors;
     }
 
-    case Gesture::Tap:
+    case GestureType::PINCH:
     {
-      AddDetector< TapGestureDetector, TapGestureDetectorContainer >( tapDetectors, &detector, gesturesRequired );
-      break;
+      return pinchDetectors;
     }
-  }
-}
 
-void ActorGestureData::RemoveGestureDetector( GestureDetector& detector )
-{
-  switch ( detector.GetType() )
-  {
-    case Gesture::Pan:
+    case GestureType::LONG_PRESS:
     {
-      RemoveDetector< PanGestureDetectorContainer >( panDetectors, &detector, gesturesRequired );
-      break;
+      return longPressDetectors;
     }
 
-    case Gesture::Pinch:
+    case GestureType::TAP:
     {
-      RemoveDetector< PinchGestureDetectorContainer >( pinchDetectors, &detector, gesturesRequired );
-      break;
+      return tapDetectors;
     }
 
-    case Gesture::LongPress:
+    case GestureType::ROTATION:
     {
-      RemoveDetector< LongPressGestureDetectorContainer >( longPressDetectors, &detector, gesturesRequired );
-      break;
-    }
-
-    case Gesture::Tap:
-    {
-      RemoveDetector< TapGestureDetectorContainer >( tapDetectors, &detector, gesturesRequired );
-      break;
+      return rotationDetectors;
     }
   }
+
+  DALI_ASSERT_DEBUG( ! "Invalid Type" );
+  static GestureDetectorContainer* invalidType( NULL );
+  return invalidType;
 }
 
 } // namespace Internal