diff options
| author | Jordan Woyak <jordan.woyak@gmail.com> | 2010-04-13 05:15:38 +0000 |
|---|---|---|
| committer | Jordan Woyak <jordan.woyak@gmail.com> | 2010-04-13 05:15:38 +0000 |
| commit | d8906d2a0ca92b636b2e228da6431621e0cc9479 (patch) | |
| tree | bc07102268a7af7d6ab987045a0da8db5b861fa4 /Source/Core/InputCommon/Src/ControllerInterface/Xlib/Xlib.cpp | |
| parent | 9592da1a9ba32d5574e210df93c36a5913ee0427 (diff) | |
Commited my new wiimote plugin work so far. Some code was copied from the current wiimote plugin. I have cleaned up most of the functions, but there are still a bunch of unused structs and stuff that I need to clean up.
Moved ControllerInterface to InputCommon. Moved GCPadNew GUI/Config code to a new project, InputPluginCommon. It is used by both GCPadNew and WiimoteNew. I hope that I included everyone's fixes to GCPadNew and ControllerInterface.
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@5355 8ced0084-cf51-0410-be5f-012b33b47a6e
Diffstat (limited to 'Source/Core/InputCommon/Src/ControllerInterface/Xlib/Xlib.cpp')
| -rw-r--r-- | Source/Core/InputCommon/Src/ControllerInterface/Xlib/Xlib.cpp | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/Source/Core/InputCommon/Src/ControllerInterface/Xlib/Xlib.cpp b/Source/Core/InputCommon/Src/ControllerInterface/Xlib/Xlib.cpp new file mode 100644 index 0000000000..71fefdcef1 --- /dev/null +++ b/Source/Core/InputCommon/Src/ControllerInterface/Xlib/Xlib.cpp @@ -0,0 +1,110 @@ +#include "Xlib.h" + +namespace ciface +{ +namespace Xlib +{ + +void Init(std::vector<ControllerInterface::Device*>& devices, void* const hwnd) +{ + // mouse will be added to this, Keyboard class will be turned into KeyboardMouse + // single device for combined keyboard/mouse, this will allow combinations like shift+click more easily + devices.push_back(new Keyboard((Display*)hwnd)); +} + +Keyboard::Keyboard(Display* display) : m_display(display) +{ + memset(&m_state, 0, sizeof(m_state)); + + int min_keycode, max_keycode; + XDisplayKeycodes(m_display, &min_keycode, &max_keycode); + + for (int i = min_keycode; i <= max_keycode; ++i) + { + Key *temp_key = new Key(m_display, i); + if (temp_key->m_keyname.length()) + inputs.push_back(temp_key); + else + delete temp_key; + } +} + +Keyboard::~Keyboard() +{ +} + + +ControlState Keyboard::GetInputState(const ControllerInterface::Device::Input* const input) +{ + return ((Input*)input)->GetState(&m_state); +} + +void Keyboard::SetOutputState(const ControllerInterface::Device::Output* const output, const ControlState state) +{ + +} + +bool Keyboard::UpdateInput() +{ + XQueryKeymap(m_display, m_state.keyboard); + + // mouse stuff in here too + + return true; +} + +bool Keyboard::UpdateOutput() +{ + return true; +} + + +std::string Keyboard::GetName() const +{ + return "Keyboard"; + //return "Keyboard Mouse"; // change to this later +} + +std::string Keyboard::GetSource() const +{ + return "Xlib"; +} + +int Keyboard::GetId() const +{ + return 0; +} + + +Keyboard::Key::Key(Display* const display, KeyCode keycode) + : m_display(display), m_keycode(keycode) +{ + int i = 0; + KeySym keysym = 0; + do + { + keysym = XKeycodeToKeysym(m_display, keycode, i); + i++; + } + while (keysym == NoSymbol && i < 8); + + // 0x0110ffff is the top of the unicode character range according to keysymdef.h + // although it is probably more than we need. + if (keysym == NoSymbol || keysym > 0x0110ffff) + m_keyname = std::string(); + else + m_keyname = std::string(XKeysymToString(keysym)); +} + +ControlState Keyboard::Key::GetState(const State* const state) +{ + return (state->keyboard[m_keycode/8] & (1 << (m_keycode%8))) != 0; +} + +std::string Keyboard::Key::GetName() const +{ + return m_keyname; +} + +} +} |
