mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-22 22:00:39 -06:00
Clean up "ControllerInterface" a bit.
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@7339 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
@ -22,7 +22,7 @@ KeyboardMouse::KeyboardMouse(Window window) : m_window(window)
|
||||
// Keyboard Keys
|
||||
for (int i = min_keycode; i <= max_keycode; ++i)
|
||||
{
|
||||
Key *temp_key = new Key(m_display, i);
|
||||
Key *temp_key = new Key(m_display, i, m_state.keyboard);
|
||||
if (temp_key->m_keyname.length())
|
||||
AddInput(temp_key);
|
||||
else
|
||||
@ -30,15 +30,15 @@ KeyboardMouse::KeyboardMouse(Window window) : m_window(window)
|
||||
}
|
||||
|
||||
// Mouse Buttons
|
||||
AddInput(new Button(Button1Mask));
|
||||
AddInput(new Button(Button2Mask));
|
||||
AddInput(new Button(Button3Mask));
|
||||
AddInput(new Button(Button4Mask));
|
||||
AddInput(new Button(Button5Mask));
|
||||
AddInput(new Button(Button1Mask, m_state.buttons));
|
||||
AddInput(new Button(Button2Mask, m_state.buttons));
|
||||
AddInput(new Button(Button3Mask, m_state.buttons));
|
||||
AddInput(new Button(Button4Mask, m_state.buttons));
|
||||
AddInput(new Button(Button5Mask, m_state.buttons));
|
||||
|
||||
// Mouse Cursor, X-/+ and Y-/+
|
||||
for (unsigned int i=0; i<4; ++i)
|
||||
AddInput(new Cursor(!!(i&2), !!(i&1)));
|
||||
for (int i = 0; i != 4; ++i)
|
||||
AddInput(new Cursor(!!(i & 2), !!(i & 1), (&m_state.cursor.x)[!!(i & 2)]));
|
||||
}
|
||||
|
||||
KeyboardMouse::~KeyboardMouse()
|
||||
@ -46,16 +46,6 @@ KeyboardMouse::~KeyboardMouse()
|
||||
XCloseDisplay(m_display);
|
||||
}
|
||||
|
||||
ControlState KeyboardMouse::GetInputState(const ControllerInterface::Device::Input* const input) const
|
||||
{
|
||||
return ((Input*)input)->GetState(&m_state);
|
||||
}
|
||||
|
||||
void KeyboardMouse::SetOutputState(const ControllerInterface::Device::Output* const output, const ControlState state)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
bool KeyboardMouse::UpdateInput()
|
||||
{
|
||||
XQueryKeymap(m_display, m_state.keyboard);
|
||||
@ -96,9 +86,8 @@ int KeyboardMouse::GetId() const
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
KeyboardMouse::Key::Key(Display* const display, KeyCode keycode)
|
||||
: m_display(display), m_keycode(keycode)
|
||||
KeyboardMouse::Key::Key(Display* const display, KeyCode keycode, const char* keyboard)
|
||||
: m_display(display), m_keyboard(keyboard), m_keycode(keycode)
|
||||
{
|
||||
int i = 0;
|
||||
KeySym keysym = 0;
|
||||
@ -122,21 +111,21 @@ KeyboardMouse::Key::Key(Display* const display, KeyCode keycode)
|
||||
m_keyname = std::string(XKeysymToString(keysym));
|
||||
}
|
||||
|
||||
ControlState KeyboardMouse::Key::GetState(const State* const state) const
|
||||
ControlState KeyboardMouse::Key::GetState() const
|
||||
{
|
||||
KeyCode shift = XKeysymToKeycode(m_display, XK_Shift_L);
|
||||
return (state->keyboard[m_keycode/8] & (1 << (m_keycode%8))) != 0
|
||||
&& (state->keyboard[shift/8] & (1 << (shift%8))) == 0;
|
||||
const KeyCode shift = XKeysymToKeycode(m_display, XK_Shift_L);
|
||||
return (m_keyboard[m_keycode / 8] & (1 << (m_keycode % 8))) != 0
|
||||
&& (m_keyboard[shift / 8] & (1 << (shift % 8))) == 0;
|
||||
}
|
||||
|
||||
ControlState KeyboardMouse::Button::GetState(const State* const state) const
|
||||
ControlState KeyboardMouse::Button::GetState() const
|
||||
{
|
||||
return ((state->buttons & m_index) > 0);
|
||||
return ((m_buttons & m_index) != 0);
|
||||
}
|
||||
|
||||
ControlState KeyboardMouse::Cursor::GetState(const State* const state) const
|
||||
ControlState KeyboardMouse::Cursor::GetState() const
|
||||
{
|
||||
return std::max(0.0f, ControlState((&state->cursor.x)[m_index]) / (m_positive ? 1.0f : -1.0f));
|
||||
return std::max(0.0f, m_cursor / (m_positive ? 1.0f : -1.0f));
|
||||
}
|
||||
|
||||
std::string KeyboardMouse::Key::GetName() const
|
||||
|
@ -15,11 +15,8 @@ void Init(std::vector<ControllerInterface::Device*>& devices, void* const hwnd);
|
||||
|
||||
class KeyboardMouse : public ControllerInterface::Device
|
||||
{
|
||||
friend class ControllerInterface;
|
||||
friend class ControllerInterface::ControlReference;
|
||||
|
||||
protected:
|
||||
|
||||
|
||||
private:
|
||||
struct State
|
||||
{
|
||||
char keyboard[32];
|
||||
@ -30,68 +27,53 @@ protected:
|
||||
} cursor;
|
||||
};
|
||||
|
||||
class Input : public ControllerInterface::Device::Input
|
||||
{
|
||||
friend class KeyboardMouse;
|
||||
|
||||
protected:
|
||||
virtual ControlState GetState(const State* const state) const = 0;
|
||||
};
|
||||
|
||||
class Key : public Input
|
||||
{
|
||||
friend class KeyboardMouse;
|
||||
|
||||
public:
|
||||
std::string GetName() const;
|
||||
|
||||
protected:
|
||||
Key(Display* const display, KeyCode keycode);
|
||||
ControlState GetState(const State* const state) const;
|
||||
Key(Display* display, KeyCode keycode, const char* keyboard);
|
||||
ControlState GetState() const;
|
||||
|
||||
private:
|
||||
std::string m_keyname;
|
||||
Display* const m_display;
|
||||
const char* const m_keyboard;
|
||||
const KeyCode m_keycode;
|
||||
std::string m_keyname;
|
||||
|
||||
};
|
||||
|
||||
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;
|
||||
Button(unsigned int index, unsigned int& buttons)
|
||||
: m_buttons(buttons), m_index(index) {}
|
||||
ControlState GetState() const;
|
||||
|
||||
private:
|
||||
const unsigned int& m_buttons;
|
||||
const unsigned int m_index;
|
||||
};
|
||||
|
||||
class Cursor : public Input
|
||||
{
|
||||
friend class KeyboardMouse;
|
||||
public:
|
||||
std::string GetName() const;
|
||||
bool IsDetectable() { return false; }
|
||||
protected:
|
||||
Cursor(const unsigned int index, const bool positive) : m_index(index), m_positive(positive) {}
|
||||
ControlState GetState(const State* const state) const;
|
||||
Cursor(u8 index, bool positive, const float& cursor)
|
||||
: m_cursor(cursor), m_index(index), m_positive(positive) {}
|
||||
ControlState GetState() const;
|
||||
|
||||
private:
|
||||
const unsigned int m_index;
|
||||
const bool m_positive;
|
||||
const float& m_cursor;
|
||||
const u8 m_index;
|
||||
const bool m_positive;
|
||||
};
|
||||
|
||||
public:
|
||||
bool UpdateInput();
|
||||
bool UpdateOutput();
|
||||
|
||||
ControlState GetInputState(const ControllerInterface::Device::Input* const input) const;
|
||||
void SetOutputState(const ControllerInterface::Device::Output* const output, const ControlState state);
|
||||
|
||||
public:
|
||||
KeyboardMouse(Window window);
|
||||
~KeyboardMouse();
|
||||
|
||||
@ -100,9 +82,9 @@ public:
|
||||
int GetId() const;
|
||||
|
||||
private:
|
||||
Window m_window;
|
||||
Display* m_display;
|
||||
State m_state;
|
||||
Window m_window;
|
||||
Display* m_display;
|
||||
State m_state;
|
||||
};
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user