summaryrefslogtreecommitdiff
path: root/Source/Core/InputCommon/Src/ControllerInterface/DInput/DInputKeyboardMouse.h
diff options
context:
space:
mode:
authorJordan Woyak <jordan.woyak@gmail.com>2010-07-03 08:04:10 +0000
committerJordan Woyak <jordan.woyak@gmail.com>2010-07-03 08:04:10 +0000
commit0bf3dfda036f1da0cb26e1f266ea500fbe74f872 (patch)
tree309db5ac993b660eac11dfcc7332a08d47003474 /Source/Core/InputCommon/Src/ControllerInterface/DInput/DInputKeyboardMouse.h
parent0dc8833396ab26377b4cd1ba952371e74b94e739 (diff)
New Wiimote Plugin: Added real wiimote support.(only tested on Windows, still a few probs: after refresh alt+F{5..8} x2 is needed) New Wiimote/GCPad: Re-merged Keyboard+Mouse for easier kb+mouse configuration, like before.(DirectInput doesn't support individual kb/mice anymore like I thought it did) Fixed some bugs and maybe leaks in GUI.(got rid of evil dynamic_cast) Renamed stuff from DirectInput to DInput, cause it's shorter and rhymes with XInput, I guess. (I remembered eol-style native, shuffle lost his job :P)
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@5822 8ced0084-cf51-0410-be5f-012b33b47a6e
Diffstat (limited to 'Source/Core/InputCommon/Src/ControllerInterface/DInput/DInputKeyboardMouse.h')
-rw-r--r--Source/Core/InputCommon/Src/ControllerInterface/DInput/DInputKeyboardMouse.h122
1 files changed, 122 insertions, 0 deletions
diff --git a/Source/Core/InputCommon/Src/ControllerInterface/DInput/DInputKeyboardMouse.h b/Source/Core/InputCommon/Src/ControllerInterface/DInput/DInputKeyboardMouse.h
new file mode 100644
index 0000000000..8e6c20beb6
--- /dev/null
+++ b/Source/Core/InputCommon/Src/ControllerInterface/DInput/DInputKeyboardMouse.h
@@ -0,0 +1,122 @@
+#ifndef _CIFACE_DINPUT_KBM_H_
+#define _CIFACE_DINPUT_KBM_H_
+
+#include "../ControllerInterface.h"
+
+#define DIRECTINPUT_VERSION 0x0800
+#define WIN32_LEAN_AND_MEAN
+#define NOMINMAX
+#include <Windows.h>
+#include <dinput.h>
+
+namespace ciface
+{
+namespace DInput
+{
+
+void InitKeyboardMouse( IDirectInput8* const idi8, std::vector<ControllerInterface::Device*>& devices );
+
+class KeyboardMouse : public ControllerInterface::Device
+{
+ friend class ControllerInterface;
+ friend class ControllerInterface::ControlReference;
+
+protected:
+
+ struct State
+ {
+ BYTE keyboard[256];
+ DIMOUSESTATE2 mouse;
+ };
+
+ class Input : public ControllerInterface::Device::Input
+ {
+ friend class KeyboardMouse;
+ protected:
+ virtual ControlState GetState(const State* const boardstate) const = 0;
+ };
+
+ class Output : public ControllerInterface::Device::Output
+ {
+ friend class KeyboardMouse;
+ protected:
+ virtual void SetState(const ControlState state, unsigned char* const state_out) = 0;
+ };
+
+ class Key : public Input
+ {
+ friend class KeyboardMouse;
+ public:
+ std::string GetName() const;
+ protected:
+ Key( const unsigned int index ) : m_index(index) {}
+ ControlState GetState(const State* const state) const;
+ private:
+ const unsigned int m_index;
+ };
+
+ class Button : public Input
+ {
+ friend class KeyboardMouse;
+ public:
+ std::string GetName() const;
+ protected:
+ Button( const unsigned int index ) : m_index(index) {}
+ ControlState GetState(const State* const state) const;
+ private:
+ const unsigned int m_index;
+ };
+
+ class Axis : public Input
+ {
+ friend class KeyboardMouse;
+ public:
+ std::string GetName() const;
+ protected:
+ Axis( const unsigned int index, const LONG range ) : m_index(index), m_range(range) {}
+ ControlState GetState(const State* const state) const;
+ private:
+ const unsigned int m_index;
+ const LONG m_range;
+ };
+
+ class Light : public Output
+ {
+ friend class KeyboardMouse;
+ public:
+ std::string GetName() const;
+ protected:
+ Light( const unsigned int index ) : m_index(index) {}
+ void SetState( const ControlState state, unsigned char* const state_out );
+ private:
+ const unsigned int m_index;
+ };
+
+ bool UpdateInput();
+ bool UpdateOutput();
+
+ ControlState GetInputState( const ControllerInterface::Device::Input* const input ) const;
+ void SetOutputState( const ControllerInterface::Device::Output* const input, const ControlState state );
+
+public:
+ KeyboardMouse(const LPDIRECTINPUTDEVICE8 kb_device, const LPDIRECTINPUTDEVICE8 mo_device);
+ ~KeyboardMouse();
+
+ std::string GetName() const;
+ int GetId() const;
+ std::string GetSource() const;
+
+private:
+ const LPDIRECTINPUTDEVICE8 m_kb_device;
+ const LPDIRECTINPUTDEVICE8 m_mo_device;
+
+ DWORD m_last_update;
+ State m_state_in;
+ unsigned char m_state_out[3]; // NUM CAPS SCROLL
+ bool m_current_state_out[3]; // NUM CAPS SCROLL
+};
+
+}
+}
+
+#endif