blob: 9a0fadd0816b7baf7d94114dd0b65e59a0b6a15b [file] [log] [blame]
#include "rive/constraints/scrolling/scroll_bar_constraint.hpp"
#include "rive/constraints/scrolling/scroll_constraint.hpp"
#include "rive/constraints/scrolling/scroll_constraint_proxy.hpp"
#include "rive/math/vec2d.hpp"
using namespace rive;
bool ViewportDraggableProxy::drag(Vec2D mousePosition, float timeStamp)
{
if (!m_constraint->interactive())
{
return false;
}
auto deltaPosition = mousePosition - m_lastPosition;
if (!m_isDragging)
{
switch (m_constraint->direction())
{
case DraggableConstraintDirection::vertical:
{
if (std::abs(deltaPosition.y) > m_constraint->threshold())
{
m_isDragging = true;
}
else
{
return false;
}
}
break;
case DraggableConstraintDirection::horizontal:
{
if (std::abs(deltaPosition.x) > m_constraint->threshold())
{
m_isDragging = true;
}
else
{
return false;
}
}
break;
case DraggableConstraintDirection::all:
{
if (deltaPosition.length() > m_constraint->threshold())
{
m_isDragging = true;
}
else
{
return false;
}
}
break;
}
}
m_constraint->dragView(deltaPosition, timeStamp);
m_lastPosition = mousePosition;
return true;
}
bool ViewportDraggableProxy::startDrag(Vec2D mousePosition, float timeStamp)
{
if (!m_constraint->interactive())
{
return false;
}
m_isDragging = false;
m_constraint->initPhysics();
m_lastPosition = mousePosition;
return true;
}
bool ViewportDraggableProxy::endDrag(Vec2D mousePosition, float timeStamp)
{
if (!m_constraint->interactive())
{
return false;
}
m_constraint->runPhysics();
return true;
}