2 // Open Service Platform
3 // Copyright (c) 2012-2013 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 * @brief This is the implementation file for Touch class
22 * This file contains the implementation of Touch class.
26 #include <FBaseResult.h>
27 #include <FBaseString.h>
28 #include <FUiControl.h>
30 #include "FUi_CoordinateSystemUtils.h"
31 #include "FUi_TouchManager.h"
32 #include "FUi_ControlImpl.h"
33 #include "FUi_TouchEventArg.h"
34 #include "FUi_UiTouchEvent.h"
36 using namespace Tizen::Base;
37 using namespace Tizen::Base::Collection;
38 using namespace Tizen::Graphics;
39 using namespace Tizen::Ui;
44 GetMultiFingerInfoListN(const Control* pControl)
46 _TouchManager* pTouchManager = _TouchManager::GetInstance();
47 SysTryReturn(NID_UI, pTouchManager, null, E_SYSTEM, "[E_SYSTEM] System error occurred.");
49 Point controlPos(0, 0);
52 const _ControlImpl* pImpl = _ControlImpl::GetInstance(*pControl);
55 controlPos.x = pImpl->GetAbsoluteBounds().x;
56 controlPos.y = pImpl->GetAbsoluteBounds().y;
60 LinkedList* pReturnList = new (std::nothrow) LinkedList;
61 SysTryReturn(NID_UI, pReturnList != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
63 Tizen::Base::Collection::IListT<_FingerInfo*>* pFingerInfoList = pTouchManager->GetMultiFingerInfoListN();
64 SysTryCatch(NID_UI, pFingerInfoList, , E_SYSTEM, "[E_SYSTEM] System error occurred.");
66 for (int i = 0; i < pFingerInfoList->GetCount(); i++)
68 _FingerInfo* pFingerInfo = null;
69 pFingerInfoList->GetAt(i, pFingerInfo);
71 if (pFingerInfo == null)
76 TouchInfo* pTouchInfo = new (std::nothrow) TouchInfo;
77 SysTryCatch(NID_UI, pTouchInfo, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
79 if (pFingerInfo->GetStatus() == _TOUCH_PRESSED ||pFingerInfo->GetStatus() == _TOUCH_MOVED )
81 pTouchInfo->id = pFingerInfo->GetPointId();
82 pTouchInfo->position.x = pFingerInfo->GetScreenPoint().x - controlPos.x;
83 pTouchInfo->position.y = pFingerInfo->GetScreenPoint().y - controlPos.y;
84 pTouchInfo->status = TOUCH_PRESSED;
86 pReturnList->Add(*pTouchInfo);
90 delete pFingerInfoList;
91 pFingerInfoList = null;
98 pReturnList->RemoveAll(true);
105 delete pFingerInfoList;
106 pFingerInfoList = null;
113 namespace Tizen { namespace Ui
125 Touch::GetPosition(void) const
127 Point errorPoint(-1, -1);
129 _TouchManager* pTouchManager = _TouchManager::GetInstance();
130 SysTryReturn(NID_UI, pTouchManager, errorPoint, E_SYSTEM, "[E_SYSTEM] System error occurred.");
132 return _CoordinateSystemUtils::ConvertToInteger(pTouchManager->GetScreenPoint(pTouchManager->GetCurrentPointId()));
136 Touch::GetPosition(unsigned long id) const
138 Point errorPoint(-1, -1);
140 _TouchManager* pTouchManager = _TouchManager::GetInstance();
141 SysTryReturn(NID_UI, pTouchManager, errorPoint, E_SYSTEM, "[E_SYSTEM] System error occurred.");
143 return _CoordinateSystemUtils::ConvertToInteger(pTouchManager->GetScreenPoint(id));
147 Touch::GetPosition(const Control& control) const
149 Point errorPoint(-1, -1);
151 _TouchManager* pTouchManager = _TouchManager::GetInstance();
152 SysTryReturn(NID_UI, pTouchManager, errorPoint, E_SYSTEM, "[E_SYSTEM] System error occurred.");
154 const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(control);
160 Point controlPos(pControlImpl->GetAbsoluteBounds().x, pControlImpl->GetAbsoluteBounds().y);
161 Point point(pTouchManager->GetScreenPoint(pTouchManager->GetCurrentPointId()).x, pTouchManager->GetScreenPoint(pTouchManager->GetCurrentPointId()).y);
163 point.x -= controlPos.x;
164 point.y -= controlPos.y;
170 Touch::GetPosition(const Control& control, unsigned long id) const
172 Point errorPoint(-1, -1);
174 _TouchManager* pTouchManager = _TouchManager::GetInstance();
175 SysTryReturn(NID_UI, pTouchManager, errorPoint, E_SYSTEM, "[E_SYSTEM] System error occurred.");
177 const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(control);
183 Point controlPos(pControlImpl->GetAbsoluteBounds().x, pControlImpl->GetAbsoluteBounds().y);
184 Point point(pTouchManager->GetScreenPoint(id).x, pTouchManager->GetScreenPoint(id).y);
186 point.x -= controlPos.x;
187 point.y -= controlPos.y;
193 Touch::SetMultipointEnabled(const Control& control, bool enable)
195 _ControlImpl* pControlImpl = const_cast<_ControlImpl*>(_ControlImpl::GetInstance(control));
196 SysTryReturnResult(NID_UI, pControlImpl, E_SYSTEM, "[E_SYSTEM] System error occurred.");
198 pControlImpl->SetMultiTouchEnabled(enable);
205 Touch::IsMultipointEnabled(const Control& control) const
207 const _ControlImpl* pControlImpl = _ControlImpl::GetInstance(control);
208 SysTryReturn(NID_UI, pControlImpl, false, E_SYSTEM, "[E_SYSTEM] System error occurred.");
210 return pControlImpl->IsMultiTouchEnabled();
215 Touch::GetTouchStatus(unsigned long id) const
217 _TouchManager* pTouchManager = _TouchManager::GetInstance();
218 SysTryReturn(NID_UI, pTouchManager, TOUCH_PRESSED, E_SYSTEM, "[E_SYSTEM] System error occurred.");
220 return pTouchManager->GetTouchStatus(id);
224 Touch::GetTouchInfoListN(void) const
226 return GetMultiFingerInfoListN(null);
230 Touch::GetTouchInfoListN(const Control& control) const
232 return GetMultiFingerInfoListN(&control);
236 Touch::GetPointCount(void) const
238 _TouchManager* pTouchManager = _TouchManager::GetInstance();
239 SysTryReturn(NID_UI, pTouchManager, 0, E_SYSTEM, "[E_SYSTEM] System error occurred.");
241 return pTouchManager->GetPointCount();
245 Touch::GetPointId(int index) const
247 _TouchManager* pTouchManager = _TouchManager::GetInstance();
248 SysTryReturn(NID_UI, pTouchManager, 0, E_SYSTEM, "[E_SYSTEM] System error occurred.");
250 return pTouchManager->GetPointId(index);