#ifndef _PERLOIS_MOUSELISTENER_H_
#define _PERLOIS_MOUSELISTENER_H_
#include "perlOIS.h"
#include <map>
#include <string>
using namespace std;
// this class implements OIS::MouseListener,
// so it can be passed to Mouse->setEventCallback,
// but it allows implementing the callbacks from Perl
class PerlOISMouseListener : public OIS::MouseListener
{
public:
PerlOISMouseListener();
~PerlOISMouseListener();
// these are used in xs/Mouseboard.xs setEventCallback
void setPerlObject(SV *pobj);
// MouseListener interface
bool mouseMoved(const OIS::MouseEvent &evt);
bool mousePressed(const OIS::MouseEvent &evt, OIS::MouseButtonID id);
bool mouseReleased(const OIS::MouseEvent &evt, OIS::MouseButtonID id);
private:
bool perlCallbackCan(string const &cbmeth);
void setCans();
bool callPerlCallback(string const &cbmeth, const OIS::MouseEvent &evt, int id);
SV * mPerlObj;
typedef map<string, bool> CanMap;
CanMap mCanMap;
};
#endif /* define _PERLOIS_MOUSELISTENER_H_ */