• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
2 The zlib/libpng License
3
4 Copyright (c) 2005-2007 Phillip Castaneda (pjcast -- www.wreckedgames.com)
5
6 This software is provided 'as-is', without any express or implied warranty. In no event will
7 the authors be held liable for any damages arising from the use of this software.
8
9 Permission is granted to anyone to use this software for any purpose, including commercial
10 applications, and to alter it and redistribute it freely, subject to the following
11 restrictions:
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
24#include "mac/CocoaInputManager.h"
25#include "mac/CocoaKeyboard.h"
26#include "mac/CocoaMouse.h"
27#include "mac/MacHIDManager.h"
28#include "OISException.h"
29
30using namespace std;
31using namespace OIS;
32
33//--------------------------------------------------------------------------------//
34CocoaInputManager::CocoaInputManager() : InputManager("Mac OS X Cocoa Input Manager")
35{
36    mHideMouse = true;
37    mUseRepeat = false;
38	mWindow = nil;
39
40	keyboardUsed = mouseUsed = false;
41
42	//Setup our internal factories
43	mFactories.push_back(this);
44
45	mHIDManager = new MacHIDManager();
46	mFactories.push_back(mHIDManager);
47}
48
49//--------------------------------------------------------------------------------//
50CocoaInputManager::~CocoaInputManager()
51{
52	delete mHIDManager;
53}
54
55//--------------------------------------------------------------------------------//
56void CocoaInputManager::_initialize( ParamList &paramList )
57{
58	_parseConfigSettings( paramList );
59
60	//Enumerate all devices attached
61	_enumerateDevices();
62
63	mHIDManager->initialize();
64}
65
66//--------------------------------------------------------------------------------//
67void CocoaInputManager::_parseConfigSettings( ParamList &paramList )
68{
69    // Some carbon apps are running in a window, however full screen apps
70	// do not have a window, so we need to account for that too.
71	ParamList::iterator i = paramList.find("WINDOW");
72	if(i != paramList.end())
73	{
74		mWindow = (NSWindow *)strtoul(i->second.c_str(), 0, 10);
75		if(mWindow == 0)
76		{
77			mWindow = nil;
78		}
79    }
80	else
81	{
82		// else get the main active window.. user might not have access to it through some
83		// graphics libraries, if that fails then try at the application level.
84		mWindow = [[NSApplication sharedApplication] keyWindow];
85	}
86
87	if(mWindow == nil)
88		OIS_EXCEPT( E_General, "CocoaInputManager::_parseConfigSettings >> Unable to find a window or event target" );
89
90    // Keyboard
91    if(paramList.find("MacAutoRepeatOn") != paramList.end())
92	{
93        if(paramList.find("MacAutoRepeatOn")->second == "true")
94		{
95            mUseRepeat = true;
96        }
97    }
98}
99
100//--------------------------------------------------------------------------------//
101void CocoaInputManager::_enumerateDevices()
102{
103}
104
105//--------------------------------------------------------------------------------//
106DeviceList CocoaInputManager::freeDeviceList()
107{
108	DeviceList ret;
109
110	if( keyboardUsed == false )
111		ret.insert(std::make_pair(OISKeyboard, mInputSystemName));
112
113	if( mouseUsed == false )
114		ret.insert(std::make_pair(OISMouse, mInputSystemName));
115
116	return ret;
117}
118
119//--------------------------------------------------------------------------------//
120int CocoaInputManager::totalDevices(Type iType)
121{
122	switch(iType)
123	{
124	case OISKeyboard: return 1;
125	case OISMouse: return 1;
126	default: return 0;
127	}
128}
129
130//--------------------------------------------------------------------------------//
131int CocoaInputManager::freeDevices(Type iType)
132{
133	switch(iType)
134	{
135	case OISKeyboard: return keyboardUsed ? 0 : 1;
136	case OISMouse: return mouseUsed ? 0 : 1;
137	default: return 0;
138	}
139}
140
141//--------------------------------------------------------------------------------//
142bool CocoaInputManager::vendorExist(Type iType, const std::string & vendor)
143{
144	if( (iType == OISKeyboard || iType == OISMouse) && vendor == mInputSystemName )
145		return true;
146
147	return false;
148}
149
150//--------------------------------------------------------------------------------//
151Object* CocoaInputManager::createObject(InputManager* creator, Type iType, bool bufferMode,
152									  const std::string & vendor)
153{
154	Object *obj = 0;
155
156	switch(iType)
157	{
158        case OISKeyboard:
159        {
160            if( keyboardUsed == false )
161                obj = new CocoaKeyboard(this, bufferMode, mUseRepeat);
162            break;
163        }
164        case OISMouse:
165        {
166            if( mouseUsed == false )
167                obj = new CocoaMouse(this, bufferMode);
168            break;
169        }
170        default:
171        {
172            obj = mHIDManager->createObject(creator, iType, bufferMode, vendor);
173            break;
174        }
175	}
176
177	if( obj == 0 )
178		OIS_EXCEPT(E_InputDeviceNonExistant, "No devices match requested type.");
179
180	return obj;
181}
182
183//--------------------------------------------------------------------------------//
184void CocoaInputManager::destroyObject(Object* obj)
185{
186	delete obj;
187}
188