From c448e4d7913e8b50204758468344a251ffa35b30 Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Sun, 5 Mar 2006 20:46:59 +0000 Subject: [PATCH] Began work on making EventVisitor capable of adapting events directly. --- include/osgGA/EventVisitor | 41 ++++++++-- include/osgGA/GUIEventAdapter | 128 ++++++++++++++++++++++--------- include/osgProducer/EventAdapter | 55 ------------- 3 files changed, 124 insertions(+), 100 deletions(-) diff --git a/include/osgGA/EventVisitor b/include/osgGA/EventVisitor index 0eeba411d..7253a94e2 100644 --- a/include/osgGA/EventVisitor +++ b/include/osgGA/EventVisitor @@ -55,19 +55,43 @@ class OSGGA_EXPORT EventVisitor : public osg::NodeVisitor typedef std::list< osg::ref_ptr > EventList; void setEventList(const EventList& events) { _events = events; } - EventList& getEventList() { return _events; } - const EventList& getEventList() const { return _events; } void addEvent(GUIEventAdapter* event); - void removeEvent(GUIEventAdapter* event); + void setEventHandled(bool handled) { _handled = handled; } bool getEventHandled() const { return _handled; } - void setEventHandled(bool handled) { _handled = handled; } + public: + + + /** method for adapting resize events. */ + void eventResize(float Xmin, float Ymin, float Xmax, float Ymax); + /** method for adapting mouse scroll wheel events. */ + void eventMouseScroll(GUIEventAdapter::ScrollingMotion sm); + + /** method for adapting mouse motion events whilst mouse buttons are pressed.*/ + void adaptMouseMotion(float x, float y); + + void adaptButtonPress(float x, float y, unsigned int button); + + void adaptButtonRelease(float x, float y, unsigned int button); + + /** method for adapting keyboard events.*/ + void adaptKeyPress( GUIEventAdapter::KeySymbol key); + + void adaptKeyRelease( GUIEventAdapter::KeySymbol key); + + /** method for adapting frame events, i.e. idle/display callback.*/ + void adaptFrame(double t); + + + + + public: virtual void reset(); @@ -136,9 +160,12 @@ class OSGGA_EXPORT EventVisitor : public osg::NodeVisitor } } - osgGA::GUIActionAdapter* _actionAdapter; - EventList _events; - bool _handled; + osgGA::GUIActionAdapter* _actionAdapter; + + osg::ref_ptr _accumulateEventState; + + EventList _events; + bool _handled; }; diff --git a/include/osgGA/GUIEventAdapter b/include/osgGA/GUIEventAdapter index 390fd51b2..16427e316 100644 --- a/include/osgGA/GUIEventAdapter +++ b/include/osgGA/GUIEventAdapter @@ -225,52 +225,72 @@ public: MODKEY_META = (MODKEY_LEFT_META|MODKEY_RIGHT_META) }; - /** Get the EventType of the GUI event.*/ - virtual EventType getEventType() const = 0; - - /** key pressed, return -1 if inappr opriate for this event. */ - virtual int getKey() const = 0; - - /** button pressed/released, return -1 if inappropriate for this event.*/ - virtual int getButton() const = 0; - - enum MouseYOrientation { Y_INCREASING_UPWARDS, Y_INCREASING_DOWNWARDS }; - void setMouseYOrientation(MouseYOrientation myo) { _mouseYOrientation = myo; } - MouseYOrientation getMouseYOrientation() const { return _mouseYOrientation; } + enum ScrollingMotion + { + SCROLL_UP, + SCROLL_DOWN + }; - /** manimum x mouse position. */ - virtual float getXmin() const = 0; + /** Get the EventType of the GUI event.*/ + void setEventType(EventType eventType) { _eventType = eventType; } - /** maximum x mouse position. */ - virtual float getXmax() const = 0; - - /** minimum y mouse position. */ - virtual float getYmin() const = 0; - - /** maximum y mouse position. */ - virtual float getYmax() const = 0; - - /** current mouse x position.*/ - virtual float getX() const = 0; - - /** current mouse y position.*/ - virtual float getY() const = 0; - - /** current mouse button state */ - virtual unsigned int getButtonMask() const = 0; - - /** current modkey state */ - virtual unsigned int getModKeyMask() const = 0; + /** Get the EventType of the GUI event.*/ + virtual EventType getEventType() const { return _eventType; } /** time in seconds of event. */ - virtual double time() const = 0; - + void setTime(double time) { _time = time; } + + /** time in seconds of event. */ + double getTime() const { return _time; } + + + /** time in seconds of event. */ + virtual double time() const { return getTime(); } + + + inline void setKey(int key) { _key = key; } + + /** key pressed, return -1 if inappropriate for this event. */ + virtual int getKey() const { return _key; } + + /** button pressed/released, return -1 if inappropriate for this event.*/ + virtual int getButton() const { return _button; } + + /** window minimum x. */ + virtual float getXmin() const { return _Xmin; } + + /** window maximum x. */ + virtual float getXmax() const { return _Xmax; } + + /** window minimum y. */ + virtual float getYmin() const { return _Ymin; } + + /** window maximum y. */ + virtual float getYmax() const { return _Ymax; } + + inline void setX(float x) { _mx = x; } + + /** current mouse x position.*/ + virtual float getX() const { return _mx; } + + inline void setY(float y) { _my = y; } + + /** current mouse y position.*/ + virtual float getY() const { return _my; } + + inline void setButtonMask(unsigned int mask) { _buttonMask = mask; } + + /** current mouse button state */ + virtual unsigned int getButtonMask() const { return _buttonMask; } + + virtual unsigned int getModKeyMask() const { return _modKeyMask; } + /** return the getX() value normalised to the range of -1 to 1. * -1 would be the left hand side of the window. * 0.0 would be the middle of the window. @@ -287,15 +307,47 @@ public: else return -(2.0f*(getY()-getYmin())/(getYmax()-getYmin())-1.0f); } + void setMouseYOrientation(MouseYOrientation myo) { _mouseYOrientation = myo; } + MouseYOrientation getMouseYOrientation() const { return _mouseYOrientation; } + protected: GUIEventAdapter(MouseYOrientation myo=Y_INCREASING_DOWNWARDS):_mouseYOrientation(myo) {} + GUIEventAdapter(const GUIEventAdapter& rhs): + Referenced(), + _eventType(rhs._eventType), + _time(rhs._time), + _key(rhs._key), + _button(rhs._button), + _Xmin(rhs._Xmin), + _Xmax(rhs._Xmax), + _Ymin(rhs._Ymin), + _Ymax(rhs._Ymax), + _mx(rhs._mx), + _my(rhs._my), + _buttonMask(rhs._buttonMask), + _modKeyMask(rhs._modKeyMask), + _mouseYOrientation(rhs._mouseYOrientation) {} + + /** Force users to create on heap, so that multiple referencing is safe.*/ - virtual ~GUIEventAdapter(); // {} + virtual ~GUIEventAdapter(); + + public: + EventType _eventType; + double _time; + + int _key; + int _button; + float _Xmin,_Xmax; + float _Ymin,_Ymax; + float _mx; + float _my; + unsigned int _buttonMask; + unsigned int _modKeyMask; MouseYOrientation _mouseYOrientation; - }; } diff --git a/include/osgProducer/EventAdapter b/include/osgProducer/EventAdapter index 492d44464..2e99f7743 100644 --- a/include/osgProducer/EventAdapter +++ b/include/osgProducer/EventAdapter @@ -30,48 +30,6 @@ class OSGPRODUCER_EXPORT EventAdapter : public osgGA::GUIEventAdapter EventAdapter(); virtual ~EventAdapter() {} - /** Get the EventType of the GUI event.*/ - virtual EventType getEventType() const { return _eventType; } - - inline void setKey(int key) { _key = key; } - - /** key pressed, return -1 if inappropriate for this event. */ - virtual int getKey() const { return _key; } - - /** button pressed/released, return -1 if inappropriate for this event.*/ - virtual int getButton() const { return _button; } - - /** window minimum x. */ - virtual float getXmin() const { return _Xmin; } - - /** window maximum x. */ - virtual float getXmax() const { return _Xmax; } - - /** window minimum y. */ - virtual float getYmin() const { return _Ymin; } - - /** window maximum y. */ - virtual float getYmax() const { return _Ymax; } - - inline void setX(float x) { _mx = x; } - - /** current mouse x position.*/ - virtual float getX() const { return _mx; } - - inline void setY(float y) { _my = y; } - - /** current mouse y position.*/ - virtual float getY() const { return _my; } - - inline void setButtonMak(unsigned int mask) { _buttonMask = mask; } - - /** current mouse button state */ - virtual unsigned int getButtonMask() const { return _buttonMask; } - - /** time in seconds of event. */ - virtual double time() const { return _time; } - - virtual unsigned int getModKeyMask() const { return _modKeyMask; } /** static method for setting window dimensions.*/ static void setWindowSize(float Xmin, float Ymin, float Xmax, float Ymax); @@ -104,19 +62,6 @@ class OSGPRODUCER_EXPORT EventAdapter : public osgGA::GUIEventAdapter void copyStaticVariables(); - public: - - EventType _eventType; - int _key; - int _button; - float _Xmin,_Xmax; - float _Ymin,_Ymax; - float _mx; - float _my; - unsigned int _buttonMask; - unsigned int _modKeyMask; - double _time; - public: // used to accumulate the button mask state, it represents