PageRenderTime 14ms CodeModel.GetById 2ms app.highlight 9ms RepoModel.GetById 1ms app.codeStats 0ms

/src/ois/includes/OISMouse.h

https://bitbucket.org/cabalistic/ogredeps/
C++ Header | 138 lines | 62 code | 19 blank | 57 comment | 1 complexity | 0fe0b8cb8e97fb4f3e66b9f8262c4b73 MD5 | raw file
  1/*
  2The zlib/libpng License
  3
  4Copyright (c) 2005-2007 Phillip Castaneda (pjcast -- www.wreckedgames.com)
  5
  6This software is provided 'as-is', without any express or implied warranty. In no event will
  7the authors be held liable for any damages arising from the use of this software.
  8
  9Permission is granted to anyone to use this software for any purpose, including commercial
 10applications, and to alter it and redistribute it freely, subject to the following
 11restrictions:
 12
 13    1. The origin of this software must not be misrepresented; you must not claim that
 14		you wrote the original software. If you use this software in a product,
 15		an acknowledgment in the product documentation would be appreciated but is
 16		not required.
 17
 18    2. Altered source versions must be plainly marked as such, and must not be
 19		misrepresented as being the original software.
 20
 21    3. This notice may not be removed or altered from any source distribution.
 22*/
 23#ifndef OIS_Mouse_H
 24#define OIS_Mouse_H
 25#include "OISObject.h"
 26#include "OISEvents.h"
 27
 28namespace OIS
 29{
 30	//! Button ID for mouse devices
 31	enum MouseButtonID
 32	{
 33		MB_Left = 0, MB_Right, MB_Middle,
 34		MB_Button3, MB_Button4,	MB_Button5, MB_Button6,	MB_Button7
 35	};
 36
 37	/**
 38		Represents the state of the mouse
 39		All members are valid for both buffered and non buffered mode
 40	*/
 41	class _OISExport MouseState
 42	{
 43	public:
 44		MouseState() : width(50), height(50), buttons(0) {};
 45
 46		/** Represents the height/width of your display area.. used if mouse clipping
 47		or mouse grabbed in case of X11 - defaults to 50.. Make sure to set this
 48		and change when your size changes.. */
 49		mutable int width, height;
 50
 51		//! X Axis component
 52		Axis X;
 53
 54		//! Y Axis Component
 55		Axis Y;
 56
 57		//! Z Axis Component
 58		Axis Z;
 59
 60		//! represents all buttons - bit position indicates button down
 61		int buttons;
 62
 63		//! Button down test
 64		inline bool buttonDown( MouseButtonID button ) const
 65		{
 66			return ((buttons & ( 1L << button )) == 0) ? false : true;
 67		}
 68
 69		//! Clear all the values
 70		void clear()
 71		{
 72			X.clear();
 73			Y.clear();
 74			Z.clear();
 75			buttons = 0;
 76		}
 77	};
 78
 79	/** Specialised for mouse events */
 80	class _OISExport MouseEvent : public EventArg
 81	{
 82	public:
 83		MouseEvent( Object *obj, const MouseState &ms )	: EventArg(obj), state(ms) {}
 84		virtual ~MouseEvent() {}
 85
 86		//! The state of the mouse - including buttons and axes
 87		const MouseState &state;
 88	};
 89
 90	/**
 91		To recieve buffered mouse input, derive a class from this, and implement the
 92		methods here. Then set the call back to your Mouse instance with Mouse::setEventCallback
 93	*/
 94	class _OISExport MouseListener
 95	{
 96	public:
 97		virtual ~MouseListener() {}
 98		virtual bool mouseMoved( const MouseEvent &arg ) = 0;
 99		virtual bool mousePressed( const MouseEvent &arg, MouseButtonID id ) = 0;
100		virtual bool mouseReleased( const MouseEvent &arg, MouseButtonID id ) = 0;
101	};
102
103	/**
104		Mouse base class. To be implemented by specific system (ie. DirectX Mouse)
105		This class is useful as you remain OS independent using this common interface.
106	*/
107	class _OISExport Mouse : public Object
108	{
109	public:
110		virtual ~Mouse() {}
111
112		/**
113		@remarks
114			Register/unregister a Mouse Listener - Only one allowed for simplicity. If broadcasting
115			is neccessary, just broadcast from the callback you registered.
116		@param mouseListener
117			Send a pointer to a class derived from MouseListener or 0 to clear the callback
118		*/
119		virtual void setEventCallback( MouseListener *mouseListener ) {mListener = mouseListener;}
120
121		/** @remarks Returns currently set callback.. or 0 */
122		MouseListener* getEventCallback() const {return mListener;}
123
124		/** @remarks Returns the state of the mouse - is valid for both buffered and non buffered mode */
125		const MouseState& getMouseState() const { return mState; }
126
127	protected:
128		Mouse(const std::string &inVendor, bool inBuffered, int devID, InputManager* creator)
129			: Object(inVendor, OISMouse, inBuffered, devID, creator), mListener(0) {}
130
131		//! The state of the mouse
132		MouseState mState;
133
134		//! Used for buffered/actionmapping callback
135		MouseListener *mListener;
136	};
137}
138#endif