1 | /*
|
---|
2 | -----------------------------------------------------------------------------
|
---|
3 | This source file is part of OGRE
|
---|
4 | (Object-oriented Graphics Rendering Engine)
|
---|
5 | For the latest info, see http://www.ogre3d.org/
|
---|
6 |
|
---|
7 | Copyright (c) 2000-2005 The OGRE Team
|
---|
8 | Also see acknowledgements in Readme.html
|
---|
9 |
|
---|
10 | This program is free software; you can redistribute it and/or modify it under
|
---|
11 | the terms of the GNU Lesser General Public License as published by the Free Software
|
---|
12 | Foundation; either version 2 of the License, or (at your option) any later
|
---|
13 | version.
|
---|
14 |
|
---|
15 | This program is distributed in the hope that it will be useful, but WITHOUT
|
---|
16 | ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
---|
17 | FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
---|
18 |
|
---|
19 | You should have received a copy of the GNU Lesser General Public License along with
|
---|
20 | this program; if not, write to the Free Software Foundation, Inc., 59 Temple
|
---|
21 | Place - Suite 330, Boston, MA 02111-1307, USA, or go to
|
---|
22 | http://www.gnu.org/copyleft/lesser.txt.
|
---|
23 | -----------------------------------------------------------------------------
|
---|
24 | */
|
---|
25 |
|
---|
26 |
|
---|
27 | #ifndef __SDLInputReader_H__
|
---|
28 | #define __SDLInputReader_H__
|
---|
29 |
|
---|
30 | #include "OgreInput.h"
|
---|
31 | #include "OgreInputEvent.h"
|
---|
32 | #include "OgreRenderWindow.h"
|
---|
33 |
|
---|
34 | #include <map>
|
---|
35 |
|
---|
36 | #if OGRE_PLATFORM == OGRE_PLATFORM_APPLE
|
---|
37 | # include <SDL/sdl.h>
|
---|
38 | #else
|
---|
39 | # include <SDL.h>
|
---|
40 | #endif
|
---|
41 |
|
---|
42 | namespace Ogre {
|
---|
43 | enum GrabMode
|
---|
44 | {
|
---|
45 | GRAB_NONE,
|
---|
46 | GRAB_MOUSE_OVER,
|
---|
47 | GRAB_MOUSE_CLICK // this is the default
|
---|
48 | };
|
---|
49 |
|
---|
50 | class SDLInput : public InputReader
|
---|
51 | {
|
---|
52 | public:
|
---|
53 | SDLInput();
|
---|
54 | virtual ~SDLInput();
|
---|
55 |
|
---|
56 | void initialise( RenderWindow* pWindow, bool useKeyboard = true, bool useMouse = true, bool useGameController = false );
|
---|
57 | void capture();
|
---|
58 |
|
---|
59 | /** Sets how to grab the mouse. Possible values for mode are GRAB_MOUSE_OVER
|
---|
60 | or GRAB_MOUSE_BUTTON. The first will grab the mouse if the pointer is over the
|
---|
61 | application window and the latter will wait for a mouse button click to aquire
|
---|
62 | the mouse. Default is GRAB_MOUSE_CLICK.
|
---|
63 | */
|
---|
64 | void setGrabMode( GrabMode mode ) { mGrabMode = mode; }
|
---|
65 |
|
---|
66 | /*
|
---|
67 | * Mouse getters
|
---|
68 | */
|
---|
69 | virtual long getMouseRelX() const;
|
---|
70 | virtual long getMouseRelY() const;
|
---|
71 | virtual long getMouseRelZ() const;
|
---|
72 |
|
---|
73 | virtual long getMouseAbsX() const;
|
---|
74 | virtual long getMouseAbsY() const;
|
---|
75 | virtual long getMouseAbsZ() const;
|
---|
76 |
|
---|
77 | virtual void getMouseState( MouseState& state ) const;
|
---|
78 |
|
---|
79 | virtual bool getMouseButton( uchar button ) const;
|
---|
80 |
|
---|
81 | private:
|
---|
82 | // State at last 'capture' call
|
---|
83 | Uint8* mKeyboardBuffer;
|
---|
84 | int mMaxKey;
|
---|
85 | int mMouseX, mMouseY;
|
---|
86 | int mMouseRelativeX, mMouseRelativeY, mMouseRelativeZ;
|
---|
87 | Uint8 mMouseKeys;
|
---|
88 | bool _visible;
|
---|
89 |
|
---|
90 | bool mMouseGrabbed; // true if Ogre has control over the mouse input
|
---|
91 | bool mUseMouse; // true if initialise() is called with useMouse == true
|
---|
92 | bool mGrabMouse; // grab the mouse input if the situation specified by mGrabMode arises
|
---|
93 | bool mMouseLeft; // true if the mouse pointer has left the window after calling releaseMouse(). Needed for
|
---|
94 | // mGrabMode == GRAB_MOUSE_BUTTON.
|
---|
95 | int mGrabMode; // when/how to grab the mouse
|
---|
96 |
|
---|
97 | typedef std::map<SDLKey, KeyCode> InputKeyMap;
|
---|
98 | InputKeyMap _key_map;
|
---|
99 | bool warpMouse;
|
---|
100 |
|
---|
101 | // the value that is added to mMouseRelativeZ when the wheel
|
---|
102 | // is moved one step (this value is actually added
|
---|
103 | // twice per movement since a wheel movement triggers a
|
---|
104 | // MOUSEBUTTONUP and a MOUSEBUTTONDOWN event).
|
---|
105 | // The value is chosen according to the windoze value.
|
---|
106 | static const unsigned int mWheelStep = 60;
|
---|
107 |
|
---|
108 | void processBufferedKeyboard();
|
---|
109 | void processBufferedMouse();
|
---|
110 |
|
---|
111 | void _grabMouse();
|
---|
112 | void _releaseMouse();
|
---|
113 | bool isKeyDownImmediate( KeyCode kc ) const;
|
---|
114 | };
|
---|
115 | }
|
---|
116 |
|
---|
117 | #endif
|
---|
118 |
|
---|