m_flickIndex = 0;
m_flickDuration = 1 / ecore_animator_frametime_get();
m_flickAnimator = ecore_animator_add(flickAnimatorCallback, this);
- m_remainder = IntPoint();
}
void Flick::stop()
bool Flick::process()
{
- double valueOfEaseInOutCubic = easeInOutQuad(m_flickDuration, m_flickIndex);
- double decimalDeltaX = -1 * m_velocity.x() / m_flickDuration * valueOfEaseInOutCubic + m_remainder.x();
- double decimalDeltaY = -1 * m_velocity.y() / m_flickDuration * valueOfEaseInOutCubic + m_remainder.y();
- int deltaX = static_cast<int>(decimalDeltaX);
- int deltaY = static_cast<int>(decimalDeltaY);
-
- m_remainder.setX(decimalDeltaX - deltaX);
- if (m_remainder.x() >= 0.5) {
- deltaX += 1;
- m_remainder.setX(m_remainder.x() - 0.5);
- } else if (m_remainder.x() <= -0.5) {
- deltaX -= 1;
- m_remainder.setX(m_remainder.x() + 0.5);
- }
-
- m_remainder.setY(decimalDeltaY - deltaY);
- if (m_remainder.y() >= 0.5) {
- deltaY += 1;
- m_remainder.setY(m_remainder.y() - 0.5);
- } else if (m_remainder.y() <= -0.5) {
- deltaY -= 1;
- m_remainder.setY(m_remainder.y() + 0.5);
- }
+ double multiplier = easeInOutQuad(m_flickDuration, m_flickIndex);
+ int deltaX = -1 * m_velocity.x();
+ deltaX = (deltaX > 0) ? ceilf(deltaX * multiplier / m_flickDuration) : floorf(deltaX * multiplier / m_flickDuration);
+ int deltaY = -1 * m_velocity.y();
+ deltaY = (deltaY > 0) ? ceilf(deltaY * multiplier / m_flickDuration) : floorf(deltaY * multiplier / m_flickDuration);
m_flickIndex++;
- if (m_flickIndex > m_flickDuration) {
+ if (m_flickIndex > m_flickDuration || !(deltaX || deltaY)) {
m_flickAnimator = 0;
#if ENABLE(TIZEN_WEBKIT2_TEXT_SELECTION)
PageClientImpl* pageClientImpl = m_viewImpl->pageClient.get();
return false;
} else {
- if (!deltaX && !deltaY)
- return true;
-
PageClientImpl* pageClientImpl = m_viewImpl->pageClient.get();
EINA_SAFETY_ON_NULL_RETURN_VAL(pageClientImpl, true);
ewkViewSendScrollEvent(m_viewImpl->view(), deltaX, deltaY);