void Menu::swipe() { int margin = -index * 800; for (int i = 0 ; i < nbElements ; ++i) { CvRect rTmp = tileList[i]->getPos(); CvRect sTmp = tileList[index]->getPos(); rTmp.x = 200 + endGestureX - beginGestureX + margin; if (i == index) { tileList[index]->setTilePos(rTmp); if (tileList[index]->getPos().x < 50) { ++index; if (index >= nbElements) index = nbElements - 1; doSwipe(); break; } else if (tileList[index]->getPos().x + tileList[index]->getPos().width > 750) { --index; if (index < 0) index = 0; doSwipe(); break; } } else tileList[i]->setTilePos(rTmp); margin += 800; } }
// handler for pointer release events void AnsiWidget::pointerReleaseEvent(MAEvent &event) { if (_activeButton != NULL && _front == _screens[MENU_SCREEN]) { _activeButton->clicked(event.point.x, event.point.y, false); } else if (_activeButton != NULL && _activeButton->_pressed) { _activeButton->_pressed = false; drawActiveButton(); _activeButton->clicked(event.point.x, event.point.y, false); } else if (_swipeExit) { _swipeExit = false; } else { int maxScroll = (_front->_curY - _front->_height) + (2 * _fontSize); if (_yMove != -1 && maxScroll > 0) { _front->drawInto(); // swipe test - min distance and not max duration int deltaX = _xTouch - event.point.x; int deltaY = _yTouch - event.point.y; int distance = (int) fabs(sqrt(deltaX * deltaX + deltaY * deltaY)); int now = maGetMilliSecondCount(); if (distance >= SWIPE_MIN_DISTANCE && (now - _touchTime) < SWIPE_MAX_DURATION) { bool moveDown = (deltaY >= SWIPE_MIN_DISTANCE); doSwipe(now, moveDown, distance, maxScroll); } else if (_front->_scrollY > maxScroll) { _front->_scrollY = maxScroll; } // ensure the scrollbar is removed _front->_dirty = true; flush(true); _touchTime = 0; } } if (_hoverInput) { int dx = _front->_x; int dy = _front->_y - _front->_scrollY; _hoverInput->drawHover(dx, dy, false); _hoverInput = NULL; } _xTouch = _xMove = -1; _yTouch = _yMove = -1; _activeButton = NULL; _focus = NULL; }