void QLeapEventListener::onFrame(const Controller & controller) { const Frame frame = controller.frame(); // Get gestures const GestureList gestures = frame.gestures(); for (int g = 0; g < gestures.count(); ++g) { Gesture gesture = gestures[g]; switch (gesture.type()) { case Gesture::TYPE_CIRCLE: { CircleGesture circle = gesture; std::string clockwiseness; if (circle.pointable().direction().angleTo(circle.normal()) <= PI/4) { clockwiseness = "clockwise"; } else { clockwiseness = "counterclockwise"; } // Calculate angle swept since last frame float sweptAngle = 0; if (circle.state() != Gesture::STATE_START) { CircleGesture previousUpdate = CircleGesture(controller.frame(1).gesture(circle.id())); sweptAngle = (circle.progress() - previousUpdate.progress()) * 2 * PI; } std::cout << "Circle id: " << gesture.id() << ", state: " << gesture.state() << ", progress: " << circle.progress() << ", radius: " << circle.radius() << ", angle " << sweptAngle * RAD_TO_DEG << ", " << clockwiseness << std::endl; break; } case Gesture::TYPE_SWIPE: { SwipeGesture swipe = gesture; std::cout << "Swipe id: " << gesture.id() << ", state: " << gesture.state() << ", direction: " << swipe.direction() << ", speed: " << swipe.speed() << std::endl; onSwipe(swipe); break; } case Gesture::TYPE_KEY_TAP: { KeyTapGesture tap = gesture; std::cout << "Key Tap id: " << gesture.id() << ", state: " << gesture.state() << ", position: " << tap.position() << ", direction: " << tap.direction()<< std::endl; break; } case Gesture::TYPE_SCREEN_TAP: { ScreenTapGesture screentap = gesture; std::cout << "Screen Tap id: " << gesture.id() << ", state: " << gesture.state() << ", position: " << screentap.position() << ", direction: " << screentap.direction()<< std::endl; break; } default: std::cout << "Unknown gesture type." << std::endl; break; } } }
bool GalleryScroll::init(const ImageCallback &cb, const std::vector<std::string> &vec, size_t selected) { if (!Node::init()) { return false; } _imageCallback = cb; _overscrollTop = construct<Overscroll>(Overscroll::Top); _overscrollTop->setColor(material::Color::Grey_500); addChild(_overscrollTop, maxOf<int>() - 2); _overscrollBottom = construct<Overscroll>(Overscroll::Bottom); _overscrollBottom->setColor(material::Color::Grey_500); addChild(_overscrollBottom, maxOf<int>() - 2); _overscrollLeft = construct<Overscroll>(Overscroll::Left); _overscrollLeft->setColor(material::Color::Grey_500); addChild(_overscrollLeft, maxOf<int>() - 2); _overscrollRight = construct<Overscroll>(Overscroll::Right); _overscrollRight->setColor(material::Color::Grey_500); addChild(_overscrollRight, maxOf<int>() - 2); auto l = Rc<gesture::Listener>::create(); l->setTouchFilter([this] (const Vec2 &loc, const gesture::Listener::DefaultTouchFilter &f) { return f(loc); }); l->setTapCallback([this] (gesture::Event ev, const gesture::Tap &t) { if (_actionCallback) { _actionCallback(t.count==1?Tap:DoubleTap); } return onTap(t.location(), t.count); }); l->setSwipeCallback([this] (gesture::Event ev, const gesture::Swipe &s) { auto density = screen::density(); if (ev == stappler::gesture::Event::Began) { if (_actionCallback) { _actionCallback(Swipe); } return onSwipeBegin(s.location()); } else if (ev == stappler::gesture::Event::Activated) { return onSwipe(cocos2d::Vec2(s.delta.x / density, s.delta.y / density)); } else if (ev == stappler::gesture::Event::Ended) { return onSwipeEnd(cocos2d::Vec2(s.velocity.x / density, s.velocity.y / density)); } return true; }); l->setPinchCallback([this] (stappler::gesture::Event ev, const stappler::gesture::Pinch &p) { if (ev == stappler::gesture::Event::Began) { if (_actionCallback) { _actionCallback(Pinch); } _hasPinch = true; } else if (ev == stappler::gesture::Event::Activated) { _hasPinch = false; return onPinch(p.location(), p.scale, p.velocity, false); } else if (ev == stappler::gesture::Event::Ended || ev == stappler::gesture::Event::Cancelled) { _hasPinch = false; return onPinch(p.location(), p.scale, p.velocity, true); } return true; }); addComponent(l); _gestureListener = l; _images = vec; reset(selected); return true; }