CWidgetTouchModel CWidget::executeTouchBeganHandler(CCTouch* pTouch) { m_bTouchInterrupt = false; if( m_pTouchBeganListener && m_pTouchBeganHandler ) { CWidgetTouchModel eUserTouchModel = (m_pTouchBeganListener->*m_pTouchBeganHandler)(m_pThisObject, pTouch); if( eUserTouchModel == eWidgetTouchNone ) { return eWidgetTouchNone; } else { this->onTouchBegan(pTouch); return eUserTouchModel; } } #if USING_LUA else if( m_nTouchBeganScriptHandler != 0 ) { CCLuaEngine* pEngine = CCLuaEngine::defaultEngine(); CCLuaStack* pStack = pEngine->getLuaStack(); pStack->pushCCObject(m_pThisObject, "CCObject"); pStack->pushCCObject(pTouch, "CCTouch"); CCArray* pRetArray = new CCArray(); pRetArray->initWithCapacity(1); int nRet = pStack->executeFunctionReturnArray(m_nTouchBeganScriptHandler, 2, 1, pRetArray); CCAssert(pRetArray->count() > 0, "return count = 0"); CCDouble* pIntModel = (CCDouble*) pRetArray->objectAtIndex(0); CWidgetTouchModel eUserTouchModel = (CWidgetTouchModel) ( (int)pIntModel->getValue() ); delete pRetArray; pStack->clean(); if( eUserTouchModel == eWidgetTouchNone ) { return eWidgetTouchNone; } else { this->onTouchBegan(pTouch); return eUserTouchModel; } } #endif return this->onTouchBegan(pTouch); }
void CWidget::executeTouchCancelledHandler(CCTouch* pTouch, float fDuration) { if( m_pTouchCancelledListener && m_pTouchCancelledHandler ) { if( !(m_pTouchCancelledListener->*m_pTouchCancelledHandler)(m_pThisObject, pTouch, fDuration) ) { return; } } #if USING_LUA else if( m_nTouchCancelledScriptHandler != 0 ) { CCLuaEngine* pEngine = CCLuaEngine::defaultEngine(); CCLuaStack* pStack = pEngine->getLuaStack(); pStack->pushCCObject(m_pThisObject, "CCObject"); pStack->pushCCObject(pTouch, "CCTouch"); pStack->pushFloat(fDuration); CCArray* pRetArray = new CCArray(); pRetArray->initWithCapacity(1); int nRet = pStack->executeFunctionReturnArray(m_nTouchCancelledScriptHandler, 3, 1, pRetArray); CCAssert(pRetArray->count() > 0, "return count = 0"); CCBool* pBool = (CCBool*) pRetArray->objectAtIndex(0); bool bContinue = pBool->getValue(); delete pRetArray; pStack->clean(); if(!bContinue) { return; } } #endif this->onTouchCancelled(pTouch, fDuration); return; }