#include <FGrpPoint.h>
#include <FUi_CoordinateSystemUtils.h>
#include <FUi_Control.h>
-#include <FUi_TouchManager.h>
#include <FUi_UiTouchEvent.h>
#include "FWebCtrl_GestureState.h"
#include "FWebCtrl_Web.h"
void
SetGestureEvent(Ewk_Event_Gesture& gestureEvent, Ewk_Gesture_Type gestureType, const Point& absPoint, const Point& velocity, double scale, int count)
{
- memset(&gestureEvent, 0, sizeof(gestureEvent));
-
gestureEvent.type = gestureType;
gestureEvent.position.x = absPoint.x;
gestureEvent.position.y = absPoint.y;
}
-_TapGestureState::_TapGestureState(_Web* pWeb, _PinchGestureState* pPinchListener)
+_TapGestureState::_TapGestureState(_Web* pWeb)
: __pWebCore(pWeb)
- , __pPinchListener(pPinchListener)
, __longPressed(false)
+ , __doubleTapped(false)
{
}
}
-void
-_TapGestureState::OnLongPressGestureDetected(const _TouchLongPressGestureDetector& gesture)
+bool
+_TapGestureState::OnLongPressGestureDetected(_TouchLongPressGestureDetector& gesture)
{
- __longPressed = true;
-
const Ewk_View_Smart_Data* pSmartData = static_cast<Ewk_View_Smart_Data*>(evas_object_smart_data_get( __pWebCore->GetWebNativeNode()));
SysAssertf(pSmartData, "Failed to get webkit smart data.");
Ewk_Event_Gesture gestureEvent;
- SetGestureEvent(gestureEvent, EWK_GESTURE_LONG_PRESS, Point(0, 0), Point(0, 0), 0, 0);
+ SetGestureEvent(gestureEvent, EWK_GESTURE_LONG_PRESS, Point(0, 0), Point(0, 0), 0.0, 0);
pSmartData->api->gesture_move(const_cast<Ewk_View_Smart_Data*>(pSmartData), &gestureEvent);
-}
-
-
-bool
-_TapGestureState::OnTouchPressed(const _Control& source, const _TouchInfo& touchInfo)
-{
- const Ewk_View_Smart_Data* pSmartData = static_cast<Ewk_View_Smart_Data*>(evas_object_smart_data_get( __pWebCore->GetWebNativeNode()));
- SysAssertf(pSmartData, "Failed to get webkit smart data.");
-
- _TouchManager* pTouchManager = _TouchManager::GetInstance();
- SysAssertf(pTouchManager, "Failed to get webkit smart data.");
-
- if (pTouchManager->GetPointCount() == 2)
- {
- result r = E_SUCCESS;
-
- std::unique_ptr<Tizen::Base::Collection::IListT<_FingerInfo*> > pTouchList(pTouchManager->GetMultiFingerInfoListN());
- SysTryReturn(NID_WEB_CTRL, pTouchList.get(), false, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
-
- std::unique_ptr<Tizen::Base::Collection::IBidirectionalEnumeratorT<_FingerInfo*> > pEnum(pTouchList->GetBidirectionalEnumeratorN());
- SysTryReturn(NID_WEB_CTRL, pEnum.get(), false, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
-
- _FingerInfo* pFingerInfo = null;
-
- r = pEnum->MoveNext();
- SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, false, r, "[%s] Propagating.", GetErrorMessage(r));
-
- r = pEnum->GetCurrent(pFingerInfo);
- SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, false, r, "[%s] Propagating.", GetErrorMessage(r));
-
- Point firstFinger(_CoordinateSystemUtils::ConvertToInteger(pFingerInfo->GetPoint()));
-
- r = pEnum->MoveNext();
- SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, false, r, "[%s] Propagating.", GetErrorMessage(r));
-
- r = pEnum->GetCurrent(pFingerInfo);
- SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, false, r, "[%s] Propagating.", GetErrorMessage(r));
-
- Point secondFinger(_CoordinateSystemUtils::ConvertToInteger(pFingerInfo->GetPoint()));
-
- __pPinchListener->InitializeFactor();
- double zoomFactor = __pPinchListener->GetZoomFactor(firstFinger, secondFinger);
- Point center(__pPinchListener->GetCenterPoint(firstFinger, secondFinger));
-
- Point absPoint = __pWebCore->GetAbsoluteCoordinate(center);
-
- Ewk_Event_Gesture gestureEvent;
-
- SetGestureEvent(gestureEvent, EWK_GESTURE_PINCH, absPoint, Point(0, 0), zoomFactor, 0);
- pSmartData->api->gesture_start(const_cast<Ewk_View_Smart_Data*>(pSmartData), &gestureEvent);
-
- __pWebCore->ChangeGesture(WEB_GESTURE_TYPE_PINCH);
- }
- else
- {
- __longPressed = false;
-
- Point absPoint(_CoordinateSystemUtils::ConvertToInteger(__pWebCore->GetAbsoluteCoordinate(touchInfo.GetCurrentPosition())));
-
- Ewk_Event_Gesture gestureEvent;
-
- SetGestureEvent(gestureEvent, EWK_GESTURE_TAP, absPoint, Point(0, 0), 0, 1);
- pSmartData->api->gesture_start(const_cast<Ewk_View_Smart_Data*>(pSmartData), &gestureEvent);
- }
+ __longPressed = true;
return true;
}
bool
-_TapGestureState::OnTouchMoved(const _Control& source, const _TouchInfo& touchInfo)
+_TapGestureState::OnTapGestureDetected(_TouchTapGestureDetector& gesture)
{
- if (__pWebCore->GetWebSettingImpl()->IsScrollEnabled())
- {
- const Ewk_View_Smart_Data* pSmartData = static_cast<Ewk_View_Smart_Data*>(evas_object_smart_data_get( __pWebCore->GetWebNativeNode()));
- SysAssertf(pSmartData, "Failed to get webkit smart data.");
-
- Ewk_Event_Gesture gestureEvent;
-
- Point absPoint(_CoordinateSystemUtils::ConvertToInteger(__pWebCore->GetAbsoluteCoordinate(touchInfo.GetCurrentPosition())));
-
- SetGestureEvent(gestureEvent, EWK_GESTURE_PAN, absPoint, Point(0, 0), 0, 0);
- pSmartData->api->gesture_start(const_cast<Ewk_View_Smart_Data*>(pSmartData), &gestureEvent);
-
- __pWebCore->ChangeGesture(WEB_GESTURE_TYPE_PANNING);
- }
+ __doubleTapped = true;
return true;
}
bool
-_TapGestureState::OnTouchReleased(const _Control& source, const _TouchInfo& touchInfo)
+_TapGestureState::OnTouchPressed(const _Control& source, const _TouchInfo& touchInfo)
{
const Ewk_View_Smart_Data* pSmartData = static_cast<Ewk_View_Smart_Data*>(evas_object_smart_data_get( __pWebCore->GetWebNativeNode()));
SysAssertf(pSmartData, "Failed to get webkit smart data.");
- if (!__longPressed)
- {
- Ewk_Event_Gesture gestureEvent;
+ Point absPoint(_CoordinateSystemUtils::ConvertToInteger(__pWebCore->GetAbsoluteCoordinate(touchInfo.GetCurrentPosition())));
- Point absPoint(_CoordinateSystemUtils::ConvertToInteger(__pWebCore->GetAbsoluteCoordinate(touchInfo.GetCurrentPosition())));
+ Ewk_Event_Gesture gestureEvent;
- SetGestureEvent(gestureEvent, EWK_GESTURE_TAP, absPoint, Point(0, 0), 0, 1);
- pSmartData->api->gesture_end(const_cast<Ewk_View_Smart_Data*>(pSmartData), &gestureEvent);
- }
+ SetGestureEvent(gestureEvent, EWK_GESTURE_TAP, absPoint, Point(0, 0), 0.0, 1);
+ pSmartData->api->gesture_start(const_cast<Ewk_View_Smart_Data*>(pSmartData), &gestureEvent);
+
+ __longPressed = false;
+ __doubleTapped = false;
return true;
}
bool
-_TapGestureState::OnTouchCanceled(const _Control& source, const _TouchInfo& touchInfo)
+_TapGestureState::OnTouchMoved(const _Control& source, const _TouchInfo& touchInfo)
{
const Ewk_View_Smart_Data* pSmartData = static_cast<Ewk_View_Smart_Data*>(evas_object_smart_data_get( __pWebCore->GetWebNativeNode()));
SysAssertf(pSmartData, "Failed to get webkit smart data.");
Ewk_Event_Gesture gestureEvent;
- SetGestureEvent(gestureEvent, EWK_GESTURE_LONG_PRESS, Point(0, 0), Point(0, 0), 0, 0);
- pSmartData->api->gesture_move(const_cast<Ewk_View_Smart_Data*>(pSmartData), &gestureEvent);
-
- return true;
-}
-
-
-_DoubleTapGestureState::_DoubleTapGestureState(_Web* pWeb)
- : __pWebCore(pWeb)
-{
-}
-
+ Point absPoint(_CoordinateSystemUtils::ConvertToInteger(__pWebCore->GetAbsoluteCoordinate(touchInfo.GetCurrentPosition())));
-_DoubleTapGestureState::~_DoubleTapGestureState(void)
-{
-}
+ SetGestureEvent(gestureEvent, EWK_GESTURE_PAN, absPoint, Point(0, 0), 0.0, 0);
+ pSmartData->api->gesture_start(const_cast<Ewk_View_Smart_Data*>(pSmartData), &gestureEvent);
+ __pWebCore->ChangeGesture(WEB_GESTURE_TYPE_PANNING);
-bool
-_DoubleTapGestureState::OnTouchPressed(const _Control& source, const _TouchInfo& touchInfo)
-{
return true;
}
bool
-_DoubleTapGestureState::OnTouchMoved(const _Control& source, const _TouchInfo& touchInfo)
+_TapGestureState::OnTouchReleased(const _Control& source, const _TouchInfo& touchInfo)
{
- return true;
-}
-
+ if (__longPressed)
+ {
+ return true;
+ }
-bool
-_DoubleTapGestureState::OnTouchReleased(const _Control& source, const _TouchInfo& touchInfo)
-{
const Ewk_View_Smart_Data* pSmartData = static_cast<Ewk_View_Smart_Data*>(evas_object_smart_data_get( __pWebCore->GetWebNativeNode()));
SysAssertf(pSmartData, "Failed to get webkit smart data.");
Ewk_Event_Gesture gestureEvent;
-
Point absPoint(_CoordinateSystemUtils::ConvertToInteger(__pWebCore->GetAbsoluteCoordinate(touchInfo.GetCurrentPosition())));
- SetGestureEvent(gestureEvent, EWK_GESTURE_TAP, absPoint, Point(0, 0), 0, 2);
- pSmartData->api->gesture_start(const_cast<Ewk_View_Smart_Data*>(pSmartData), &gestureEvent);
+ if (__doubleTapped)
+ {
+ SetGestureEvent(gestureEvent, EWK_GESTURE_TAP, absPoint, Point(0, 0), 0.0, 2);
+ pSmartData->api->gesture_start(const_cast<Ewk_View_Smart_Data*>(pSmartData), &gestureEvent);
+ }
+ else
+ {
+ SetGestureEvent(gestureEvent, EWK_GESTURE_TAP, absPoint, Point(0, 0), 0.0, 1);
+ }
pSmartData->api->gesture_end(const_cast<Ewk_View_Smart_Data*>(pSmartData), &gestureEvent);
- __pWebCore->ChangeGesture(WEB_GESTURE_TYPE_TAP);
-
return true;
}
bool
-_DoubleTapGestureState::OnTouchCanceled(const _Control& source, const _TouchInfo& touchInfo)
+_TapGestureState::OnTouchCanceled(const _Control& source, const _TouchInfo& touchInfo)
{
- __pWebCore->ChangeGesture(WEB_GESTURE_TYPE_TAP);
+ const Ewk_View_Smart_Data* pSmartData = static_cast<Ewk_View_Smart_Data*>(evas_object_smart_data_get( __pWebCore->GetWebNativeNode()));
+ SysAssertf(pSmartData, "Failed to get webkit smart data.");
+
+ Ewk_Event_Gesture gestureEvent;
+
+ SetGestureEvent(gestureEvent, EWK_GESTURE_LONG_PRESS, Point(0, 0), Point(0, 0), 0.0, 0);
+ pSmartData->api->gesture_move(const_cast<Ewk_View_Smart_Data*>(pSmartData), &gestureEvent);
return true;
}
-_PanningGestureState::_PanningGestureState(_Web* pWeb, _PinchGestureState* pPinchListener)
+_PanningGestureState::_PanningGestureState(_Web* pWeb)
: __pWebCore(pWeb)
- , __pPinchListener(pPinchListener)
{
}
bool
_PanningGestureState::OnTouchPressed(const _Control& source, const _TouchInfo& touchInfo)
{
- result r = E_SUCCESS;
-
- const Ewk_View_Smart_Data* pSmartData = static_cast<Ewk_View_Smart_Data*>(evas_object_smart_data_get( __pWebCore->GetWebNativeNode()));
- SysAssertf(pSmartData, "Failed to get webkit smart data.");
-
- _TouchManager* pTouchManager = _TouchManager::GetInstance();
- SysAssertf(pTouchManager, "Failed to get webkit smart data.");
-
- std::unique_ptr<Tizen::Base::Collection::IListT<_FingerInfo*> > pTouchList(pTouchManager->GetMultiFingerInfoListN());
- SysTryReturn(NID_WEB_CTRL, pTouchList.get(), false, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
-
- std::unique_ptr<Tizen::Base::Collection::IBidirectionalEnumeratorT<_FingerInfo*> > pEnum(pTouchList->GetBidirectionalEnumeratorN());
- SysTryReturn(NID_WEB_CTRL, pEnum.get(), false, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
-
- _FingerInfo* pFingerInfo = null;
-
- r = pEnum->MoveNext();
- SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, false, r, "[%s] Propagating.", GetErrorMessage(r));
-
- r = pEnum->GetCurrent(pFingerInfo);
- SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, false, r, "[%s] Propagating.", GetErrorMessage(r));
-
- Point firstFinger(_CoordinateSystemUtils::ConvertToInteger(pFingerInfo->GetPoint()));
-
- r = pEnum->MoveNext();
- SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, false, r, "[%s] Propagating.", GetErrorMessage(r));
-
- r = pEnum->GetCurrent(pFingerInfo);
- SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, false, r, "[%s] Propagating.", GetErrorMessage(r));
-
- Point secondFinger(_CoordinateSystemUtils::ConvertToInteger(pFingerInfo->GetPoint()));
-
- __pPinchListener->InitializeFactor();
-
- double zoomFactor = __pPinchListener->GetZoomFactor(firstFinger, secondFinger);
- Point center(__pPinchListener->GetCenterPoint(firstFinger, secondFinger));
-
- Point absPoint = __pWebCore->GetAbsoluteCoordinate(center);
-
- Ewk_Event_Gesture gestureEvent;
-
- SetGestureEvent(gestureEvent, EWK_GESTURE_PINCH, absPoint, Point(0, 0), zoomFactor, 0);
- pSmartData->api->gesture_start(const_cast<Ewk_View_Smart_Data*>(pSmartData), &gestureEvent);
-
- __pWebCore->ChangeGesture(WEB_GESTURE_TYPE_PINCH);
-
return true;
}
bool
_PanningGestureState::OnTouchMoved(const _Control& source, const _TouchInfo& touchInfo)
{
- if (__pWebCore->GetWebSettingImpl()->IsScrollEnabled())
- {
- const Ewk_View_Smart_Data* pSmartData = static_cast<Ewk_View_Smart_Data*>(evas_object_smart_data_get( __pWebCore->GetWebNativeNode()));
- SysAssertf(pSmartData, "Failed to get webkit smart data.");
+ const Ewk_View_Smart_Data* pSmartData = static_cast<Ewk_View_Smart_Data*>(evas_object_smart_data_get( __pWebCore->GetWebNativeNode()));
+ SysAssertf(pSmartData, "Failed to get webkit smart data.");
- Ewk_Event_Gesture gestureEvent;
+ Ewk_Event_Gesture gestureEvent;
- Point absPoint(_CoordinateSystemUtils::ConvertToInteger(__pWebCore->GetAbsoluteCoordinate(touchInfo.GetCurrentPosition())));
+ Point absPoint(_CoordinateSystemUtils::ConvertToInteger(__pWebCore->GetAbsoluteCoordinate(touchInfo.GetCurrentPosition())));
- SetGestureEvent(gestureEvent, EWK_GESTURE_PAN, absPoint, Point(0, 0), 0, 0);
- pSmartData->api->gesture_move(const_cast<Ewk_View_Smart_Data*>(pSmartData), &gestureEvent);
- }
+ SetGestureEvent(gestureEvent, EWK_GESTURE_PAN, absPoint, Point(0, 0), 0.0, 0);
+ pSmartData->api->gesture_move(const_cast<Ewk_View_Smart_Data*>(pSmartData), &gestureEvent);
return true;
}
Point absPoint(_CoordinateSystemUtils::ConvertToInteger(__pWebCore->GetAbsoluteCoordinate(touchInfo.GetCurrentPosition())));
- SetGestureEvent(gestureEvent, EWK_GESTURE_PAN, absPoint, Point(0, 0), 0, 0);
+ SetGestureEvent(gestureEvent, EWK_GESTURE_PAN, absPoint, Point(0, 0), 0.0, 0);
pSmartData->api->gesture_end(const_cast<Ewk_View_Smart_Data*>(pSmartData), &gestureEvent);
__pWebCore->ChangeGesture(WEB_GESTURE_TYPE_TAP);
}
-void
-_FlickGestureState::OnFlickGestureDetected(const _TouchFlickGestureDetector& gesture)
+bool
+_FlickGestureState::OnFlickGestureDetected(_TouchFlickGestureDetector& gesture)
{
+ __pWebCore->ChangeGesture(WEB_GESTURE_TYPE_FLICK);
+
int duration = gesture.GetDuration();
gesture.GetDistance(__velocity.x, __velocity.y);
__velocity.x = (__velocity.x * FLICK_SCROLL_WEIGHT) / duration;
__velocity.y = (__velocity.y * FLICK_SCROLL_WEIGHT) / duration;
+
+ return true;
}
Point absPoint(_CoordinateSystemUtils::ConvertToInteger(__pWebCore->GetAbsoluteCoordinate(touchInfo.GetCurrentPosition())));
- SetGestureEvent(gestureEvent, EWK_GESTURE_PAN, absPoint, Point(0, 0), 0, 0);
+ SetGestureEvent(gestureEvent, EWK_GESTURE_PAN, absPoint, Point(0, 0), 0.0, 0);
pSmartData->api->gesture_end(const_cast<Ewk_View_Smart_Data*>(pSmartData), &gestureEvent);
- SetGestureEvent(gestureEvent, EWK_GESTURE_FLICK, absPoint, Point(0, 0), 0, 0);
+ SetGestureEvent(gestureEvent, EWK_GESTURE_FLICK, Point(0, 0), Point(0, 0), 0.0, 0);
pSmartData->api->gesture_end(const_cast<Ewk_View_Smart_Data*>(pSmartData), &gestureEvent);
__pWebCore->ChangeGesture(WEB_GESTURE_TYPE_TAP);
_PinchGestureState::_PinchGestureState(_Web* pWeb)
: __pWebCore(pWeb)
+ , __standardScale(0.0)
{
}
{
}
-void
-_PinchGestureState::InitializeFactor(void)
-{
- __baseDistance = 0;
- __distanceTolerance = PINCH_ZOOM_DISTANCE_TOLERANCE;
-}
-
-double
-_PinchGestureState::GetZoomFactor(const Point& firstFinger, const Point& secondFinger)
-{
- int diffX = secondFinger.x - firstFinger.x;
- int diffY = secondFinger.y - firstFinger.y;
- int distance = static_cast < int >(sqrt((diffX * diffX) + (diffY * diffY)));
- double relativeFactor = 1.0;
- if (!__baseDistance)
- {
- __baseDistance = distance;
- return relativeFactor;
- }
-
- if (__distanceTolerance)
- {
- if (distance < (__baseDistance - __distanceTolerance))
- {
- __baseDistance -= __distanceTolerance;
- __distanceTolerance = 0;
- }
- else if (distance > (__baseDistance + __distanceTolerance))
- {
- __baseDistance += __distanceTolerance;
- __distanceTolerance= 0;
- }
-
- return relativeFactor;
- }
- relativeFactor = 1.0 + (((distance - __baseDistance) / static_cast < double >(__baseDistance)) * PINCH_ZOOM_FINGER_FACTOR);
-
- return relativeFactor;
-}
-
-
-Point
-_PinchGestureState::GetCenterPoint(const Point& firstFinger, const Point& secondFinger)
+bool
+_PinchGestureState::OnPinchGestureStarted(_TouchPinchGestureDetector& gesture)
{
- int diffX = fabs(secondFinger.x - firstFinger.x);
- int diffY = fabs(secondFinger.y - firstFinger.y);
- double distance = sqrt((diffX * diffX) + (diffY * diffY));
-
- Point center;
+ __pWebCore->ChangeGesture(WEB_GESTURE_TYPE_PINCH);
- if (diffX && diffY)
- {
- double ratio = atan((diffY / static_cast < double >(diffX)));
- int additionalX = static_cast < int >((distance / 2) * cos(ratio));
- int additionalY = static_cast < int >((distance / 2) * sin(ratio));
+ const Ewk_View_Smart_Data* pSmartData = static_cast<Ewk_View_Smart_Data*>(evas_object_smart_data_get( __pWebCore->GetWebNativeNode()));
+ SysAssertf(pSmartData, "Failed to get webkit smart data.");
- center.x = (secondFinger.x > firstFinger.x) ? (firstFinger.x + additionalX) : (secondFinger.x + additionalX);
- center.y = (secondFinger.y > firstFinger.y) ? (firstFinger.y + additionalY) : (secondFinger.y + additionalY);
- }
- else
- {
- center.x = (firstFinger.x + secondFinger.x) / 2;
- center.y = (firstFinger.y + secondFinger.y) / 2;
- }
+ Point absPoint(_CoordinateSystemUtils::ConvertToInteger(__pWebCore->GetAbsoluteCoordinate(gesture.GetCenterPointF())));
+ __standardScale = static_cast< double >(gesture.GetScaleF());
- return center;
-}
+ Ewk_Event_Gesture gestureEvent;
+ SetGestureEvent(gestureEvent, EWK_GESTURE_PINCH, absPoint, Point(0, 0), 1.0, 0);
+ pSmartData->api->gesture_start(const_cast<Ewk_View_Smart_Data*>(pSmartData), &gestureEvent);
-bool
-_PinchGestureState::OnTouchPressed(const _Control& source, const _TouchInfo& touchInfo)
-{
return true;
}
bool
-_PinchGestureState::OnTouchMoved(const _Control& source, const _TouchInfo& touchInfo)
+_PinchGestureState::OnPinchGestureChanged(_TouchPinchGestureDetector& gesture)
{
- const Ewk_View_Smart_Data* pSmartData = static_cast<Ewk_View_Smart_Data*>(evas_object_smart_data_get(__pWebCore->GetWebNativeNode()));
+ const Ewk_View_Smart_Data* pSmartData = static_cast<Ewk_View_Smart_Data*>(evas_object_smart_data_get( __pWebCore->GetWebNativeNode()));
SysAssertf(pSmartData, "Failed to get webkit smart data.");
- _TouchManager* pTouchManager = _TouchManager::GetInstance();
- SysAssertf(pTouchManager, "Failed to get webkit smart data.");
-
- if (pTouchManager->GetPointCount() == 2)
- {
- result r = E_SUCCESS;
-
- Ewk_Event_Gesture gestureEvent;
+ Point absPoint(_CoordinateSystemUtils::ConvertToInteger(__pWebCore->GetAbsoluteCoordinate(gesture.GetCenterPointF())));
+ double relScale = static_cast< double >(gesture.GetScaleF()) /__standardScale;
- std::unique_ptr<Tizen::Base::Collection::IListT<_FingerInfo*> > pTouchList(pTouchManager->GetMultiFingerInfoListN());
- SysTryReturn(NID_WEB_CTRL, pTouchList.get(), false, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
+ Ewk_Event_Gesture gestureEvent;
- std::unique_ptr<Tizen::Base::Collection::IBidirectionalEnumeratorT<_FingerInfo*> > pEnum(pTouchList->GetBidirectionalEnumeratorN());
- SysTryReturn(NID_WEB_CTRL, pEnum.get(), false, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
+ SetGestureEvent(gestureEvent, EWK_GESTURE_PINCH, absPoint, Point(0, 0), relScale, 0);
+ pSmartData->api->gesture_move(const_cast<Ewk_View_Smart_Data*>(pSmartData), &gestureEvent);
- _FingerInfo* pFingerInfo = null;
+ return true;
+}
- r = pEnum->MoveNext();
- SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, false, r, "[%s] Propagating.", GetErrorMessage(r));
- r = pEnum->GetCurrent(pFingerInfo);
- SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, false, r, "[%s] Propagating.", GetErrorMessage(r));
+bool
+_PinchGestureState::OnPinchGestureFinished(_TouchPinchGestureDetector& gesture)
+{
+ const Ewk_View_Smart_Data* pSmartData = static_cast<Ewk_View_Smart_Data*>(evas_object_smart_data_get( __pWebCore->GetWebNativeNode()));
+ SysAssertf(pSmartData, "Failed to get webkit smart data.");
- Point firstFinger(_CoordinateSystemUtils::ConvertToInteger(pFingerInfo->GetPoint()));
+ Ewk_Event_Gesture gestureEvent;
- r = pEnum->MoveNext();
- SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, false, r, "[%s] Propagating.", GetErrorMessage(r));
+ SetGestureEvent(gestureEvent, EWK_GESTURE_PINCH, Point(0, 0), Point(0, 0), 0.0, 0);
+ pSmartData->api->gesture_end(const_cast<Ewk_View_Smart_Data*>(pSmartData), &gestureEvent);
- r = pEnum->GetCurrent(pFingerInfo);
- SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, false, r, "[%s] Propagating.", GetErrorMessage(r));
+ __pWebCore->ChangeGesture(WEB_GESTURE_TYPE_TAP);
- Point secondFinger(_CoordinateSystemUtils::ConvertToInteger(pFingerInfo->GetPoint()));
+ return true;
+}
- double zoomFactor = GetZoomFactor(firstFinger, secondFinger);
- Point center(GetCenterPoint(firstFinger, secondFinger));
- Point absPoint = __pWebCore->GetAbsoluteCoordinate(center);
+bool
+_PinchGestureState::OnTouchPressed(const _Control& source, const _TouchInfo& touchInfo)
+{
+ return true;
+}
- SetGestureEvent(gestureEvent, EWK_GESTURE_PINCH, absPoint, Point(0, 0), zoomFactor, 0);
- pSmartData->api->gesture_move(const_cast<Ewk_View_Smart_Data*>(pSmartData), &gestureEvent);
- }
+bool
+_PinchGestureState::OnTouchMoved(const _Control& source, const _TouchInfo& touchInfo)
+{
return true;
}
bool
_PinchGestureState::OnTouchReleased(const _Control& source, const _TouchInfo& touchInfo)
{
- const Ewk_View_Smart_Data* pSmartData = static_cast<Ewk_View_Smart_Data*>(evas_object_smart_data_get( __pWebCore->GetWebNativeNode()));
- SysAssertf(pSmartData, "Failed to get webkit smart data.");
-
- _TouchManager* pTouchManager = _TouchManager::GetInstance();
- SysAssertf(pTouchManager, "Failed to get webkit smart data.");
-
- if (pTouchManager->GetPointCount() == 1)
- {
- Ewk_Event_Gesture gestureEvent;
-
- Point absPoint(_CoordinateSystemUtils::ConvertToInteger(__pWebCore->GetAbsoluteCoordinate(touchInfo.GetCurrentPosition())));
-
- SetGestureEvent(gestureEvent, EWK_GESTURE_PINCH, absPoint, Point(0, 0), 0, 0);
- pSmartData->api->gesture_end(const_cast<Ewk_View_Smart_Data*>(pSmartData), &gestureEvent);
-
- __pWebCore->ChangeGesture(WEB_GESTURE_TYPE_TAP);
- }
-
return true;
}
Ewk_Event_Gesture gestureEvent;
- Point absPoint(_CoordinateSystemUtils::ConvertToInteger(__pWebCore->GetAbsoluteCoordinate(touchInfo.GetCurrentPosition())));
-
- SetGestureEvent(gestureEvent, EWK_GESTURE_PINCH, absPoint, Point(0, 0), 0, 0);
+ SetGestureEvent(gestureEvent, EWK_GESTURE_PINCH, Point(0, 0), Point(0, 0), 0.0, 0);
pSmartData->api->gesture_end(const_cast<Ewk_View_Smart_Data*>(pSmartData), &gestureEvent);
__pWebCore->ChangeGesture(WEB_GESTURE_TYPE_TAP);
#include <FGrpPoint.h>
#include <FGrpBitmap.h>
#include <FGrpCanvas.h>
+#include <FGrpFloatRectangle.h>
#include <FWebCtrlWebSetting.h>
#include <FGrp_CoordinateSystem.h>
#include <FUiAnim_EflNode.h>
_Web::_Web(void)
- : __pGestureHandler(null)
+ : __gestureType(WEB_GESTURE_TYPE_TAP)
+ , __pGestureHandler(null)
, __pEflWebkit(null)
, __pGestureFlick(null)
, __pGestureLongPress(null)
+ , __pGesturePinch(null)
, __pGestureDoubleTap(null)
, __pTouchEventInfoList(null)
, __pTapGestureHandler(null)
- , __pDoubleTapGestureHandler(null)
, __pPanningGestureHandler(null)
, __pFlickGestureHandler(null)
, __pPinchGestureHandler(null)
__pPinchGestureHandler = std::unique_ptr<_PinchGestureState>(new (std::nothrow) _PinchGestureState(this));
SysTryReturnResult(NID_WEB_CTRL, __pPinchGestureHandler.get(), E_OUT_OF_MEMORY, "[%s] Memory Allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
- __pTapGestureHandler = std::unique_ptr<_TapGestureState>(new (std::nothrow) _TapGestureState(this, __pPinchGestureHandler.get()));
+ __pTapGestureHandler = std::unique_ptr<_TapGestureState>(new (std::nothrow) _TapGestureState(this));
SysTryReturnResult(NID_WEB_CTRL, __pTapGestureHandler.get(), E_OUT_OF_MEMORY, "[%s] Memory Allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
- __pDoubleTapGestureHandler = std::unique_ptr<_DoubleTapGestureState>(new (std::nothrow) _DoubleTapGestureState(this));
- SysTryReturnResult(NID_WEB_CTRL, __pDoubleTapGestureHandler.get(), E_OUT_OF_MEMORY, "[%s] Memory Allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
-
- __pPanningGestureHandler = std::unique_ptr<_PanningGestureState>(new (std::nothrow) _PanningGestureState(this, __pPinchGestureHandler.get()));
+ __pPanningGestureHandler = std::unique_ptr<_PanningGestureState>(new (std::nothrow) _PanningGestureState(this));
SysTryReturnResult(NID_WEB_CTRL, __pPanningGestureHandler.get(), E_OUT_OF_MEMORY, "[%s] Memory Allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
__pFlickGestureHandler = std::unique_ptr<_FlickGestureState>(new (std::nothrow) _FlickGestureState(this));
{
result r = E_SUCCESS;
- _ITouchFlickGestureEventListener* pFlickListener = dynamic_cast< _ITouchFlickGestureEventListener* >(this);
- SysAssertf(pFlickListener != null, "Failed to get flick gesture listener");
-
std::unique_ptr<_TouchFlickGestureDetector> pGestureFlick(new (std::nothrow) _TouchFlickGestureDetector());
SysTryReturnResult(NID_WEB_CTRL, pGestureFlick.get(), E_OUT_OF_MEMORY, "[%s] Memory Allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
- r = pGestureFlick->AddGestureListener(*pFlickListener);
+ r = pGestureFlick->AddGestureListener(*this);
SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
r = AddGestureDetector(*pGestureFlick.get());
__pGestureFlick = std::move(pGestureFlick);
- _ITouchLongPressGestureEventListener* pLongPressListener = dynamic_cast< _ITouchLongPressGestureEventListener* >(this);
- SysAssertf(pLongPressListener != null, "Failed to get longpress gesture listener");
-
std::unique_ptr<_TouchLongPressGestureDetector> pGestureLongPress(new (std::nothrow) _TouchLongPressGestureDetector());
SysTryReturnResult(NID_WEB_CTRL, pGestureLongPress.get(), E_OUT_OF_MEMORY, "[%s] Memory Allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
- r = pGestureLongPress->AddGestureListener(*pLongPressListener);
+ r = pGestureLongPress->AddGestureListener(*this);
SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
r = AddGestureDetector(*pGestureLongPress.get());
__pGestureLongPress = std::move(pGestureLongPress);
- _ITouchTapGestureEventListener* pDoubleTapListener = dynamic_cast< _ITouchTapGestureEventListener* >(this);
- SysAssertf(pDoubleTapListener != null, "Failed to get tap gesture listener");
-
std::unique_ptr<_TouchTapGestureDetector> pGestureDoubleTap(new (std::nothrow) _TouchTapGestureDetector());
SysTryReturnResult(NID_WEB_CTRL, pGestureDoubleTap.get(), E_OUT_OF_MEMORY, "[%s] Memory Allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
- r = pGestureDoubleTap->AddGestureListener(*pDoubleTapListener);
+ r = pGestureDoubleTap->AddGestureListener(*this);
SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
r = AddGestureDetector(*pGestureDoubleTap.get());
__pGestureDoubleTap = std::move(pGestureDoubleTap);
+ std::unique_ptr<_TouchPinchGestureDetector> pGesturePinch(new (std::nothrow) _TouchPinchGestureDetector());
+ SysTryReturnResult(NID_WEB_CTRL, pGesturePinch.get(), E_OUT_OF_MEMORY, "[%s] Memory Allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
+
+ r = pGesturePinch->AddGestureListener(*this);
+ SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
+
+ r = AddGestureDetector(*pGesturePinch.get());
+ SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
+
+ __pGesturePinch = std::move(pGesturePinch);
+
return E_SUCCESS;
}
{
if (__pGestureFlick.get())
{
- _ITouchFlickGestureEventListener* pListener = dynamic_cast< _ITouchFlickGestureEventListener* >(this);
- __pGestureFlick->RemoveGestureListener(*pListener);
+ __pGestureFlick->RemoveGestureListener(*this);
RemoveGestureDetector(*__pGestureFlick);
}
if (__pGestureLongPress.get())
{
- _ITouchLongPressGestureEventListener* pListener = dynamic_cast< _ITouchLongPressGestureEventListener* >(this);
- __pGestureLongPress->RemoveGestureListener(*pListener);
+ __pGestureLongPress->RemoveGestureListener(*this);
RemoveGestureDetector(*__pGestureLongPress);
}
if (__pGestureDoubleTap.get())
{
- _ITouchTapGestureEventListener* pListener = dynamic_cast< _ITouchTapGestureEventListener* >(this);
- __pGestureDoubleTap->RemoveGestureListener(*pListener);
+ __pGestureDoubleTap->RemoveGestureListener(*this);
RemoveGestureDetector(*__pGestureDoubleTap);
}
+
+ if (__pGesturePinch.get())
+ {
+ __pGesturePinch->RemoveGestureListener(*this);
+ RemoveGestureDetector(*__pGesturePinch);
+ }
}
Point
_Web::GetAbsoluteCoordinate(Point relativePoint)
{
- _ICoordinateSystemTransformer* pXformer = _CoordinateSystem::GetInstance()->GetTransformer();
- SysAssertf(pXformer, "Failed to get coordinate transformer.");
-
- int absX = pXformer->TransformHorizontal(relativePoint.x + GetAbsoluteBounds().x);
- int absY = pXformer->TransformVertical(relativePoint.y + GetAbsoluteBounds().y);
-
- return Point(absX, absY);
+ return _CoordinateSystemUtils::Transform(ConvertToScreenPosition(relativePoint));
}
FloatPoint
_Web::GetAbsoluteCoordinate(FloatPoint relativePoint)
{
- _ICoordinateSystemTransformer* pXformer = _CoordinateSystem::GetInstance()->GetTransformer();
- SysAssertf(pXformer, "Failed to get coordinate transformer.");
-
- float absX = pXformer->TransformHorizontal(relativePoint.x + GetAbsoluteBoundsF().x);
- float absY = pXformer->TransformVertical(relativePoint.y + GetAbsoluteBoundsF().y);
-
- return FloatPoint(absX, absY);
+ return _CoordinateSystemUtils::Transform(ConvertToScreenPosition(relativePoint));
}
Point
_Web::GetRelativeCoordinate(Point absolutePoint)
{
- _ICoordinateSystemTransformer* pXformer = _CoordinateSystem::GetInstance()->GetInverseTransformer();
- SysAssertf(pXformer, "Failed to get coordinate transformer.");
-
- Point bound(GetAbsoluteCoordinate(Point(0, 0)));
-
- int absX = pXformer->TransformHorizontal(absolutePoint.x - bound.x);
- int absY = pXformer->TransformVertical(absolutePoint.y - bound.y);
-
- return Point(absX, absY);
+ return _CoordinateSystemUtils::InverseTransform(ConvertToControlPosition(absolutePoint));
}
FloatPoint
_Web::GetRelativeCoordinate(FloatPoint absolutePoint)
{
- _ICoordinateSystemTransformer* pXformer = _CoordinateSystem::GetInstance()->GetInverseTransformer();
- SysAssertf(pXformer, "Failed to get coordinate transformer.");
-
- FloatPoint bound(GetAbsoluteCoordinate(FloatPoint(0.0, 0.0)));
-
- float absX = pXformer->TransformHorizontal(absolutePoint.x - bound.x);
- float absY = pXformer->TransformVertical(absolutePoint.y - bound.y);
-
- return FloatPoint(absX, absY);
+ return _CoordinateSystemUtils::InverseTransform(ConvertToControlPosition(absolutePoint));
}
{
case WEB_GESTURE_TYPE_TAP:
__pGestureHandler = __pTapGestureHandler.get();
+ __gestureType = WEB_GESTURE_TYPE_TAP;
break;
- case WEB_GESTURE_TYPE_DOUBLE_TAP:
- __pGestureHandler = __pDoubleTapGestureHandler.get();
- break;
-
case WEB_GESTURE_TYPE_PANNING:
__pGestureHandler = __pPanningGestureHandler.get();
+ __gestureType = WEB_GESTURE_TYPE_PANNING;
break;
case WEB_GESTURE_TYPE_FLICK:
__pGestureHandler = __pFlickGestureHandler.get();
+ __gestureType = WEB_GESTURE_TYPE_FLICK;
break;
case WEB_GESTURE_TYPE_PINCH:
__pGestureHandler = __pPinchGestureHandler.get();
+ __gestureType = WEB_GESTURE_TYPE_PINCH;
break;
default:
{
SendTouchEventForJavaScript(touchInfo);
- __pGestureHandler->OnTouchPressed(source, touchInfo);
+ return __pGestureHandler->OnTouchPressed(source, touchInfo);
}
return true;
bool
_Web::OnTouchMoved(const _Control& source, const _TouchInfo& touchInfo)
{
- if (__pEflWebkit.get())
+ if (__pEflWebkit.get() && __pWebSettingImpl->IsScrollEnabled())
{
SendTouchEventForJavaScript(touchInfo);
- __pGestureHandler->OnTouchMoved(source, touchInfo);
+ return __pGestureHandler->OnTouchMoved(source, touchInfo);
}
return true;
{
SendTouchEventForJavaScript(touchInfo);
- __pGestureHandler->OnTouchReleased(source, touchInfo);
+ return __pGestureHandler->OnTouchReleased(source, touchInfo);
_WebImpl* pWebImpl = reinterpret_cast<_WebImpl*>(evas_object_data_get(GetWebNativeNode(), WEB_CTRL));
- if (pWebImpl && pWebImpl->GetLoadingListener() && pWebImpl->GetTextFromBlock().GetLength() > 0)
+ if (pWebImpl->GetLoadingListener() && pWebImpl->GetTextFromBlock().GetLength() > 0)
{
pWebImpl->FireWebPageBlockSelectedEvent();
}
return true;
}
+
bool
_Web::OnTouchCanceled(const _Control& source, const _TouchInfo& touchInfo)
{
}
+void
+_Web::OnTouchPressHandled(const _Control& control)
+{
+}
+
+
+void
+_Web::OnTouchReleaseHandled(const _Control& control)
+{
+}
+
+
+void
+_Web::OnTouchMoveHandled(const _Control& control)
+{
+}
+
+
+void
+_Web::OnTouchCancelHandled(const _Control& control)
+{
+}
+
+
+bool
+_Web::OnLongPressGestureDetected(_TouchLongPressGestureDetector& gesture)
+{
+ if (__pEflWebkit.get() && __gestureType == WEB_GESTURE_TYPE_TAP)
+ {
+ return __pTapGestureHandler->OnLongPressGestureDetected(gesture);
+ }
+
+ return true;
+}
+
+
+bool
+_Web::OnLongPressGestureCanceled(_TouchLongPressGestureDetector& gesture)
+{
+ return true;
+}
+
+
+bool
+_Web::OnTapGestureDetected(_TouchTapGestureDetector& gesture)
+{
+ if (__pEflWebkit.get())
+ {
+ return __pTapGestureHandler->OnTapGestureDetected(gesture);
+ }
+
+ return true;
+}
+
+
+bool
+_Web::OnTapGestureCanceled(_TouchTapGestureDetector& gesture)
+{
+ return true;
+}
+
+
bool
_Web::OnFlickGestureDetected(_TouchFlickGestureDetector& gesture)
{
if (__pEflWebkit.get() && __pWebSettingImpl->IsScrollEnabled())
{
- ChangeGesture(WEB_GESTURE_TYPE_FLICK);
- static_cast< _FlickGestureState* >(__pGestureHandler)->OnFlickGestureDetected(gesture);
+ return __pFlickGestureHandler->OnFlickGestureDetected(gesture);
}
return true;
bool
-_Web::OnLongPressGestureDetected(_TouchLongPressGestureDetector& gesture)
+_Web::OnPinchGestureStarted(Tizen::Ui::_TouchPinchGestureDetector& gesture)
{
if (__pEflWebkit.get())
{
- _TapGestureState* pTapGestureHandler = dynamic_cast< _TapGestureState* >(__pGestureHandler);
- if (pTapGestureHandler)
- {
- pTapGestureHandler->OnLongPressGestureDetected(gesture);
- }
+ return __pPinchGestureHandler->OnPinchGestureStarted(gesture);
}
return true;
bool
-_Web::OnLongPressGestureCanceled(_TouchLongPressGestureDetector& gesture)
+_Web::OnPinchGestureChanged(Tizen::Ui::_TouchPinchGestureDetector& gesture)
{
+ if (__pEflWebkit.get() && __gestureType == WEB_GESTURE_TYPE_PINCH)
+ {
+ return __pPinchGestureHandler->OnPinchGestureChanged(gesture);
+ }
+
return true;
}
bool
-_Web::OnTapGestureDetected(_TouchTapGestureDetector& gesture)
+_Web::OnPinchGestureFinished(Tizen::Ui::_TouchPinchGestureDetector& gesture)
{
- if (__pEflWebkit.get())
+ if (__pEflWebkit.get() && __gestureType == WEB_GESTURE_TYPE_PINCH)
{
- ChangeGesture(WEB_GESTURE_TYPE_DOUBLE_TAP);
+ return __pPinchGestureHandler->OnPinchGestureFinished(gesture);
}
return true;
bool
-_Web::OnTapGestureCanceled(_TouchTapGestureDetector& gesture)
+_Web::OnPinchGestureCanceled(Tizen::Ui::_TouchPinchGestureDetector& gesture)
{
return true;
}
Canvas*
-_Web::OnCanvasRequestedN(const Dimension& size)
+_Web::OnCanvasRequestedFN(const FloatRectangle& bounds)
{
result r = E_SUCCESS;
Eina_Rectangle rect;
BufferInfo bufferInfo;
- Point absSize = GetAbsoluteCoordinate(Point(size.width, size.height));
+ Point absPoint(_CoordinateSystemUtils::ConvertToInteger(GetAbsoluteCoordinate(FloatPoint(bounds.x, bounds.y))));
+ Dimension absSize(_CoordinateSystemUtils::ConvertToInteger(_CoordinateSystemUtils::HorizontalTransform(bounds.width)),
+ _CoordinateSystemUtils::ConvertToInteger(_CoordinateSystemUtils::VerticalTransform(bounds.height)));
- EINA_RECTANGLE_SET(&rect, 0, 0, absSize.x, absSize.y);
+ EINA_RECTANGLE_SET(&rect, absPoint.x, absPoint.y, absSize.width, absSize.height);
Evas_Object* pScreenShot = ewk_view_screenshot_contents_get(pWebFrame, rect, 1.0f, evas_object_evas_get(pWebFrame));
SysTryReturn(NID_WEB_CTRL, pScreenShot, null, E_SYSTEM, "[%s] A system error has been occurred. Failed to get snapshot of Web control", GetErrorMessage(E_SYSTEM));
ByteBuffer buffer;
BufferInfo bufferInfo;
- Dimension size = GetSize();
- Point absSize = GetAbsoluteCoordinate(Point(size.width, size.height));
+ Dimension size(GetSize());
+ Point absSize(GetAbsoluteCoordinate(Point(size.width, size.height)));
EINA_RECTANGLE_SET(&rect, 0, 0, absSize.x, absSize.y);