diff options
| author | Jordan Woyak <jordan.woyak@gmail.com> | 2010-06-21 03:12:16 +0000 |
|---|---|---|
| committer | Jordan Woyak <jordan.woyak@gmail.com> | 2010-06-21 03:12:16 +0000 |
| commit | 9e3b65368873fd26f21e2568b2c67d00ec96d6a5 (patch) | |
| tree | b5eff0d77ae7e4327069116f6440dcc2a70a1a5f /Source/Core/InputCommon/Src/ControllerInterface/DirectInput/DirectInputKeyboard.h | |
| parent | fde15c1bc633792bead817b2f87faf54477765b5 (diff) | |
GCPad/New Wiimote Plugin: Individual keyboard and mouse devices are now listed on Windows(2 player with 2 keyboards possible). Improved the ability to map multiple inputs to the same control. Inputs from different devices can be mapped to the same button (example: Mouse Left and XInput A). More advanced mappings such as "Button 1 or 2 and NOT button 3" are possible. I hope the GUI after right clicking a button isn't too confusing(may change it to be a bit more user friendly). Hopefully, I didn't break OSX stuff by 'const'ing a few functions.
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@5757 8ced0084-cf51-0410-be5f-012b33b47a6e
Diffstat (limited to 'Source/Core/InputCommon/Src/ControllerInterface/DirectInput/DirectInputKeyboard.h')
| -rw-r--r-- | Source/Core/InputCommon/Src/ControllerInterface/DirectInput/DirectInputKeyboard.h | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/Source/Core/InputCommon/Src/ControllerInterface/DirectInput/DirectInputKeyboard.h b/Source/Core/InputCommon/Src/ControllerInterface/DirectInput/DirectInputKeyboard.h new file mode 100644 index 0000000000..b51a38faa4 --- /dev/null +++ b/Source/Core/InputCommon/Src/ControllerInterface/DirectInput/DirectInputKeyboard.h @@ -0,0 +1,99 @@ +#ifndef _CIFACE_DIRECTINPUT_KEYBOARD_H_
+#define _CIFACE_DIRECTINPUT_KEYBOARD_H_
+
+#include "../ControllerInterface.h"
+
+#define DIRECTINPUT_VERSION 0x0800
+#define WIN32_LEAN_AND_MEAN
+#define NOMINMAX
+#include <Windows.h>
+#include <dinput.h>
+
+#include <wx/stopwatch.h>
+#include <wx/utils.h>
+
+namespace ciface
+{
+namespace DirectInput
+{
+
+void InitKeyboard(IDirectInput8* const idi8, std::vector<ControllerInterface::Device*>& devices);
+
+class Keyboard : public ControllerInterface::Device
+{
+ friend class ControllerInterface;
+ friend class ControllerInterface::ControlReference;
+
+protected:
+
+ struct State
+ {
+
+ };
+
+ class Input : public ControllerInterface::Device::Input
+ {
+ friend class Keyboard;
+ protected:
+ virtual ControlState GetState(const BYTE keys[]) const = 0;
+ };
+
+ class Output : public ControllerInterface::Device::Output
+ {
+ friend class Keyboard;
+ protected:
+ virtual void SetState(const ControlState state, unsigned char* const state_out) = 0;
+ };
+
+ class Key : public Input
+ {
+ friend class Keyboard;
+ public:
+ std::string GetName() const;
+ protected:
+ Key(const unsigned int index) : m_index(index) {}
+ ControlState GetState(const BYTE keys[]) const;
+ private:
+ const unsigned int m_index;
+ };
+
+ class Light : public Output
+ {
+ friend class Keyboard;
+ 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:
+ Keyboard(const LPDIRECTINPUTDEVICE8 kb_device, const int index);
+ ~Keyboard();
+
+ std::string GetName() const;
+ int GetId() const;
+ std::string GetSource() const;
+
+private:
+ const LPDIRECTINPUTDEVICE8 m_kb_device;
+ const int m_index;
+
+ wxLongLong m_last_update;
+ BYTE m_state_in[256];
+ unsigned char m_state_out[3]; // NUM CAPS SCROLL
+ bool m_current_state_out[3]; // NUM CAPS SCROLL
+};
+
+}
+}
+
+#endif
|
