summaryrefslogtreecommitdiff
path: root/Source/Core/InputCommon/Src/ControllerInterface/Xlib/Xlib.cpp
diff options
context:
space:
mode:
authorJordan Woyak <jordan.woyak@gmail.com>2010-04-13 05:15:38 +0000
committerJordan Woyak <jordan.woyak@gmail.com>2010-04-13 05:15:38 +0000
commitd8906d2a0ca92b636b2e228da6431621e0cc9479 (patch)
treebc07102268a7af7d6ab987045a0da8db5b861fa4 /Source/Core/InputCommon/Src/ControllerInterface/Xlib/Xlib.cpp
parent9592da1a9ba32d5574e210df93c36a5913ee0427 (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.cpp110
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;
+}
+
+}
+}