Example #1
0
bool DialView::onTouchEvent(MotionEvent *event) {
    
    if (!isEnabled() || (!inCircle((int) event->getX(), (int) event->getY()) && mTouchState == TOUCH_STATE_RESTING)) {
        return false;
    }
    
    switch (event->getAction()) {
            
        case MotionEvent::ACTION_DOWN:
        {
            startTouch(event);
            break;
        }
            
        case MotionEvent::ACTION_MOVE:
        {
            if (mTouchState == TOUCH_STATE_CLICK) {
                startRotationIfNeeded(event);
            }
            
            if (mTouchState == TOUCH_STATE_ROTATE) {
                mVelocityTracker->addMovement(event);
                rotateChart(event->getX(), event->getY());
            }
            
            break;
        }
            
        case MotionEvent::ACTION_UP:
        {
            
            float velocity = 0;
            
            if (mTouchState == TOUCH_STATE_ROTATE) {
                
                mVelocityTracker->addMovement(event);
                mVelocityTracker->computeCurrentVelocity(PIXELS_PER_SECOND);
                
                velocity = calculateVelocity();
            }
            
            endTouch(velocity);
            
            break;
        }
            
        default:
        {
            endTouch(0);
            break;
        }
    }
    
    return true;
}
Example #2
0
void TouchManager::dispatchTouchUp(int id, const ofVec2f &p)
{
	// check if this touch exists
	map<int, TouchEvent*>::iterator eventIt = touches.find(id);
	if (eventIt == touches.end()) {
		ofLogWarning("TouchManager", "received touchUp for id (%d) without touchDown. ignoring this touch.", id);
		return;
	}

	// update touch info
	TouchEvent* event = eventIt->second;
	event->prevPosition = event->position;
	event->prevVelocity = event->velocity;
	event->prevTimestamp = event->timestamp;
	event->position = p;
	event->timestamp = ofGetSystemTimeMicros();

	// there is a problem with calculating the velocity when delta time is too small
	// sometimes we get events with delta time of 0 or 1 ms
	if (event->timestamp - event->prevTimestamp > 5000) {
		event->velocity = (p - event->prevPosition)*1000000 / (event->timestamp-event->prevTimestamp);
		event->velocitySmoothed += (event->velocity-event->velocitySmoothed)*velocitySmoothCoeff;
	}

	Node* node = getComponentUnder(p);
	if (node == NULL) {
		ofLogError("TouchManager","could not find node for touchUp");
		endTouch(id);
		return;
	}

	if (event->receiver == NULL) {
		ofLogNotice("TouchManager","this touch does not belong to any component");
		endTouch(id);
		return;
	}

    event->type = TouchEvent::TYPE_UP;
	event->receiver->touchUp(id, event);

	ofNotifyEvent(eventEveryTouchUp, *event, this);

	endTouch(id);
}
Example #3
0
void MenuItem::ccTouchEnded(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent) {
    endTouch(pTouch);
}