Add null check for mTextureSet.
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / internal / drag-drop-detector / drag-and-drop-detector-impl.cpp
old mode 100755 (executable)
new mode 100644 (file)
index c26e4ae..994932e
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018 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.
@@ -19,7 +19,7 @@
 #include <dali-toolkit/internal/drag-drop-detector/drag-and-drop-detector-impl.h>
 
 #include <dali/public-api/events/point-state.h>
-#include <dali/public-api/events/touch-data.h>
+#include <dali/public-api/events/touch-event.h>
 
 namespace Dali
 {
@@ -50,8 +50,8 @@ void DragAndDropDetector::Attach(Dali::Toolkit::Control& control)
       }
     }
     mControls.push_back(control);
-    control.TouchSignal().Connect(this, &DragAndDropDetector::OnDrag);
-    mFirstEnter.push_back(control.GetId());
+    control.TouchedSignal().Connect(this, &DragAndDropDetector::OnDrag);
+    mFirstEnter.push_back(control.GetProperty< int >( Actor::Property::ID ));
     mPanGestureDetector.Attach(control);
     mPanGestureDetector.DetectedSignal().Connect(this, &DragAndDropDetector::OnPan);
   }
@@ -71,9 +71,9 @@ void DragAndDropDetector::Detach(Dali::Toolkit::Control& control)
 
     if(match != mControls.end())
     {
-      match->TouchSignal().Disconnect(this, &DragAndDropDetector::OnDrag);
+      match->TouchedSignal().Disconnect(this, &DragAndDropDetector::OnDrag);
       mPanGestureDetector.Detach(*match);
-      mFirstEnter.erase(std::find(mFirstEnter.begin(), mFirstEnter.end(), control.GetId()));
+      mFirstEnter.erase(std::find(mFirstEnter.begin(), mFirstEnter.end(), control.GetProperty< int >( Actor::Property::ID )));
       mControls.erase(match);
     }
   }
@@ -86,7 +86,7 @@ void DragAndDropDetector::DetachAll()
     auto iter = mControls.begin();
     for(;iter != mControls.end();)
     {
-      iter->TouchSignal().Disconnect(this, &DragAndDropDetector::OnDrag);
+      iter->TouchedSignal().Disconnect(this, &DragAndDropDetector::OnDrag);
       mPanGestureDetector.Detach(*iter);
       iter = mControls.erase(iter);
     }
@@ -123,56 +123,55 @@ void DragAndDropDetector::OnPan(Dali::Actor actor, const PanGesture& gesture)
 {
   Dali::Toolkit::Control control = Dali::Toolkit::Control::DownCast(actor);
 
-  if(gesture.state == Gesture::Started)
-  {
-    mDragLocalPosition = gesture.position;
-  }
-  if(gesture.state == Gesture::Continuing)
-  {
-      Vector2 screenPosition = gesture.screenPosition;
-      control.GetParent().ScreenToLocal(mLocalPosition.x, mLocalPosition.y, screenPosition.x, screenPosition.y);
-      mShadowControl.SetPosition(mLocalPosition.x - mDragLocalPosition.x, mLocalPosition.y - mDragLocalPosition.y);
-  }
-  if(gesture.state == Gesture::Finished)
-  {
-    mDragControl.GetParent().Remove(mShadowControl);
-    EmitEndedSignal(control);
-  }
-}
+  GestureState state = gesture.GetState();
 
