[692] | 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 |
|
---|