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; }
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); }
void MenuItem::ccTouchEnded(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent) { endTouch(pTouch); }