Example #1
0
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;
}