2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
5 // Licensed under the Flora License, Version 1.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://floralicense.org/license/
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 FUi_TouchManager.cpp
20 * @brief This is the implementation file for _TouchManager class.
24 #include <FUiTouchGestureDetector.h>
25 #include <FBaseSysLog.h>
27 #include "FUi_UiTouchEvent.h"
28 #include "FUi_UiEventManager.h"
29 #include "FUi_ITouchEventListener.h"
30 #include "FUi_TouchGestureDetector.h"
31 #include "FUi_ControlManager.h"
32 #include "FUi_Control.h"
33 #include "FUi_TouchManager.h"
34 #include "FUi_ControlImpl.h"
36 using namespace Tizen::Base::Collection;
37 using namespace Tizen::Graphics;
38 using namespace Tizen::Ui;
42 class _TouchEventListener
43 : public _ITouchEventListener
44 , virtual public _IUiEventListener
45 , virtual public Tizen::Base::Runtime::IEventListener
48 _TouchEventListener(void)
52 virtual ~_TouchEventListener(void)
56 virtual bool OnTouchPressed(const _Control& source, const _TouchInfo& touchinfo)
58 _TouchManager* pTouchManager = _TouchManager::GetInstance();
59 SysTryReturn(NID_UI, pTouchManager, false, E_SYSTEM, "[E_SYSTEM] _TouchManager does not exist.");
61 if (touchinfo.GetPointId() == SINGLE_POINT_ID)
63 pTouchManager->SetTouchAllowed(true);
64 pTouchManager->SetTouchCanceledOnGestureSuccess(false);
65 pTouchManager->SetTouchControlSource(source);
66 pTouchManager->SetFocusedControlSource(source);
70 _Control* pTouchedControl = pTouchManager->GetTouchControlSource();
71 if (pTouchedControl == null)
73 pTouchManager->SetTouchAllowed(true);
74 pTouchManager->SetTouchControlSource(source);
75 pTouchManager->SetFocusedControlSource(source);
79 if (!pTouchManager->IsSendingDelayedEvent())
84 result r = pTouchManager->AddPoint(touchinfo.GetPointId(), touchinfo.GetCurrentPosition(), _TOUCH_PRESSED);
85 SysTryReturn(NID_UI, r == E_SUCCESS, true, E_SYSTEM, "[E_SYSTEM] System error occurred.");
90 virtual bool OnTouchReleased(const _Control& source, const _TouchInfo& touchinfo)
92 _TouchManager* pTouchManager = _TouchManager::GetInstance();
93 SysTryReturn(NID_UI, pTouchManager, false, E_SYSTEM, "[E_SYSTEM] _TouchManager does not exist.");
95 if (!pTouchManager->IsTouchAllowed())
100 if (!pTouchManager->IsSendingDelayedEvent())
105 result r = pTouchManager->AddPoint(touchinfo.GetPointId(), touchinfo.GetCurrentPosition(), _TOUCH_RELEASED);
106 SysTryReturn(NID_UI, r == E_SUCCESS, true, E_SYSTEM, "[E_SYSTEM] System error occurred.");
111 virtual bool OnTouchMoved(const _Control& source, const _TouchInfo& touchinfo)
113 _TouchManager* pTouchManager = _TouchManager::GetInstance();
114 SysTryReturn(NID_UI, pTouchManager, false, E_SYSTEM, "[E_SYSTEM] _TouchManager does not exist.");
116 if (!pTouchManager->IsTouchAllowed())
121 if(!pTouchManager->IsInTouchMoveAllowanceBounds(source, touchinfo))
126 if (!pTouchManager->IsSendingDelayedEvent())
131 result r = pTouchManager->AddPoint(touchinfo.GetPointId(), touchinfo.GetCurrentPosition(), _TOUCH_MOVED);
140 virtual bool OnTouchCanceled(const _Control& source, const _TouchInfo& touchinfo)
142 _TouchManager* pTouchManager = _TouchManager::GetInstance();
143 SysTryReturn(NID_UI, pTouchManager, false, E_SYSTEM, "[E_SYSTEM] _TouchManager does not exist.");
145 if (pTouchManager->IsTouchCanceledOnGestureSuccess() == false)
147 CancelGesture(source, touchinfo);
150 _ITouchEventListener* pTouchedControlEventListener = source.GetPropagatedTouchEventListener();
152 if (pTouchedControlEventListener != null)
154 pTouchManager->SetTouchAllowed(false);
155 pTouchManager->ResetTouchInfo();
162 void CancelGesture(const _Control& source, const _TouchInfo& touchinfo)
164 IListT <_TouchGestureDetector*>* pGestureList = source.GetGestureDetectorList();
168 IEnumeratorT<_TouchGestureDetector*>* pEnumerator = pGestureList->GetEnumeratorN();
172 while(pEnumerator->MoveNext() == E_SUCCESS)
174 _TouchGestureDetector* pGestureDetector = null;
175 pEnumerator->GetCurrent(pGestureDetector);
177 if (pGestureDetector == null)
182 if (pGestureDetector->IsGestureStarted())
184 pGestureDetector->SetDetectorState(_TOUCH_GESTURE_DETECTOR_STATE_CANCELED);
185 pGestureDetector->ProcessPublicListener(*pGestureDetector);
186 pGestureDetector->ProcessCoreListener(*pGestureDetector);
190 pGestureDetector->SetDetectorState(_TOUCH_GESTURE_DETECTOR_STATE_CANCELED);
193 pGestureDetector->OnTouchCanceled(source, touchinfo);
202 namespace Tizen { namespace Ui
205 _MultiFingerInfo::_MultiFingerInfo(void)
206 : __currentPointId(0)
207 , __generatedPointId(0)
209 , __pFingerInfoMap(null)
211 __pFingerInfoMap = new (std::nothrow) HashMapT<int, _FingerInfo*>;
212 SysTryReturnVoidResult(NID_UI, __pFingerInfoMap, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
213 SysTryCatch(NID_UI, __pFingerInfoMap->Construct() == E_SUCCESS, , E_SYSTEM, "[E_SYSTEM] System error occurred.");
217 delete __pFingerInfoMap;
218 __pFingerInfoMap = null;
222 _MultiFingerInfo::~_MultiFingerInfo(void)
224 RemoveFingerInfoList();
228 _MultiFingerInfo::RemoveFingerInfoList(void)
230 IMapEnumeratorT<int, _FingerInfo*>* pEnumerator = __pFingerInfoMap->GetMapEnumeratorN();
233 while(pEnumerator->MoveNext() == E_SUCCESS)
235 _FingerInfo* pFingerInfo = null;
236 pEnumerator->GetValue(pFingerInfo);
247 __pFingerInfoMap->RemoveAll();
248 delete __pFingerInfoMap;
249 __pFingerInfoMap = null;
253 _MultiFingerInfo::GeneratePointId(unsigned long deviceId)
255 if (__pointCount == 0)
257 InitializeFingerInfo();
260 _FingerInfo* pFingerInfo = null;
261 __pFingerInfoMap->GetValue(deviceId, pFingerInfo);
263 unsigned int pointId = 0;
264 pointId = __generatedPointId;
266 if (pFingerInfo == null)
268 pFingerInfo = new (std::nothrow) _FingerInfo;
269 SysTryReturn(NID_UI, pFingerInfo, INVALID_POINT_ID, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] GeneratePointId - Memory allocation failed.");
271 pFingerInfo->SetDeviceId(deviceId);
272 pFingerInfo->SetPointId(pointId);
273 __pFingerInfoMap->Add(deviceId, pFingerInfo);
277 pFingerInfo->SetDeviceId(deviceId);
278 pFingerInfo->SetPointId(pointId);
279 __pFingerInfoMap->SetValue(deviceId, pFingerInfo);
282 __currentPointId = pointId;
283 __generatedPointId++;
289 _MultiFingerInfo::GetPointId(unsigned long deviceId) const
291 _FingerInfo* pFingerInfo = null;
292 __pFingerInfoMap->GetValue(deviceId, pFingerInfo);
293 SysTryReturn(NID_UI, pFingerInfo, INVALID_POINT_ID, E_SYSTEM, "[E_SYTSTEM] pFingerInfo is null.");
295 return pFingerInfo->GetPointId();
299 _MultiFingerInfo::GetCurrentPointId(void) const
301 return __currentPointId;
305 _MultiFingerInfo::GetPosition(unsigned long id) const
307 Point errorPoint(-1, -1);
309 IListT<_FingerInfo*>* pFingerList = __pFingerInfoMap->GetValuesN();
312 IEnumeratorT<_FingerInfo*>* pEnumerator = pFingerList->GetEnumeratorN();
315 while(pEnumerator->MoveNext() == E_SUCCESS)
317 _FingerInfo* pFingerInfo = null;
318 pEnumerator->GetCurrent(pFingerInfo);
320 if (pFingerInfo == null)
325 if (pFingerInfo->GetPointId() == id)
329 return pFingerInfo->GetPoint();
341 _MultiFingerInfo::GetScreenPoint(unsigned long id) const
343 Point errorPoint(-1, -1);
345 IListT<_FingerInfo*>* pFingerList = __pFingerInfoMap->GetValuesN();
348 IEnumeratorT<_FingerInfo*>* pEnumerator = pFingerList->GetEnumeratorN();
351 while(pEnumerator->MoveNext() == E_SUCCESS)
353 _FingerInfo* pFingerInfo = null;
354 pEnumerator->GetCurrent(pFingerInfo);
356 if (pFingerInfo == null)
361 if (pFingerInfo->GetPointId() == id)
365 return pFingerInfo->GetScreenPoint();
377 _MultiFingerInfo::GetStartPoint(unsigned long id) const
379 Point errorPoint(-1, -1);
381 IListT<_FingerInfo*>* pFingerList = __pFingerInfoMap->GetValuesN();
384 IEnumeratorT<_FingerInfo*>* pEnumerator = pFingerList->GetEnumeratorN();
387 while(pEnumerator->MoveNext() == E_SUCCESS)
389 _FingerInfo* pFingerInfo = null;
390 pEnumerator->GetCurrent(pFingerInfo);
392 if (pFingerInfo == null)
397 if (pFingerInfo->GetPointId() == id)
401 return pFingerInfo->GetStartPoint();
413 _MultiFingerInfo::GetStatus(unsigned long id) const
415 IListT<_FingerInfo*>* pFingerList = __pFingerInfoMap->GetValuesN();
418 IEnumeratorT<_FingerInfo*>* pEnumerator = pFingerList->GetEnumeratorN();
421 while(pEnumerator->MoveNext() == E_SUCCESS)
423 _FingerInfo* pFingerInfo = null;
424 pEnumerator->GetCurrent(pFingerInfo);
426 if (pFingerInfo == null)
431 if (pFingerInfo->GetPointId() == id)
435 return pFingerInfo->GetStatus();
443 return _TOUCH_PRESSED;
447 _MultiFingerInfo::GetPointCount(void) const
452 IListT<_FingerInfo*>*
453 _MultiFingerInfo::GetMultiFingerListN(void) const
455 IListT<_FingerInfo*>* pFingerInfoMapList = __pFingerInfoMap->GetValuesN();
456 SysTryReturn(NID_UI, pFingerInfoMapList, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
458 return pFingerInfoMapList;
462 _MultiFingerInfo::ResetFingerInfo(void)
465 __currentPointId = 0;
466 __generatedPointId = 0;
470 _MultiFingerInfo::InitializeFingerInfo(void)
472 IListT<_FingerInfo*>* pFingerList = __pFingerInfoMap->GetValuesN();
476 IEnumeratorT<_FingerInfo*>* pEnumerator = pFingerList->GetEnumeratorN();
479 while(pEnumerator->MoveNext() == E_SUCCESS)
481 _FingerInfo* pFingerInfo = null;
482 pEnumerator->GetCurrent(pFingerInfo);
484 if (pFingerInfo == null)
489 pFingerInfo->SetStatus(_TOUCH_FOCUS_OUT);
490 pFingerInfo->SetPointId(INVALID_POINT_ID);
491 __pFingerInfoMap->SetValue(pFingerInfo->GetDeviceId(), pFingerInfo);
500 _MultiFingerInfo::SetFingerInfo(unsigned long pointId, const Point& point, const Point& screenPoint, const _TouchStatus status)
502 _FingerInfo* pFingerInfo = null;
504 IListT<_FingerInfo*>* pFingerList = __pFingerInfoMap->GetValuesN();
507 IEnumeratorT<_FingerInfo*>* pEnumerator = pFingerList->GetEnumeratorN();
510 while(pEnumerator->MoveNext() == E_SUCCESS)
512 pEnumerator->GetCurrent(pFingerInfo);
513 if (pFingerInfo == null)
518 if (pFingerInfo->GetPointId() == pointId)
529 SysTryReturnResult(NID_UI, pFingerInfo, E_INVALID_CONDITION, "[E_INVALID_CONDITION] pFingerInfo is null");
534 pFingerInfo->SetStartPoint(screenPoint);
535 pFingerInfo->SetPoint(screenPoint, point);
536 pFingerInfo->SetStatus(_TOUCH_PRESSED);
537 pFingerInfo->SetMoveReady(false);
542 if (pFingerInfo->GetStatus() == _TOUCH_RELEASED || pFingerInfo->GetStatus() == _TOUCH_FOCUS_OUT || pFingerInfo->GetPoint() == point)
544 return E_INVALID_CONDITION;
547 pFingerInfo->SetPoint(screenPoint, point);
548 pFingerInfo->SetStatus(_TOUCH_MOVED);
551 case _TOUCH_RELEASED:
552 if (pFingerInfo->GetStatus() == _TOUCH_RELEASED || pFingerInfo->GetStatus() == _TOUCH_FOCUS_OUT)
554 SysLog(NID_UI,"OnTouchReleased without OnTouchPressed");
556 return E_INVALID_CONDITION;
559 pFingerInfo->SetPoint(screenPoint, point);
560 pFingerInfo->SetStatus(_TOUCH_RELEASED);
561 pFingerInfo->SetMoveReady(false);
564 if (__pointCount == 0 )
566 __currentPointId = 0;
567 __generatedPointId = 0;
575 __pFingerInfoMap->SetValue(pFingerInfo->GetDeviceId(), pFingerInfo);
579 _TouchManager* _TouchManager::__pInstance = null;
581 _TouchManager::_TouchManager(void)
582 : __pMultiFingerInfo(null)
583 , __touchCanceled(false)
584 , __touchAllowed(true)
585 , __pTouchEventListener(null)
586 , __captureAllowOutOfBounds(false)
587 , __isSendingDelayedEvent(true)
588 , __touchCanceledOnGestureSuccess(false)
592 result r = E_SUCCESS;
593 _UiEventManager* pEventManager = null;
595 __pMultiFingerInfo = new (std::nothrow) _MultiFingerInfo;
596 SysTryReturnVoidResult(NID_UI, __pMultiFingerInfo, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
598 __pTouchEventListener = new (std::nothrow) _TouchEventListener;
599 SysTryCatch(NID_UI, __pTouchEventListener, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
601 pEventManager = _UiEventManager::GetInstance();
602 SysTryCatch(NID_UI, pEventManager, , E_SYSTEM, "[E_SYSTEM] _UiEventManager does not exist.");
604 r = pEventManager->AddTouchEventListener(*__pTouchEventListener);
605 SysTryCatch(NID_UI, r == E_SUCCESS, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
610 delete __pMultiFingerInfo;
611 __pMultiFingerInfo = null;
613 if (__pTouchEventListener)
615 delete __pTouchEventListener;
616 __pTouchEventListener = null;
620 _TouchManager::~_TouchManager(void)
622 delete __pMultiFingerInfo;
623 __pMultiFingerInfo = null;
625 _UiEventManager* pEventManager = _UiEventManager::GetInstance();
628 pEventManager->RemoveTouchEventListener(*__pTouchEventListener);
631 delete __pTouchEventListener;
632 __pTouchEventListener = null;
636 _TouchManager::Initialize(void)
638 static pthread_once_t once_block = PTHREAD_ONCE_INIT;
640 if (__pInstance == null)
642 pthread_once(&once_block, InitializeInstance);
648 _TouchManager::GetInstance(void)
654 _TouchManager::InitializeInstance(void)
658 if (__pInstance == null)
660 __pInstance = new (std::nothrow) _TouchManager;
661 SysTryReturnVoidResult(NID_UI, __pInstance != null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
666 _TouchManager::ReleaseInstance(void)
676 _TouchManager::AddPoint(unsigned long pointId, const Point& point, _TouchStatus status)
678 Point screenPos(point.x, point.y);
679 Point controlPos(0, 0);
681 _Control* pControl = GetTouchControlSource();
684 controlPos.x = pControl->GetAbsoluteBounds().x;
685 controlPos.y = pControl->GetAbsoluteBounds().y;
687 screenPos.x += controlPos.x;
688 screenPos.y += controlPos.y;
691 return __pMultiFingerInfo->SetFingerInfo(pointId, point, screenPos, status);
695 _TouchManager::GetPointId(unsigned long deviceId) const
697 return __pMultiFingerInfo->GetPointId(deviceId);
700 Tizen::Graphics::Point
701 _TouchManager::GetStartPoint(unsigned long pointId) const
703 return __pMultiFingerInfo->GetStartPoint(pointId);
707 _TouchManager::GetCurrentPointId(void) const
709 return __pMultiFingerInfo->GetCurrentPointId();
713 _TouchManager::GeneratePointId(const unsigned long deviceId) const
715 return __pMultiFingerInfo->GeneratePointId(deviceId);
719 _TouchManager::GetPosition(unsigned long id) const
721 return __pMultiFingerInfo->GetPosition(id);
725 _TouchManager::GetScreenPoint(unsigned long id) const
727 return __pMultiFingerInfo->GetScreenPoint(id);
731 _TouchManager::GetTouchStatus(const unsigned long id) const
733 return (static_cast <TouchStatus>(__pMultiFingerInfo->GetStatus(id)));
737 _TouchManager::GetPointCount(void) const
739 return __pMultiFingerInfo->GetPointCount();
743 _TouchManager::SetTouchControlSource(const _Control& source)
745 __touchControlHandle = source.GetHandle();
749 _TouchManager::GetTouchControlSource(void) const
751 _ControlManager* pControlManager = _ControlManager::GetInstance();
752 SysTryReturn(NID_UI, pControlManager, null, E_SYSTEM, "[E_SYSTEM] _ControlManager does not exist.");
754 return pControlManager->GetObject(__touchControlHandle);
758 _TouchManager::SetFocusedControlSource(const _Control& source)
760 __focusedControlHandle = source.GetHandle();
764 _TouchManager::GetFocusedControlSource(void) const
766 _ControlManager* pControlManager = _ControlManager::GetInstance();
767 SysTryReturn(NID_UI, pControlManager, null, E_SYSTEM, "[E_SYSTEM] _ControlManager does not exist.");
769 return pControlManager->GetObject(__focusedControlHandle);
773 _TouchManager::SendEvent(_Control* pControl, const _TouchInfo& touchInfo)
775 SysTryReturnResult(NID_UI, pControl, E_INVALID_ARG, "[E_INVALID_ARG] pControl is null.");
777 _UiTouchEvent event(pControl->GetHandle(), touchInfo, _UI_EVENT_ROUTE_DIRECT);
779 _Control* pTouchedControl = GetTouchControlSource();
782 event.SetOriginalDestination(*pTouchedControl);
785 _UiEventManager* pEventManager = _UiEventManager::GetInstance();
786 SysTryReturnResult(NID_UI, pEventManager, E_SYSTEM, "[E_SYSTEM] _UiEventManager does not exist.");
788 __isSendingDelayedEvent = false;
789 result r = pEventManager->SendEvent(event);
790 __isSendingDelayedEvent = true;
796 _TouchManager::SetTouchCanceled(bool canceled, bool onlyTouchEvent)
798 __touchCanceledOnGestureSuccess = onlyTouchEvent;
802 if (GetTouchControlSource() && GetTouchControlSource()->IsAttachedToMainTree())
804 Point currentPoint(0, 0);
805 _TouchInfo touchInfo;
807 if (GetTouchControlSource()->IsMultiTouchEnabled())
809 currentPoint.x = GetScreenPoint(GetCurrentPointId()).x;
810 currentPoint.y = GetScreenPoint(GetCurrentPointId()).y;
812 _TouchInfo multiTouchInfo(GetCurrentPointId(), _TOUCH_CANCELED, currentPoint, false, 0);
813 touchInfo = multiTouchInfo;
817 currentPoint.x = GetScreenPoint(SINGLE_POINT_ID).x;
818 currentPoint.y = GetScreenPoint(SINGLE_POINT_ID).y;
820 _TouchInfo singleTouchInfo(SINGLE_POINT_ID, _TOUCH_CANCELED, currentPoint, false, 0);
821 touchInfo = singleTouchInfo;
824 _UiTouchEvent event(GetTouchControlSource()->GetHandle(), touchInfo);
826 _UiEventManager* pEventManager = _UiEventManager::GetInstance();
827 SysTryReturnVoidResult(NID_UI, pEventManager, E_SYSTEM, "[E_SYSTEM] _UiEventManager does not exist.");
829 pEventManager->SendEvent(event);
831 SetLastResult(E_SUCCESS);
836 _TouchManager::IsTouchCanceledOnGestureSuccess(void) const
838 return __touchCanceledOnGestureSuccess;
842 _TouchManager::SetTouchCanceledOnGestureSuccess(bool cancel)
844 __touchCanceledOnGestureSuccess = cancel;
848 _TouchManager::SetTouchAllowed(bool allowed)
850 __touchAllowed = allowed;
854 _TouchManager::IsTouchAllowed(void)
856 return __touchAllowed;
860 _TouchManager::IsInTouchMoveAllowanceBounds(const _Control& source, const _TouchInfo& touchInfo)
862 IListT<_FingerInfo*>* pFingerInfoList = GetMultiFingerInfoListN();
863 SysTryReturn(NID_UI, pFingerInfoList, false, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
865 const int count = pFingerInfoList->GetCount();
867 for (int i = 0; i < count; i++)
869 _FingerInfo* pFingerInfo = null;
870 pFingerInfoList->GetAt(i, pFingerInfo);
871 if (pFingerInfo == null)
876 if (pFingerInfo->GetPointId() == touchInfo.GetPointId())
878 if (pFingerInfo->GetMoveReady() == true)
880 delete pFingerInfoList;
881 pFingerInfoList = null;
885 Point tmpPoint = GetStartPoint(touchInfo.GetPointId());
886 Rectangle absBounds = source.GetAbsoluteBounds();
888 Point startPoint(tmpPoint.x - absBounds.x, tmpPoint.y - absBounds.y);
889 Point currentPoint = touchInfo.GetCurrentPosition();
891 //SysLog(NID_UI, "[Touch Test] tmpPoint(%d, %d) absBounds(%d, %d) startPoint(%d, %d) currentPoint(%d, %d)",
892 // tmpPoint.x, tmpPoint.y, absBounds.x, absBounds.y, startPoint.x, startPoint.y, currentPoint.x, currentPoint.y);
894 int distance = int(hypot(abs(startPoint.x-currentPoint.x), abs(startPoint.y-currentPoint.y)));
895 int touchMoveAllowanceBounds = 0;
897 int allowanceBoundsValue[] = {3, 25, 50};
898 touchMoveAllowanceBounds = allowanceBoundsValue[source.GetTouchMoveAllowance()];
900 if (distance >= touchMoveAllowanceBounds)
902 pFingerInfo->SetMoveReady(true);
904 delete pFingerInfoList;
910 delete pFingerInfoList;
915 _TouchManager::SetCapturedControl(const _Control* pControl, bool allowOutOfBounds)
919 __capturedControlHandle = pControl->GetHandle();
923 __capturedControlHandle = _ControlHandle();
926 __captureAllowOutOfBounds = allowOutOfBounds;
930 _TouchManager::GetCapturedControl(void) const
932 _ControlManager* pControlManager = _ControlManager::GetInstance();
933 SysTryReturn(NID_UI, pControlManager, null, E_SYSTEM, "[E_SYSTEM] _ControlManager does not exist.");
935 return pControlManager->GetObject(__capturedControlHandle);
939 _TouchManager::IsCaptureAllowedOutOfBounds(void) const
941 return __captureAllowOutOfBounds;
945 _TouchManager::ResetTouchInfo(void)
947 __pMultiFingerInfo->ResetFingerInfo();
949 _Control* pControl = GetTouchControlSource();
952 IListT <_TouchGestureDetector*>* pGestureList = pControl->GetGestureDetectorList();
956 IEnumeratorT<_TouchGestureDetector*>* pEnumerator = pGestureList->GetEnumeratorN();
960 while(pEnumerator->MoveNext() == E_SUCCESS)
962 _TouchGestureDetector* pGestureDetector = null;
963 pEnumerator->GetCurrent(pGestureDetector);
965 if (pGestureDetector == null)
970 pGestureDetector->SetDetectorState(_TOUCH_GESTURE_DETECTOR_STATE_CANCELED);
971 pGestureDetector->ProcessCoreListener(*pGestureDetector);
978 __touchAllowed = false;
981 IListT<_FingerInfo*>*
982 _TouchManager::GetMultiFingerInfoListN(void) const
984 return __pMultiFingerInfo->GetMultiFingerListN();
988 _TouchManager::IsSendingDelayedEvent(void) const
990 return __isSendingDelayedEvent;