/*
- * 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.
#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
{
}
}
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);
}
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);
}
}
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);
}
{
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));
{
if(mDragControl != control && mPointDown)
{
- mFirstEnter.push_back(control.GetId());
+ mFirstEnter.push_back(control.GetProperty< int >( Actor::Property::ID ));
EmitExitedSignal(control);
}
}
{
SetPosition(data.GetScreenPosition(0));
ClearContent();
- SetContent(mDragControl.GetName());
+ SetContent(mDragControl.GetProperty< std::string >( Dali::Actor::Property::NAME ));
EmitDroppedSignal(control);
}
}
mPointDown = false;
}
- return true;
+ return false;
}
const std::string& DragAndDropDetector::GetContent() const