#ifndef FGEVENTHANDLER_H #define FGEVENTHANDLER_H 1 #include #include #include #include #include #include "fg_os.hxx" namespace flightgear { class FGStatsHandler : public osgViewer::StatsHandler { public: FGStatsHandler() { #if (SG_OSG_VERSION >= 30000) // Adjust font type/size for >=OSG3. // OSG defaults aren't working/available for FG. _font = "Fonts/helvetica_medium.txf"; _characterSize = 12.0f; #endif } }; class FGEventHandler : public osgGA::GUIEventHandler { public: FGEventHandler(); virtual ~FGEventHandler() {} virtual const char* className() const {return "FGEventHandler"; } #if 0 virtual void init(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& us); #endif virtual bool handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& us); void setIdleHandler(fgIdleHandler idleHandler) { this->idleHandler = idleHandler; } fgIdleHandler getIdleHandler() const { return idleHandler; } void setKeyHandler(fgKeyHandler keyHandler) { this->keyHandler = keyHandler; } fgKeyHandler getKeyHandler() const { return keyHandler; } void setMouseClickHandler(fgMouseClickHandler mouseClickHandler) { this->mouseClickHandler = mouseClickHandler; } fgMouseClickHandler getMouseClickHandler() { return mouseClickHandler; } void setMouseMotionHandler(fgMouseMotionHandler mouseMotionHandler) { this->mouseMotionHandler = mouseMotionHandler; } fgMouseMotionHandler getMouseMotionHandler() { return mouseMotionHandler; } int getCurrentModifiers() const { return currentModifiers; } void setMouseWarped() { mouseWarped = true; } /** Whether or not resizing is supported. It might not be when * using multiple displays. */ bool getResizable() { return resizable; } void setResizable(bool _resizable) { resizable = _resizable; } protected: osg::ref_ptr _node; fgIdleHandler idleHandler; fgKeyHandler keyHandler; fgMouseClickHandler mouseClickHandler; fgMouseMotionHandler mouseMotionHandler; osg::ref_ptr statsHandler; osg::ref_ptr statsEvent; int statsType; int currentModifiers; std::map numlockKeyMap; std::map noNumlockKeyMap; void handleKey(const osgGA::GUIEventAdapter& ea, int& key, int& modifiers); bool resizable; bool mouseWarped; // workaround for osgViewer double scroll events bool scrollButtonPressed; int release_keys[128]; void handleStats(osgGA::GUIActionAdapter& us); }; void eventToWindowCoords(const osgGA::GUIEventAdapter* ea, double& x, double& y); void eventToWindowCoordsYDown(const osgGA::GUIEventAdapter* ea, double& x, double& y); } #endif