return pControlManager->GetObject(controlHandle);
}
+ result AddParentControl(int pointId, const _ControlHandle& controlHandle)
+ {
+ bool exist = false;
+ result r = E_SUCCESS;
+
+ __pParentTargetMap->ContainsKey(pointId, exist);
+
+ if (exist)
+ {
+ r = __pParentTargetMap->Remove(pointId);
+ SysTryReturnResult(NID_UI, r == E_SUCCESS, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
+ }
+
+ r = __pParentTargetMap->Add(pointId, controlHandle);
+ SysTryReturnResult(NID_UI, r == E_SUCCESS, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
+
+ return r;
+ }
+
+ _Control* GetParentControl(int pointId)
+ {
+ SysTryReturn(NID_UI, __pParentTargetMap, null, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
+
+ _ControlHandle controlHandle;
+
+ __pParentTargetMap->GetValue(pointId, controlHandle);
+
+ _ControlManager* pControlManager = _ControlManager::GetInstance();
+ result r = GetLastResult();
+ SysTryReturn(NID_UI, pControlManager, null, r, "[%s] Propagating.", GetErrorMessage(r));
+
+ return pControlManager->GetObject(controlHandle);
+ }
+
private:
_TouchEventManager(void)
{
+ result r = E_SUCCESS;
unique_ptr<HashMapT<int, _ControlHandle> > pTargetMap(new (std::nothrow) HashMapT<int, _ControlHandle>);
SysTryReturnVoidResult(NID_UI, pTargetMap, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory is insufficient.");
- result r = pTargetMap->Construct();
+ r = pTargetMap->Construct();
SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
__pTargetMap = move(pTargetMap);
+ unique_ptr<HashMapT<int, _ControlHandle> > pParentTargetMap(new (std::nothrow) HashMapT<int, _ControlHandle>);
+ SysTryReturnVoidResult(NID_UI, pParentTargetMap, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory is insufficient.");
+
+ r = pParentTargetMap->Construct();
+ SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
+
+ __pParentTargetMap = move(pParentTargetMap);
+
SetLastResult(E_SUCCESS);
}
private:
static _TouchEventManager* __pInstance;
unique_ptr<HashMapT<int, _ControlHandle> > __pTargetMap;
+ unique_ptr<HashMapT<int, _ControlHandle> > __pParentTargetMap;
};
_TouchEventManager* _TouchEventManager::__pInstance = null;
{
r = __pTouchEventManager->AddControl(pointId, pControl->GetHandle());
SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
+
+ _Control* pParent = pControl->GetParent();
+ if (pParent)
+ {
+ r = __pTouchEventManager->AddParentControl(pointId, pParent->GetHandle());
+ SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
+ }
}
}
else
{
if (pControl->GetChangingEventTarget() == true && pControl->GetVisibleState() == true)
{
- _Control* pTouchedControl = __pTouchEventManager->GetControl(pointId);
- if (pTouchedControl && pTouchedControl->GetParent() == pControl->GetParent())
+ _Control* pTouchedParentControl = __pTouchEventManager->GetParentControl(__touchInfo.GetPointId());
+ if (pTouchedParentControl && pTouchedParentControl == pControl->GetParent())
{
r = __pTouchEventManager->AddControl(pointId, pControl->GetHandle());
SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, E_SYSTEM, "[E_SYSTEM] A system error occurred.");