Exemplo n.º 1
0
void ScrollView::handlerScrollEnd()
{
	const auto& _containerSize = m_container->getContentSize();
	m_containerLocation.x = m_container->getPositionX();
	m_containerLocation.y = _contentSize.height - (_containerSize.height + m_container->getPositionY());
	m_isScrolling = false;
	endScroll();
	if (m_endScrollCallfunc)
	{
		m_endScrollCallfunc(this);
	}
}
Exemplo n.º 2
0
void EXZoomController::ccTouchesBegan(CCSet *pTouches, CCEvent *pEvent){
    
    CCSetIterator iter = pTouches->begin();
    for (; iter != pTouches->end(); iter++){
        CCTouch* pTouch = (CCTouch*)(*iter);
        //        CCPoint location = pTouch->getLocation();
        _touchesDic->setObject(pTouch, CCString::createWithFormat("%d",pTouch->getID())->getCString());
        CCLog("touc id %s,",CCString::createWithFormat("%d",pTouch->getID())->getCString());
    }
	
	bool multitouch = _touchesDic->count() > 1;
	
	if (multitouch){
        //reset history so auto scroll doesn't happen
        _timePointStampCounter = 0;
        
		endScroll(_firstTouch);
        
        CCArray* keys = _touchesDic->allKeys();
        CCTouch *touch1 = (CCTouch*)_touchesDic->objectForKey(((CCString*)keys->objectAtIndex(0))->getCString());
		CCTouch *touch2 = (CCTouch*)_touchesDic->objectForKey(((CCString*)keys->objectAtIndex(1))->getCString());
        
		CCPoint pt = touch1->getLocationInView();
		CCPoint pt2 = touch2->getLocationInView();
        
		beginZoom(pt, pt2);
	} else {
        //record the point for determining velocity
        CCArray* keys = _touchesDic->allKeys();
        //        ((CCString*)keys->objectAtIndex(0))->getCString()
        
        _touchesDic->objectForKey(((CCString*)keys->objectAtIndex(0))->getCString());
        
        CCTouch *touch = (CCTouch*)_touchesDic->objectForKey(((CCString*)keys->objectAtIndex(0))->getCString());
        recordScrollPoint(touch);
		beginScroll(_node->convertToNodeSpace(touch->getLocation()));
    }
	
}
Exemplo n.º 3
0
void EXZoomController::ccTouchesEnded(CCSet *pTouches, CCEvent *pEvent){
    bool multitouch = _touchesDic->count() > 1;
	if (multitouch) {
        CCArray* keys = _touchesDic->allKeys();
        CCTouch *touch1 = (CCTouch*)_touchesDic->objectForKey(((CCString*)keys->objectAtIndex(0))->getCString());
		CCTouch *touch2 = (CCTouch*)_touchesDic->objectForKey(((CCString*)keys->objectAtIndex(1))->getCString());
        
		CCPoint pt1 = touch1->getLocationInView();
		CCPoint pt2 = touch2->getLocationInView();
		
		endZoom(pt1, pt2);
		
		//which touch remains?
        //		if (touch == touch2)
        //			beginScroll(_node->convertToNodeSpace(touch1->getLocation()));
        //		else
        beginScroll(_node->convertToNodeSpace(touch2->getLocation()));
	} else {
        CCArray* keys = _touchesDic->allKeys();
        CCTouch *touch = (CCTouch*)_touchesDic->objectForKey(((CCString*)keys->objectAtIndex(0))->getCString());
        recordScrollPoint(touch);
		
        CCPoint pt = _node->convertToNodeSpace(touch->getLocation());
		endScroll(pt);
        
        //handle double-tap zooming
        //        if (zoomOnDoubleTap /**&& [touch tapCount] == 2*/)
        //            handleDoubleTapAt(pt);
	}
	
    CCSetIterator iter = pTouches->begin();
    for (; iter != pTouches->end(); iter++){
        CCTouch* pTouch = (CCTouch*)(*iter);
        _touchesDic->removeObjectForKey(CCString::createWithFormat("%d",pTouch->getID())->getCString());
    }
}
Exemplo n.º 4
0
void HFViewport::onTouchesEnded(const std::vector<Touch*>& pTouches, Event *pEvent)
{
    CC_ASSERT(this->m_TargetNode);
    if( !m_TargetNode )
        return;
    
    if(pTouches.empty()) {
        return;
    }
    m_doubleClicked = false;
    switch(mFingerMap.size())
    {
        case 1:
        {
            if(isInAutoZoom)
            {
                endZoom();
                isInAutoZoom = false;
                mTouchMode = TouchMode_Scroll;
                
            }
            CCTouch* ptouch =getAnyTouchObject(pTouches);
            CCLOG("touchMoved posX:%f, posY:%f", ptouch->getLocation().x, ptouch->getLocation().y);
            
            if (!moveableCheck(ptouch)) {
                CCLOG("skip in touched moved!");
                // this is a single touch action
                if (mTouchDelegate) {
                    auto singleTouch = this->m_TargetNode->convertToNodeSpace(ptouch->getLocation());
                    CCLOG("fire single touch! x:%f,y:%f",singleTouch.x,singleTouch.y);
                    mTouchDelegate->onSingleTouchEnd(singleTouch);
                    mTouchDelegate->onSingleTouchEnd(ptouch);
                    mFingerMap.clear();
                }
                return;
            }
            
            CC_BREAK_IF(this->mTouchMode != TouchMode_Scroll);
            CCTouch* objTouch = dynamic_cast<CCTouch*>(*pTouches.begin());
            CC_ASSERT(objTouch);
            
            CCLOG(" x:%f,  y:%f", objTouch->getLocation().x, objTouch->getLocation().y);

            if (!mForceStopScroll) { 
                endScroll(objTouch);
            }
            mIsScrollBegan = false;
            long time = getNowTime();
            if (time - m_tTouchTime >= 80) {
                m_tScrollDistance = CCPointZero;
            }
            mFingerMap.clear();
        }
            break;
        case 2:{
            CCLOG("end zoom------- end %d, finger(s)", pTouches.size());
            for (auto touchItem: pTouches) {
                auto touchItemP = dynamic_cast<CCTouch*>(touchItem);
                mFingerMap.erase(touchItemP->getID());
            }
            if (mFingerMap.size()) {
                isInAutoZoom = true;
                mTouchMode = TouchMode_Zoom;
                mIsScrollBegan = false;
            }else
            {
                endZoom();
            }
        }
            break;
        default:
            if(isInAutoZoom)
            {
                endZoom();
                isInAutoZoom = false;
            }
            mIsScrollBegan = false;
            break;
    }
    if (pTouches.size() == 0)
    {
        m_bTouchMoved = false;
    }
}