diff options
| author | Jordan Woyak <jordan.woyak@gmail.com> | 2010-07-03 08:04:10 +0000 |
|---|---|---|
| committer | Jordan Woyak <jordan.woyak@gmail.com> | 2010-07-03 08:04:10 +0000 |
| commit | 0bf3dfda036f1da0cb26e1f266ea500fbe74f872 (patch) | |
| tree | 309db5ac993b660eac11dfcc7332a08d47003474 /Source/Core/InputCommon/Src/ControllerInterface/DInput/DInputKeyboardMouse.h | |
| parent | 0dc8833396ab26377b4cd1ba952371e74b94e739 (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.h | 122 |
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 |
