Merge "Changes after touch consumed behaviour change" into devel/master
[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..34be65a
@@ -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.
@@ -51,7 +51,7 @@ void DragAndDropDetector::Attach(Dali::Toolkit::Control& control)
     }
     mControls.push_back(control);
     control.TouchSignal().Connect(this, &DragAndDropDetector::OnDrag);
-    mFirstEnter.push_back(control.GetId());
+    mFirstEnter.push_back(control.GetProperty< int >( Actor::Property::ID ));
     mPanGestureDetector.Attach(control);
     mPanGestureDetector.DetectedSignal().Connect(this, &DragAndDropDetector::OnPan);
   }
@@ -73,7 +73,7 @@ void DragAndDropDetector::Detach(Dali::Toolkit::Control& control)
     {
       match->TouchSignal().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);
     }
   }
@@ -126,12 +126,32 @@ void DragAndDropDetector::OnPan(Dali::Actor actor, const PanGesture& gesture)
   if(gesture.state == Gesture::Started)
   {
     mDragLocalPosition = gesture.position;
+    mPointDown = true;
+    mDragControl = control;
+    mFirstEnter.clear();
+    for( auto&& control : mControls)
+    {
+      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.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.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(gesture.screenPosition);
+    EmitStartedSignal(control);
   }
   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);
+      mShadowControl.SetProperty( Actor::Property::POSITION, Vector2(mLocalPosition.x - mDragLocalPosition.x, mLocalPosition.y - mDragLocalPosition.y));
   }
   if(gesture.state == Gesture::Finished)
   {
@@ -144,35 +164,12 @@ 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)
-  {
-    mPointDown = true;
-    mDragControl = control;
-    mFirstEnter.clear();
-    for( auto&& control : mControls)
-    {
-      mFirstEnter.push_back(control.GetId());
-    }
-    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.SetBackgroundColor(Vector4(0.3f, 0.3f, 0.3f, 0.7f));
-    mShadowControl.SetParentOrigin(control.GetCurrentParentOrigin());
-    mShadowControl.SetAnchorPoint(control.GetCurrentAnchorPoint());
-    control.GetParent().Add(mShadowControl);
-    SetPosition(data.GetScreenPosition(0));
-    EmitStartedSignal(control);
-  }
 
   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 +188,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 +199,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 +209,7 @@ bool DragAndDropDetector::OnDrag(Dali::Actor actor, const Dali::TouchData& data)
     }
     mPointDown = false;
   }
-  return true;
+  return false;
 }
 
 const std::string& DragAndDropDetector::GetContent() const