Subversion Repositories spk

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
11 cycrow 1
#pragma once
2
 
3
#include "../Overlay.h"
4
 
5
class MouseDevice : public IDirectInputDevice8
6
{
7
public:
8
	MouseDevice (IDirectInputDevice8* device, COverlay *o) : m_device(device), m_pOverlay(o)
9
	{
10
		m_pOverlay->SetMouseDevice ( device );
11
	}
12
 
13
	/*** IUnknown methods ***/
14
	STDMETHOD(QueryInterface)(REFIID riid, void** ppvObj)
15
	{
16
		return m_device->QueryInterface(riid, ppvObj);
17
	}
18
 
19
	STDMETHOD_(ULONG,AddRef)()
20
	{
21
		return m_device->AddRef();
22
	}
23
 
24
	STDMETHOD_(ULONG,Release)()
25
	{
26
		ULONG count = m_device->Release();
27
		if(0 == count)
28
			delete this;
29
 
30
		return count;
31
	}
32
 
33
	/*** IDirectInputDevice8 methods ***/
34
	STDMETHOD(GetCapabilities)(LPDIDEVCAPS devCaps)
35
	{
36
		return m_device->GetCapabilities(devCaps);
37
	}
38
 
39
	STDMETHOD(EnumObjects)(LPDIENUMDEVICEOBJECTSCALLBACK callback, LPVOID ref, DWORD flags)	
40
	{
41
		return m_device->EnumObjects(callback, ref, flags);
42
	}
43
 
44
	STDMETHOD(GetProperty)(REFGUID rguid, LPDIPROPHEADER ph)
45
	{
46
		return m_device->GetProperty(rguid, ph);
47
	}
48
 
49
	STDMETHOD(SetProperty)(REFGUID rguid, LPCDIPROPHEADER ph)
50
	{
51
		return m_device->SetProperty(rguid, ph);
52
	}
53
 
54
	STDMETHOD(Acquire)()
55
	{
56
		return m_device->Acquire();
57
	}
58
 
59
	STDMETHOD(Unacquire)()
60
	{
61
		return m_device->Unacquire();
62
	}
63
 
64
	STDMETHOD(GetDeviceState)(DWORD size, LPVOID data)
65
	{
66
		HRESULT hr = m_device->GetDeviceState(size, data);
67
 
68
		return hr;
69
	}
70
 
71
	STDMETHOD(GetDeviceData)(DWORD size, LPDIDEVICEOBJECTDATA data, LPDWORD numElements, DWORD flags)
72
	{
73
		HRESULT hr = m_device->GetDeviceData(size, data, numElements, flags);
74
 
75
		for ( unsigned int i = 0; i < *numElements; i++ )
76
		{
77
			DIDEVICEOBJECTDATA *d = &data[i];
78
			if ( d->dwOfs == DIMOFS_X )
79
			{
80
				m_pOverlay->MoveMouseX ( (int)d->dwData );
81
				if ( m_pOverlay->HaltMouse() )
82
					d->dwData = 0;
83
			}
84
			else if ( d->dwOfs == DIMOFS_Y )
85
			{
86
				m_pOverlay->MoveMouseY ( (int)d->dwData );
87
				if ( m_pOverlay->HaltMouse() )
88
					d->dwData = 0;
89
			}
90
			else if ( d->dwOfs == DIMOFS_BUTTON0 )
91
			{
92
				if ( d->dwData )
93
				{
94
					if ( (m_pOverlay->MouseClick ( 0 )) || (m_pOverlay->HaltMouse()) )
95
						d->dwData = 0;
96
				}
97
				else
98
					m_pOverlay->MouseRelease ( 0 );
99
			}
100
			else if ( d->dwOfs == DIMOFS_BUTTON1 )
101
			{
102
				if ( d->dwData )
103
				{
104
					if ( (m_pOverlay->MouseClick ( 1 )) || (m_pOverlay->HaltMouse()) )
105
						d->dwData = 0;
106
				}
107
				else
108
					m_pOverlay->MouseRelease ( 1 );
109
			}
110
			else if ( d->dwOfs == DIMOFS_BUTTON2 )
111
				m_pOverlay->MouseClick ( 2 );
112
			else if ( d->dwOfs == DIMOFS_BUTTON3 )
113
				m_pOverlay->MouseClick ( 3 );
114
			else if ( d->dwOfs == DIMOFS_BUTTON4 )
115
				m_pOverlay->MouseClick ( 4 );
116
			else if ( d->dwOfs == DIMOFS_BUTTON5 )
117
				m_pOverlay->MouseClick ( 5 );
118
			else if ( d->dwOfs == DIMOFS_BUTTON6 )
119
				m_pOverlay->MouseClick ( 6 );
120
			else if ( d->dwOfs == DIMOFS_BUTTON7 )
121
				m_pOverlay->MouseClick ( 7 );
122
		}
123
 
124
		return hr;
125
	}
126
 
127
	STDMETHOD(SetDataFormat)(LPCDIDATAFORMAT df)
128
	{
129
		return m_device->SetDataFormat(df);
130
	}
131
 
132
	STDMETHOD(SetEventNotification)(HANDLE event)
133
	{
134
		return m_device->SetEventNotification(event);
135
	}
136
 
137
	STDMETHOD(SetCooperativeLevel)(HWND window, DWORD level)
138
	{
139
		return m_device->SetCooperativeLevel(window, level);
140
	}
141
 
142
	STDMETHOD(GetObjectInfo)(LPDIDEVICEOBJECTINSTANCE object, DWORD objId, DWORD objHow)
143
	{
144
		return m_device->GetObjectInfo(object, objId, objHow);
145
	}
146
 
147
	STDMETHOD(GetDeviceInfo)(LPDIDEVICEINSTANCE di)
148
	{
149
		return m_device->GetDeviceInfo(di);
150
	}
151
 
152
	STDMETHOD(RunControlPanel)(HWND owner, DWORD flags)
153
	{
154
		return m_device->RunControlPanel(owner, flags);
155
	}
156
 
157
	STDMETHOD(Initialize)(HINSTANCE instance, DWORD version, REFGUID rguid)
158
	{
159
		return m_device->Initialize(instance, version, rguid);
160
	}
161
 
162
	STDMETHOD(CreateEffect)(REFGUID rguid, LPCDIEFFECT effect_params, LPDIRECTINPUTEFFECT* effect, LPUNKNOWN unknown)
163
	{
164
		return m_device->CreateEffect(rguid, effect_params, effect, unknown);
165
	}
166
 
167
    STDMETHOD(EnumEffects)(LPDIENUMEFFECTSCALLBACK callback, LPVOID ref, DWORD type)
168
	{
169
		return m_device->EnumEffects(callback, ref, type);
170
	}
171
 
172
    STDMETHOD(GetEffectInfo)(LPDIEFFECTINFO effect_info, REFGUID rguid)
173
	{
174
		return m_device->GetEffectInfo(effect_info, rguid);
175
	}
176
 
177
    STDMETHOD(GetForceFeedbackState)(LPDWORD state)
178
	{
179
		return m_device->GetForceFeedbackState(state);
180
	}
181
 
182
    STDMETHOD(SendForceFeedbackCommand)(DWORD flags)
183
	{
184
		return m_device->SendForceFeedbackCommand(flags);
185
	}
186
 
187
    STDMETHOD(EnumCreatedEffectObjects)(LPDIENUMCREATEDEFFECTOBJECTSCALLBACK callback, LPVOID ref, DWORD flags)
188
	{
189
		return m_device->EnumCreatedEffectObjects(callback, ref, flags);
190
	}
191
 
192
    STDMETHOD(Escape)(LPDIEFFESCAPE escape)
193
	{
194
		return m_device->Escape(escape);
195
	}
196
 
197
    STDMETHOD(Poll)()
198
	{
199
		return m_device->Poll();
200
	}
201
 
202
	STDMETHOD(SendDeviceData)(DWORD size, LPCDIDEVICEOBJECTDATA data, LPDWORD num_elements, DWORD flags)
203
	{
204
		return m_device->SendDeviceData(size, data, num_elements, flags);
205
	}
206
 
207
	STDMETHOD(EnumEffectsInFile)(LPCTSTR file_name, LPDIENUMEFFECTSINFILECALLBACK callback, LPVOID ref, DWORD flags)
208
	{
209
		return m_device->EnumEffectsInFile(file_name, callback, ref, flags);
210
	}
211
 
212
    STDMETHOD(WriteEffectToFile)(LPCTSTR file_name, DWORD num_entries, LPDIFILEEFFECT effects, DWORD flags)
213
	{
214
		return m_device->WriteEffectToFile(file_name, num_entries, effects, flags);
215
	}
216
 
217
    STDMETHOD(BuildActionMap)(LPDIACTIONFORMAT format, LPCTSTR username, DWORD flags)
218
	{
219
		return m_device->BuildActionMap(format, username, flags);
220
	}
221
 
222
    STDMETHOD(SetActionMap)(LPDIACTIONFORMAT format, LPCTSTR username, DWORD flags)
223
	{
224
		return m_device->SetActionMap(format, username, flags);
225
	}
226
 
227
    STDMETHOD(GetImageInfo)(LPDIDEVICEIMAGEINFOHEADER image_header)
228
	{
229
		return m_device->GetImageInfo(image_header);
230
	}
231
 
232
private:
233
	IDirectInputDevice8* m_device;	
234
	COverlay *m_pOverlay;
235
};
236