2 // Open Service Platform
3 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
5 // Licensed under the Apache License, Version 2.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
9 // http://www.apache.org/licenses/LICENSE-2.0
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
19 * @file FWebCtrl_Web.cpp
20 * @brief The file contains the definition of _Web class.
22 * The file contains the definition of _Web class.
25 #include <FBaseByteBuffer.h>
26 #include <FBaseColLinkedListT.h>
27 #include <FBaseSysLog.h>
28 #include <FBaseColIListT.h>
29 #include <FGrpFloatPoint.h>
30 #include <FGrpPoint.h>
31 #include <FGrpBitmap.h>
32 #include <FGrpCanvas.h>
33 #include <FGrpFloatRectangle.h>
34 #include <FWebCtrlWebSetting.h>
35 #include <FGrp_CoordinateSystem.h>
36 #include <FUiAnim_EflNode.h>
37 #include <FUiAnim_VisualElement.h>
38 #include <FUi_CoordinateSystemUtils.h>
39 #include <FUi_AccessibilityContainer.h>
40 #include <FUi_AccessibilityElement.h>
41 #include <FUi_IAccessibilityFocusHandler.h>
42 #include <FUi_TouchManager.h>
43 #include "FWebCtrl_EflWebkit.h"
44 #include "FWebCtrl_GestureState.h"
45 #include "FWebCtrl_Web.h"
46 #include "FWebCtrl_WebImpl.h"
47 #include "FWebCtrl_WebSettingImpl.h"
48 #include "FWebCtrl_Utility.h"
51 using namespace Tizen::Base;
52 using namespace Tizen::Base::Collection;
53 using namespace Tizen::Graphics;
54 using namespace Tizen::Ui;
55 using namespace Tizen::Ui::Animations;
60 static int __animationAccessibilityCount = 0;
61 class _WebAccessibilityFocusHandler
62 :public Tizen::Ui::_IAccessibilityFocusHandler
65 _WebAccessibilityFocusHandler(void)
68 virtual ~_WebAccessibilityFocusHandler(void)
71 virtual bool OnMoveFocus(Tizen::Ui::_AccessibilityFocusDirection direction)
73 __animationAccessibilityCount++;
74 if (direction == Tizen::Ui::_ACCESSIBILITY_FOCUS_DIRECTION_PREVIOUS)
76 if(__animationAccessibilityCount %3 == 0)
78 SysLog(NID_WEB_CTRL, "_WebAccessibilityFocusHandler can move focus , :direction : PREVIOUS");
81 SysLog(NID_WEB_CTRL, "!!!_WebAccessibilityFocusHandler can NOT move focus , :direction : PREVIOUS");
84 else if (direction == Tizen::Ui::_ACCESSIBILITY_FOCUS_DIRECTION_NEXT)
86 if(__animationAccessibilityCount %3 == 0)
88 SysLog(NID_WEB_CTRL, "_WebAccessibilityFocusHandler can move focus , :direction : NEXT");
91 SysLog(NID_WEB_CTRL, "!!!_WebAccessibilityFocusHandler can NOT move focus , :direction : NEXT");
96 virtual bool OnMoveFocus(const Tizen::Graphics::Point& point)
98 if(__animationAccessibilityCount %2 == 0)
100 SysLog(NID_WEB_CTRL, "_WebAccessibilityFocusHandler can read element at the point (%d,%d)", point.x, point.y);
105 SysLog(NID_WEB_CTRL, "_WebAccessibilityFocusHandler can NOT read element at the point (%d,%d)", point.x, point.y);
114 namespace Tizen { namespace Web { namespace Controls
118 static const char WEB_CTRL[] = "webcontrol";
122 : __pGestureHandler(null)
124 , __pWebSetting(null)
125 , __pGestureFlick(null)
126 , __pGestureLongPress(null)
127 , __pGesturePinch(null)
128 , __pGestureDoubleTap(null)
129 , __pTouchEventInfoList(null)
130 , __pTapGestureHandler(null)
131 , __pPanningGestureHandler(null)
132 , __pFlickGestureHandler(null)
133 , __pPinchGestureHandler(null)
134 , __gestureType(WEB_GESTURE_TYPE_TAP)
135 , __pTextElement(null)
137 SetBackgroundColor(Color(0, 0, 0, 0));
143 RemoveGestureListener();
148 _Web::CreateWebN(void)
150 result r = E_SUCCESS;
152 std::unique_ptr<_Web> pWeb(new (std::nothrow) _Web());
153 SysTryReturn(NID_WEB_CTRL, pWeb.get(), null, E_OUT_OF_MEMORY, "[%s] Memory Allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
155 pWeb->__pWebSetting = std::unique_ptr<WebSetting>(new (std::nothrow) WebSetting());
156 SysTryReturn(NID_WEB_CTRL, pWeb->__pWebSetting.get(), null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
158 pWeb->AcquireHandle();
159 pWeb->SetMultiTouchEnabled(true);
160 pWeb->SetTouchPressThreshold(0.08);
162 r = pWeb->AddGestureListeners();
163 SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
165 r = pWeb->InitializeGestureStates();
166 SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
168 return pWeb.release();
173 _Web::CreateWebkitEvasObject(void)
175 result r = E_SUCCESS;
177 std::unique_ptr<_EflWebkit> pEflWebkit(new (std::nothrow) _EflWebkit());
178 SysTryReturnResult(NID_WEB_CTRL, pEflWebkit.get(), E_OUT_OF_MEMORY, "[%s] Memory Allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
180 r = pEflWebkit->Construct(GetAbsoluteBounds(), *GetVisualElement());
181 SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
183 __pEflWebkit = std::move(pEflWebkit);
190 _Web::InitializeGestureStates(void)
192 __pPinchGestureHandler = std::unique_ptr<_PinchGestureState>(new (std::nothrow) _PinchGestureState(this));
193 SysTryReturnResult(NID_WEB_CTRL, __pPinchGestureHandler.get(), E_OUT_OF_MEMORY, "[%s] Memory Allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
195 __pTapGestureHandler = std::unique_ptr<_TapGestureState>(new (std::nothrow) _TapGestureState(this));
196 SysTryReturnResult(NID_WEB_CTRL, __pTapGestureHandler.get(), E_OUT_OF_MEMORY, "[%s] Memory Allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
198 __pPanningGestureHandler = std::unique_ptr<_PanningGestureState>(new (std::nothrow) _PanningGestureState(this));
199 SysTryReturnResult(NID_WEB_CTRL, __pPanningGestureHandler.get(), E_OUT_OF_MEMORY, "[%s] Memory Allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
201 __pFlickGestureHandler = std::unique_ptr<_FlickGestureState>(new (std::nothrow) _FlickGestureState(this));
202 SysTryReturnResult(NID_WEB_CTRL, __pFlickGestureHandler.get(), E_OUT_OF_MEMORY, "[%s] Memory Allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
204 __pGestureHandler = __pTapGestureHandler.get();
211 _Web::AddGestureListeners(void)
213 result r = E_SUCCESS;
215 std::unique_ptr<_TouchFlickGestureDetector> pGestureFlick(new (std::nothrow) _TouchFlickGestureDetector());
216 SysTryReturnResult(NID_WEB_CTRL, pGestureFlick.get(), E_OUT_OF_MEMORY, "[%s] Memory Allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
218 r = pGestureFlick->AddGestureListener(*this);
219 SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
221 r = AddGestureDetector(*pGestureFlick.get());
222 SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
224 __pGestureFlick = std::move(pGestureFlick);
226 std::unique_ptr<_TouchLongPressGestureDetector> pGestureLongPress(new (std::nothrow) _TouchLongPressGestureDetector());
227 SysTryReturnResult(NID_WEB_CTRL, pGestureLongPress.get(), E_OUT_OF_MEMORY, "[%s] Memory Allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
229 r = pGestureLongPress->AddGestureListener(*this);
230 SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
232 r = AddGestureDetector(*pGestureLongPress.get());
233 SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
235 __pGestureLongPress = std::move(pGestureLongPress);
237 std::unique_ptr<_TouchTapGestureDetector> pGestureDoubleTap(new (std::nothrow) _TouchTapGestureDetector());
238 SysTryReturnResult(NID_WEB_CTRL, pGestureDoubleTap.get(), E_OUT_OF_MEMORY, "[%s] Memory Allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
240 r = pGestureDoubleTap->AddGestureListener(*this);
241 SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
243 r = AddGestureDetector(*pGestureDoubleTap.get());
244 SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
246 __pGestureDoubleTap = std::move(pGestureDoubleTap);
248 std::unique_ptr<_TouchPinchGestureDetector> pGesturePinch(new (std::nothrow) _TouchPinchGestureDetector());
249 SysTryReturnResult(NID_WEB_CTRL, pGesturePinch.get(), E_OUT_OF_MEMORY, "[%s] Memory Allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
251 r = pGesturePinch->AddGestureListener(*this);
252 SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
254 r = AddGestureDetector(*pGesturePinch.get());
255 SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
257 __pGesturePinch = std::move(pGesturePinch);
264 _Web::RemoveGestureListener(void)
266 if (__pGestureFlick.get())
268 __pGestureFlick->RemoveGestureListener(*this);
269 RemoveGestureDetector(*__pGestureFlick);
272 if (__pGestureLongPress.get())
274 __pGestureLongPress->RemoveGestureListener(*this);
275 RemoveGestureDetector(*__pGestureLongPress);
278 if (__pGestureDoubleTap.get())
280 __pGestureDoubleTap->RemoveGestureListener(*this);
281 RemoveGestureDetector(*__pGestureDoubleTap);
284 if (__pGesturePinch.get())
286 __pGesturePinch->RemoveGestureListener(*this);
287 RemoveGestureDetector(*__pGesturePinch);
293 _Web::InitializeWebNativeNode(void)
295 result r = E_SUCCESS;
297 r = CreateWebkitEvasObject();
298 SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
300 SetNativeObjectFocusable(false);
302 _AccessibilityContainer* pContainer = GetAccessibilityContainer();
303 SysTryReturn(NID_WEB_CTRL, pContainer, E_SYSTEM, E_SYSTEM, "[%s] Propagating.", GetErrorMessage(E_SYSTEM));
307 __pTextElement = new (std::nothrow) _AccessibilityElement(true);
308 SysTryReturn(NID_WEB_CTRL, __pTextElement, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[%s] Memory shortage.", GetErrorMessage(E_OUT_OF_MEMORY));
310 __pTextElement->SetBounds(FloatRectangle(0.0f, 0.0f, GetBoundsF().width, GetBoundsF().height));
311 //__pTextElement->SetLabel(GetText());
312 //__pTextElement->SetTrait(L"Web");
313 //__pTextElement->SetName(L"WebText");
315 pContainer->AddElement(*__pTextElement);
318 pContainer->Activate(true);
319 _WebAccessibilityFocusHandler* pFocusHandler = new (std::nothrow) _WebAccessibilityFocusHandler();
320 pContainer->SetFocusHandler(dynamic_cast<_IAccessibilityFocusHandler*>(pFocusHandler));
327 _Web::GetAbsoluteCoordinate(Point relativePoint)
329 return _CoordinateSystemUtils::Transform(ConvertToScreenPosition(relativePoint));
334 _Web::GetAbsoluteCoordinate(FloatPoint relativePoint)
336 return _CoordinateSystemUtils::Transform(ConvertToScreenPosition(relativePoint));
341 _Web::GetRelativeCoordinate(Point absolutePoint)
343 return _CoordinateSystemUtils::InverseTransform(ConvertToControlPosition(absolutePoint));
348 _Web::GetRelativeCoordinate(FloatPoint absolutePoint)
350 return _CoordinateSystemUtils::InverseTransform(ConvertToControlPosition(absolutePoint));
355 _Web::GetWebNativeNode(void)
357 SysTryReturn(NID_WEB_CTRL, __pEflWebkit.get(), null, E_INVALID_STATE, "[%s] Native node is in an invalid state.", GetErrorMessage(E_INVALID_STATE));
359 return __pEflWebkit->GetWebEvasObject();
364 _Web::GetSetting(void) const
366 return __pWebSetting.get();
371 _Web::OnAttaching(const _Control* pParent)
373 if (__pEflWebkit.get())
375 evas_object_show(__pEflWebkit->GetWebEvasObject());
376 evas_object_focus_set(__pEflWebkit->GetWebEvasObject(), EINA_TRUE);
384 _Web::OnBoundsChanging(const Rectangle& bounds)
386 Rectangle absoluteBounds = GetAbsoluteBounds();
387 Rectangle webBounds = GetBounds();
388 _ICoordinateSystemTransformer* pXformer = _CoordinateSystem::GetInstance()->GetTransformer();
389 SysTryReturnResult(NID_WEB_CTRL, pXformer, E_SYSTEM, "[%s] A system error has been occurred. Failed to get coordinate transformer.", GetErrorMessage(E_SYSTEM));
391 if (__pEflWebkit.get())
393 evas_object_move(__pEflWebkit->GetWebEvasObject(), pXformer->TransformHorizontal(absoluteBounds.x - webBounds.x + bounds.x), pXformer->TransformVertical(absoluteBounds.y - webBounds.y + bounds.y));
394 evas_object_resize(__pEflWebkit->GetWebEvasObject(), pXformer->TransformHorizontal(bounds.width), pXformer->TransformVertical(bounds.height));
402 _Web::ChangeGesture(_WebGestureType type)
406 case WEB_GESTURE_TYPE_TAP:
407 __pGestureHandler = __pTapGestureHandler.get();
408 __gestureType = WEB_GESTURE_TYPE_TAP;
411 case WEB_GESTURE_TYPE_PANNING:
412 __pGestureHandler = __pPanningGestureHandler.get();
413 __gestureType = WEB_GESTURE_TYPE_PANNING;
416 case WEB_GESTURE_TYPE_FLICK:
417 __pGestureHandler = __pFlickGestureHandler.get();
418 __gestureType = WEB_GESTURE_TYPE_FLICK;
421 case WEB_GESTURE_TYPE_PINCH:
422 __pGestureHandler = __pPinchGestureHandler.get();
423 __gestureType = WEB_GESTURE_TYPE_PINCH;
433 _Web::OnTouchPressed(const _Control& source, const _TouchInfo& touchInfo)
435 if (__pEflWebkit.get())
437 SendTouchEventForJavaScript(touchInfo);
439 return __pGestureHandler->OnTouchPressed(source, touchInfo);
447 _Web::OnTouchMoved(const _Control& source, const _TouchInfo& touchInfo)
449 if (__pEflWebkit.get())
451 if (_WebSettingImpl::GetInstance(__pWebSetting.get())->IsScrollEnabled())
453 SendTouchEventForJavaScript(touchInfo);
455 return __pGestureHandler->OnTouchMoved(source, touchInfo);
457 else if (__gestureType == WEB_GESTURE_TYPE_TAP)
459 return __pGestureHandler->OnTouchMoved(source, touchInfo);
468 _Web::OnTouchReleased(const _Control& source, const _TouchInfo& touchInfo)
472 if (__pEflWebkit.get())
474 SendTouchEventForJavaScript(touchInfo);
476 return __pGestureHandler->OnTouchReleased(source, touchInfo);
484 _Web::OnTouchCanceled(const _Control& source, const _TouchInfo& touchInfo)
486 if (__pEflWebkit.get())
488 SendTouchEventForJavaScript(touchInfo);
490 __pGestureHandler->OnTouchCanceled(source, touchInfo);
498 _Web::OnTouchPressHandled(const _Control& control)
504 _Web::OnTouchReleaseHandled(const _Control& control)
510 _Web::OnTouchMoveHandled(const _Control& control)
516 _Web::OnTouchCancelHandled(const _Control& control)
522 _Web::OnLongPressGestureDetected(_TouchLongPressGestureDetector& gesture)
524 if (__pEflWebkit.get() && __gestureType == WEB_GESTURE_TYPE_TAP)
526 return __pTapGestureHandler->OnLongPressGestureDetected(gesture);
534 _Web::OnLongPressGestureCanceled(_TouchLongPressGestureDetector& gesture)
541 _Web::OnTapGestureDetected(_TouchTapGestureDetector& gesture)
543 if (__pEflWebkit.get())
545 return __pTapGestureHandler->OnTapGestureDetected(gesture);
553 _Web::OnTapGestureCanceled(_TouchTapGestureDetector& gesture)
560 _Web::OnFlickGestureDetected(_TouchFlickGestureDetector& gesture)
562 if (__pEflWebkit.get() && _WebSettingImpl::GetInstance(__pWebSetting.get())->IsScrollEnabled())
564 return __pFlickGestureHandler->OnFlickGestureDetected(gesture);
572 _Web::OnFlickGestureCanceled(_TouchFlickGestureDetector& gesture)
579 _Web::OnPinchGestureStarted(Tizen::Ui::_TouchPinchGestureDetector& gesture)
581 if (__pEflWebkit.get())
583 return __pPinchGestureHandler->OnPinchGestureStarted(gesture);
591 _Web::OnPinchGestureChanged(Tizen::Ui::_TouchPinchGestureDetector& gesture)
593 if (__pEflWebkit.get() && __gestureType == WEB_GESTURE_TYPE_PINCH)
595 return __pPinchGestureHandler->OnPinchGestureChanged(gesture);
603 _Web::OnPinchGestureFinished(Tizen::Ui::_TouchPinchGestureDetector& gesture)
605 if (__pEflWebkit.get() && __gestureType == WEB_GESTURE_TYPE_PINCH)
607 return __pPinchGestureHandler->OnPinchGestureFinished(gesture);
615 _Web::OnPinchGestureCanceled(Tizen::Ui::_TouchPinchGestureDetector& gesture)
622 _Web::OnCanvasRequestedFN(const FloatRectangle& bounds)
624 result r = E_SUCCESS;
626 Evas_Object* pWebFrame = GetWebNativeNode();
628 BufferInfo bufferInfo;
630 Point absPoint(_CoordinateSystemUtils::ConvertToInteger(GetAbsoluteCoordinate(FloatPoint(bounds.x, bounds.y))));
631 Dimension absSize(_CoordinateSystemUtils::ConvertToInteger(_CoordinateSystemUtils::HorizontalTransform(bounds.width)),
632 _CoordinateSystemUtils::ConvertToInteger(_CoordinateSystemUtils::VerticalTransform(bounds.height)));
634 EINA_RECTANGLE_SET(&rect, absPoint.x, absPoint.y, absSize.width, absSize.height);
636 Evas_Object* pScreenShot = ewk_view_screenshot_contents_get(pWebFrame, rect, 1.0f, evas_object_evas_get(pWebFrame));
637 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));
639 r = _Utility::GetPixelBufferFromEvasObject(pScreenShot, bufferInfo);
640 evas_object_del(pScreenShot);
641 SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, null, r, "[%s] propagating", GetErrorMessage(r));
643 std::unique_ptr<Canvas> pCanvas(new (std::nothrow) Canvas());
644 SysTryReturn(NID_WEB_CTRL, pCanvas.get(), null, E_OUT_OF_MEMORY, "[%s] Memory Allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
646 r = pCanvas->Construct(bufferInfo);
647 SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, null, r, "[%s] propagating", GetErrorMessage(r));
649 return pCanvas.release();
654 _Web::OnCapturedBitmapRequestedN(void)
656 result r = E_SUCCESS;
658 Evas_Object* pWebFrame = GetWebNativeNode();
661 BufferInfo bufferInfo;
663 Dimension size(GetSize());
664 Point absSize(GetAbsoluteCoordinate(Point(size.width, size.height)));
666 EINA_RECTANGLE_SET(&rect, 0, 0, absSize.x, absSize.y);
668 Evas_Object* pScreenShot = ewk_view_screenshot_contents_get(pWebFrame, rect, 1.0f, evas_object_evas_get(pWebFrame));
669 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));
671 r = _Utility::GetPixelBufferFromEvasObject(pScreenShot, bufferInfo);
672 evas_object_del(pScreenShot);
673 SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, null, r, "[%s] propagating", GetErrorMessage(r));
675 int bufferSize = bufferInfo.bitsPerPixel * bufferInfo.width * bufferInfo.height;
676 r = buffer.Construct(reinterpret_cast < byte* >(bufferInfo.pPixels), 0, bufferSize, bufferSize);
677 SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, null, r, "[%s] propagating", GetErrorMessage(r));
679 std::unique_ptr<Bitmap> pBitmap(new (std::nothrow) Bitmap());
680 SysTryReturn(NID_WEB_CTRL, pBitmap.get(), null, E_OUT_OF_MEMORY, "[%s] Memory Allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
682 r = pBitmap->Construct(buffer, Dimension(bufferInfo.width, bufferInfo.height), BITMAP_PIXEL_FORMAT_ARGB8888);
683 SysTryReturn(NID_WEB_CTRL, r == E_SUCCESS, null, r, "[%s] propagating", GetErrorMessage(r));
685 return pBitmap.release();
690 _Web::DumpPointList(void* pData)
692 Eina_List* pList = reinterpret_cast< Eina_List* >(pData);
694 for(; pList; pList = eina_list_next(pList))
696 Ewk_Touch_Point* pPointDump = static_cast<Ewk_Touch_Point*>(eina_list_data_get(pList));
697 SysLog(NID_WEB_CTRL, "The current value of id is %lu, x is %d, y is %d, state is %d", pPointDump->id, pPointDump->x, pPointDump->y, pPointDump->state);
703 _Web::SendTouchEventForJavaScript(const _TouchInfo& touchInfo)
705 result r = E_SUCCESS;
707 Eina_List* pPointList = null;
708 Ewk_Touch_Point* pPoint = null;
710 _TouchManager* pTouchManager = _TouchManager::GetInstance();
711 SysAssertf(pTouchManager, "Failed to get touch manager.");
713 std::unique_ptr<IListT<_FingerInfo*> > pTouchList(pTouchManager->GetMultiFingerInfoListN());
714 SysTryReturnVoidResult(NID_WEB_CTRL, pTouchList.get(), GetLastResult(), "[%s] Failed to get touch list.", GetErrorMessage(GetLastResult()));
716 std::unique_ptr<IBidirectionalEnumeratorT<_FingerInfo*> > pTouchListEnum(pTouchList->GetBidirectionalEnumeratorN());
717 SysAssertf(pTouchListEnum.get() != null, "Failed to get enumerator of touch list.");
719 FloatPoint currentPoint;
720 _FingerInfo* pFingerInfo = null;
721 while(pTouchListEnum->MoveNext() == E_SUCCESS)
723 r = pTouchListEnum->GetCurrent(pFingerInfo);
724 SysTryReturnVoidResult(NID_WEB_CTRL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
726 _TouchStatus state = pFingerInfo->GetStatus();
727 if(state == _TOUCH_PRESSED || state == _TOUCH_MOVED || state == _TOUCH_RELEASED || state == _TOUCH_CANCELED)
729 currentPoint = GetAbsoluteCoordinate(pFingerInfo->GetPoint());
730 Point integerPoint(_CoordinateSystemUtils::ConvertToInteger(currentPoint));
732 pPoint = static_cast<Ewk_Touch_Point*>(calloc(1, sizeof(Ewk_Touch_Point)));
734 pPoint->id = pFingerInfo->GetPointId();
735 pPoint->x = integerPoint.x;
736 pPoint->y = integerPoint.y;
737 pPoint->state = GetEvasTouchState((TouchStatus)pFingerInfo->GetStatus());
739 pPointList = eina_list_append(pPointList, pPoint);
742 DumpPointList(pPointList);
744 Eina_Bool ret = ewk_view_feed_touch_event(__pEflWebkit->GetWebEvasObject(), GetEwkTouchEvent(touchInfo.GetTouchStatus()), pPointList, null);
745 SysTryReturnVoidResult(NID_WEB_CTRL, ret == EINA_TRUE, E_SYSTEM, "[%s] A system error has been occurred. Failed to deliver touch event to javascript.", GetErrorMessage(E_SYSTEM));
749 EINA_LIST_FREE(pPointList, pData)
755 _Web::GetEwkTouchEvent(_TouchStatus touchStatus)
757 Ewk_Touch_Event_Type ewkTouchEvent = EWK_TOUCH_CANCEL;
761 case _TOUCH_PRESSED :
762 ewkTouchEvent = EWK_TOUCH_START;
765 ewkTouchEvent = EWK_TOUCH_MOVE;
767 case _TOUCH_RELEASED :
768 ewkTouchEvent = EWK_TOUCH_END;
770 case _TOUCH_CANCELED :
773 ewkTouchEvent = EWK_TOUCH_CANCEL;
777 return ewkTouchEvent;
781 Evas_Touch_Point_State
782 _Web::GetEvasTouchState(TouchStatus touchStatus)
784 Evas_Touch_Point_State evasTouchState = EVAS_TOUCH_POINT_CANCEL;
789 evasTouchState = EVAS_TOUCH_POINT_DOWN;
792 evasTouchState = EVAS_TOUCH_POINT_MOVE;
794 case TOUCH_RELEASED :
795 evasTouchState = EVAS_TOUCH_POINT_UP;
797 case TOUCH_CANCELED :
800 evasTouchState = EVAS_TOUCH_POINT_CANCEL;
801 //todo : mapping EVAS_TOUCH_POINT_STILL, /**< Touch point is not moved af
805 return evasTouchState;
809 }}} // Tizen::Web::Controls