-bool DragAndDropDetector::OnDrag(Dali::Actor actor, const Dali::TouchData& data)
-{
-  Dali::Toolkit::Control control = Dali::Toolkit::Control::DownCast(actor);
-  PointState::Type type = data.GetState(0);
-  if(type == PointState::DOWN)
+  if(state == GestureState::STARTED)
   {
+    mDragLocalPosition = gesture.GetPosition();
     mPointDown = true;
     mDragControl = control;
     mFirstEnter.clear();
     for( auto&& control : mControls)
     {
-      mFirstEnter.push_back(control.GetId());
+      mFirstEnter.push_back(control.GetProperty< int >( Actor::Property::ID ));
     }
     float width = control.GetProperty<float>(Dali::Actor::Property::SIZE_WIDTH);
     float height = control.GetProperty<float>(Dali::Actor::Property::SIZE_HEIGHT);
     Vector3 actorPos = control.GetProperty<Vector3>(Dali::Actor::Property::POSITION);
 
     mShadowControl = Dali::Toolkit::Control::New();
-    mShadowControl.SetPosition(actorPos);
-    mShadowControl.SetSize(width, height);
+    mShadowControl.SetProperty( Actor::Property::POSITION, actorPos );
+    mShadowControl.SetProperty( Actor::Property::SIZE, Vector2( width, height ) );
     mShadowControl.SetBackgroundColor(Vector4(0.3f, 0.3f, 0.3f, 0.7f));
-    mShadowControl.SetParentOrigin(control.GetCurrentParentOrigin());
-    mShadowControl.SetAnchorPoint(control.GetCurrentAnchorPoint());
+    mShadowControl.SetProperty( Actor::Property::PARENT_ORIGIN, control.GetCurrentProperty< Vector3 >( Actor::Property::PARENT_ORIGIN ) );
+    mShadowControl.SetProperty( Actor::Property::ANCHOR_POINT,control.GetCurrentProperty< Vector3 >( Actor::Property::ANCHOR_POINT ));
     control.GetParent().Add(mShadowControl);
-    SetPosition(data.GetScreenPosition(0));
+    SetPosition(gesture.GetScreenPosition());
     EmitStartedSignal(control);
   }
+  if(state == GestureState::CONTINUING)
+  {
+      Vector2 screenPosition = gesture.GetScreenPosition();
+      control.GetParent().ScreenToLocal(mLocalPosition.x, mLocalPosition.y, screenPosition.x, screenPosition.y);
+      mShadowControl.SetProperty( Actor::Property::POSITION, Vector2(mLocalPosition.x - mDragLocalPosition.x, mLocalPosition.y - mDragLocalPosition.y));
+  }
+  if(state == GestureState::FINISHED)
+  {
+    mDragControl.GetParent().Remove(mShadowControl);
+    EmitEndedSignal(control);
+  }
+}
+
+bool DragAndDropDetector::OnDrag(Dali::Actor actor, const Dali::TouchEvent& data)
+{
+  Dali::Toolkit::Control control = Dali::Toolkit::Control::DownCast(actor);
+  PointState::Type type = data.GetState(0);
 
   if(type == PointState::MOTION)
   {
     if(mDragControl != control && mPointDown)
     {
-      auto found = std::find(mFirstEnter.begin(), mFirstEnter.end(), control.GetId());
+      auto found = std::find(mFirstEnter.begin(), mFirstEnter.end(), control.GetProperty< int >( Actor::Property::ID ));
       if(mFirstEnter.end() != found)
       {
         SetPosition(data.GetScreenPosition(0));
@@ -191,7 +190,7 @@ bool DragAndDropDetector::OnDrag(Dali::Actor actor, const Dali::TouchData& data)
   {
     if(mDragControl != control && mPointDown)
     {
-      mFirstEnter.push_back(control.GetId());
+      mFirstEnter.push_back(control.GetProperty< int >( Actor::Property::ID ));
       EmitExitedSignal(control);
     }
   }
@@ -202,7 +201,7 @@ bool DragAndDropDetector::OnDrag(Dali::Actor actor, const Dali::TouchData& data)
     {
       SetPosition(data.GetScreenPosition(0));
       ClearContent();
-      SetContent(mDragControl.GetName());
+      SetContent(mDragControl.GetProperty< std::string >( Dali::Actor::Property::NAME ));
       EmitDroppedSignal(control);
     }
 
@@ -212,7 +211,7 @@ bool DragAndDropDetector::OnDrag(Dali::Actor actor, const Dali::TouchData& data)
     }
     mPointDown = false;
   }
-  return true;
+  return false;
 }
 
 const std::string& DragAndDropDetector::GetContent() const