void CControl::DispatchEvent( EEventType type , float x, float y, int delta ) { switch ( type ) { case eET_EVENT_TOUCH_BEGAN: OnTouchBegin( x, y ); break; case eET_EVENT_TOUCH_ENDED: OnTouchEnded( x, y ); break; case eET_EVENT_TOUCH_CANCELLED: OnTouchCancelled( x, y ); break; case eET_EVENT_TOUCH_DOUBLE_TAPPED: OnTouchDoubleTapped( x, y ); break; case eET_EVENT_TOUCH_SINGLE_TAPPED: OnTouchSingleTapped( x, y ); break; case eET_EVENT_TOUCH_SCORLLED: OnTouchScorll( x, y, delta ); break; case eET_EVENT_TOUCH_PINCHED: OnTouchSingleTapped( x, y ); break; default: BEATS_ASSERT( false, _T("unknow event type!!") ); break; } }
bool CControl::HandleTouchEvent( CTouchEvent* event ) { bool bRet = false; if ( m_bResiveTouchEvent ) { const CVec2& pos = event->GetTouchPoint(); if ( event->GetType() == eET_EVENT_TOUCH_MOVED ) { m_bTouchInRect = HitTest(pos.x, pos.y); if ( m_bTouchInRect ) { OnTouchMove( pos.x, pos.y ); bRet = true; } else { if ( m_bClick ) { StopClickAnimation(); } } } else { if( event->GetType() == eET_EVENT_TOUCH_ENDED && m_bClick ) { OnTouchEnded( pos.x, pos.y ); } else { bRet = HitTest(pos.x, pos.y); if(bRet) { if ( m_bDispatchEventToParent ) { CNode* pParent = GetParentNode(); bRet = pParent && pParent->GetType() == eNT_NodeGUI; if (bRet) { down_cast<CControl*>(pParent)->DispatchEvent( event->GetType(), pos.x, pos.y, event->GetDelta() ); } } else { DispatchEvent( event->GetType(), pos.x, pos.y, event->GetDelta() ); } } } } } return bRet; }
void CControl::OnTouchCancelled( float x, float y ) { OnTouchEnded( x, y ); }
FReply UUserWidget::NativeOnTouchEnded( const FGeometry& InGeometry, const FPointerEvent& InGestureEvent ) { return OnTouchEnded( InGeometry, InGestureEvent ).NativeReply; }