Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/trunk/src/ois/OISMouse.h @ 2383

Last change on this file since 2383 was 1505, checked in by rgrieder, 16 years ago

f* svn: It doesn't even inform you if you attempt to set a non existing property. It is svn:eol-style and not eol-style when using the command by the way…

  • Property svn:eol-style set to native
File size: 4.0 KB
Line 
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 &vendor, bool buffered, int devID, InputManager* creator)
129                        : Object(vendor, OISMouse, buffered, 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
Note: See TracBrowser for help on using the repository browser.