mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-23 06:09:50 -06:00
Get the wiimote new plugin working in linux. Wiimote emulation works at least. Real wiimotes don't.
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@5399 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
@ -16,9 +16,12 @@ Keyboard::Keyboard(Display* display) : m_display(display)
|
||||
{
|
||||
memset(&m_state, 0, sizeof(m_state));
|
||||
|
||||
m_window = DefaultRootWindow(m_display);
|
||||
|
||||
int min_keycode, max_keycode;
|
||||
XDisplayKeycodes(m_display, &min_keycode, &max_keycode);
|
||||
|
||||
// Keyboard Keys
|
||||
for (int i = min_keycode; i <= max_keycode; ++i)
|
||||
{
|
||||
Key *temp_key = new Key(m_display, i);
|
||||
@ -27,6 +30,13 @@ Keyboard::Keyboard(Display* display) : m_display(display)
|
||||
else
|
||||
delete temp_key;
|
||||
}
|
||||
|
||||
// Mouse Buttons
|
||||
inputs.push_back(new Button(Button1Mask));
|
||||
inputs.push_back(new Button(Button2Mask));
|
||||
inputs.push_back(new Button(Button3Mask));
|
||||
inputs.push_back(new Button(Button4Mask));
|
||||
inputs.push_back(new Button(Button5Mask));
|
||||
}
|
||||
|
||||
Keyboard::~Keyboard()
|
||||
@ -48,7 +58,9 @@ bool Keyboard::UpdateInput()
|
||||
{
|
||||
XQueryKeymap(m_display, m_state.keyboard);
|
||||
|
||||
// mouse stuff in here too
|
||||
int root_x, root_y, win_x, win_y;
|
||||
Window root, child;
|
||||
XQueryPointer(m_display, m_window, &root, &child, &root_x, &root_y, &win_x, &win_y, &m_state.buttons);
|
||||
|
||||
return true;
|
||||
}
|
||||
@ -101,10 +113,30 @@ ControlState Keyboard::Key::GetState(const State* const state)
|
||||
return (state->keyboard[m_keycode/8] & (1 << (m_keycode%8))) != 0;
|
||||
}
|
||||
|
||||
ControlState Keyboard::Button::GetState(const State* const state)
|
||||
{
|
||||
return ((state->buttons & m_index) > 0);
|
||||
}
|
||||
|
||||
std::string Keyboard::Key::GetName() const
|
||||
{
|
||||
return m_keyname;
|
||||
}
|
||||
|
||||
std::string Keyboard::Button::GetName() const
|
||||
{
|
||||
char button = '0';
|
||||
switch (m_index)
|
||||
{
|
||||
case Button1Mask: button = '1'; break;
|
||||
case Button2Mask: button = '2'; break;
|
||||
case Button3Mask: button = '3'; break;
|
||||
case Button4Mask: button = '4'; break;
|
||||
case Button5Mask: button = '5'; break;
|
||||
}
|
||||
|
||||
return std::string("Button ") + button;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -22,7 +22,7 @@ class Keyboard : public ControllerInterface::Device
|
||||
struct State
|
||||
{
|
||||
char keyboard[32];
|
||||
// mouse crap will go here
|
||||
unsigned int buttons;
|
||||
};
|
||||
|
||||
class Input : public ControllerInterface::Device::Input
|
||||
@ -46,11 +46,26 @@ class Keyboard : public ControllerInterface::Device
|
||||
|
||||
private:
|
||||
Display* const m_display;
|
||||
const KeyCode m_keycode;
|
||||
std::string m_keyname;
|
||||
const KeyCode m_keycode;
|
||||
std::string m_keyname;
|
||||
|
||||
};
|
||||
|
||||
class Button : public Input
|
||||
{
|
||||
friend class Keyboard;
|
||||
|
||||
public:
|
||||
std::string GetName() const;
|
||||
|
||||
protected:
|
||||
Button(const unsigned int index) : m_index(index) {}
|
||||
ControlState GetState(const State* const state);
|
||||
|
||||
private:
|
||||
const unsigned int m_index;
|
||||
};
|
||||
|
||||
bool UpdateInput();
|
||||
bool UpdateOutput();
|
||||
|
||||
@ -66,6 +81,7 @@ class Keyboard : public ControllerInterface::Device
|
||||
int GetId() const;
|
||||
|
||||
private:
|
||||
Window m_window;
|
||||
Display* m_display;
|
||||
State m_state;
|
||||
};
|
||||
|
Reference in New Issue
Block a user