Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/core4/src/core/input/Mouse.cc @ 3276

Last change on this file since 3276 was 3276, checked in by rgrieder, 15 years ago

Moved grab/ungrab mouse hack for Linux from InputManager to Mouse.

  • Property svn:eol-style set to native
File size: 3.5 KB
Line 
1/*
2 *   ORXONOX - the hottest 3D action shooter ever to exist
3 *                    > www.orxonox.net <
4 *
5 *
6 *   License notice:
7 *
8 *   This program is free software; you can redistribute it and/or
9 *   modify it under the terms of the GNU General Public License
10 *   as published by the Free Software Foundation; either version 2
11 *   of the License, or (at your option) any later version.
12 *
13 *   This program is distributed in the hope that it will be useful,
14 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
15 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 *   GNU General Public License for more details.
17 *
18 *   You should have received a copy of the GNU General Public License
19 *   along with this program; if not, write to the Free Software
20 *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
21 *
22 *   Author:
23 *      Reto Grieder
24 *   Co-authors:
25 *      ...
26 *
27 */
28
29#include "Mouse.h"
30
31#include <ois/OISMouse.h>
32#include <boost/foreach.hpp>
33#include "InputState.h"
34#include "core/ConsoleCommand.h"
35
36// HACK (include this as last, X11 seems to define some macros...)
37#ifdef ORXONOX_PLATFORM_LINUX
38#  include <ois/linux/LinuxMouse.h>
39#endif
40
41namespace orxonox
42{
43    Mouse::Mouse(unsigned int id, unsigned int windowWidth, unsigned int windowHeight)
44        : super(id)
45    {
46        this->setMouseClipping(windowWidth, windowHeight);
47        // HACK:
48        instancePointer_s = this;
49    }
50
51    void Mouse::setMouseClipping(unsigned int width, unsigned int height)
52    {
53        oisDevice_->getMouseState().width  = width;
54        oisDevice_->getMouseState().height = height;
55    }
56
57    unsigned int Mouse::getClippingWidth() const
58    {
59        return oisDevice_->getMouseState().width;
60    }
61
62    unsigned int Mouse::getClippingHeight() const
63    {
64        return oisDevice_->getMouseState().height;
65    }
66
67    //! OIS event handler
68    bool Mouse::mouseMoved(const OIS::MouseEvent &e)
69    {
70        // check for actual moved event
71        if (e.state.X.rel != 0 || e.state.Y.rel != 0)
72        {
73            IntVector2 abs(e.state.X.abs, e.state.Y.abs);
74            IntVector2 rel(e.state.X.rel, e.state.Y.rel);
75            IntVector2 clippingSize(e.state.width, e.state.height);
76            BOOST_FOREACH(InputState* state, inputStates_)
77                state->mouseMoved(abs, rel, clippingSize);
78        }
79
80        // check for mouse scrolled event
81        if (e.state.Z.rel != 0)
82        {
83            BOOST_FOREACH(InputState* state, inputStates_)
84                state->mouseScrolled(e.state.Z.abs, e.state.Z.rel);
85        }
86
87        return true;
88    }
89
90    // ############################################################
91    // #####                   ugly hacks                     #####
92    // ##########                                        ##########
93    // ############################################################
94
95    // HACK:
96    SetConsoleCommand(Mouse, setMouseClipping_s, false);
97#ifdef ORXONOX_PLATFORM_LINUX
98    SetConsoleCommand(Mouse, grabMouse, true);
99    SetConsoleCommand(Mouse, ungrabMouse, true);
100#endif
101    Mouse* Mouse::instancePointer_s = NULL;
102
103#ifdef ORXONOX_PLATFORM_LINUX
104    void Mouse::grabMouse()
105    {
106        OIS::LinuxMouse* linuxMouse = dynamic_cast<OIS::LinuxMouse*>(instancePointer_s->oisDevice_);
107        assert(linuxMouse);
108        linuxMouse->grab(true);
109    }
110
111    void Mouse::ungrabMouse()
112    {
113        OIS::LinuxMouse* linuxMouse = dynamic_cast<OIS::LinuxMouse*>(instancePointer_s->oisDevice_);
114        assert(linuxMouse);
115        linuxMouse->grab(false);
116    }
117#endif
118}
Note: See TracBrowser for help on using the repository browser.