Handle more mouse buttons(middle, 4, 5)

This commit is contained in:
LunaMoo 2017-04-27 13:54:38 +02:00
parent 1d0dab2020
commit a9d9063680
4 changed files with 56 additions and 54 deletions

View file

@ -576,6 +576,8 @@ const KeyMap_IntStrPair key_names[] = {
{NKCODE_EXT_MOUSEBUTTON_1, "MB1"},
{NKCODE_EXT_MOUSEBUTTON_2, "MB2"},
{NKCODE_EXT_MOUSEBUTTON_3, "MB3"},
{NKCODE_EXT_MOUSEBUTTON_4, "MB4"},
{NKCODE_EXT_MOUSEBUTTON_5, "MB5"},
{NKCODE_EXT_MOUSEWHEEL_UP, "MWheelU"},
{NKCODE_EXT_MOUSEWHEEL_DOWN, "MWheelD"},

View file

@ -115,7 +115,10 @@ std::map<int, int> windowsTransTable = InitConstMap<int, int>
(VK_F12, NKCODE_F12)
(VK_OEM_102, NKCODE_EXT_PIPE)
(VK_LBUTTON, NKCODE_EXT_MOUSEBUTTON_1)
(VK_RBUTTON, NKCODE_EXT_MOUSEBUTTON_2);
(VK_RBUTTON, NKCODE_EXT_MOUSEBUTTON_2)
(VK_MBUTTON, NKCODE_EXT_MOUSEBUTTON_3)
(VK_XBUTTON1, NKCODE_EXT_MOUSEBUTTON_4)
(VK_XBUTTON2, NKCODE_EXT_MOUSEBUTTON_5);
int KeyboardDevice::UpdateState() {
// Nothing to do, all done in WM_INPUT

View file

@ -61,8 +61,7 @@ namespace WindowsRawInput {
static size_t rawInputBufferSize;
static bool menuActive;
static bool focused = true;
static bool mouseLeftDown = false;
static bool mouseRightDown = false;
static bool mouseDown[5] = { false, false, false, false, false }; //left, right, middle, 4, 5
static float mouseX = 0.0f;
static float mouseY = 0.0f;
@ -207,61 +206,57 @@ namespace WindowsRawInput {
g_mouseDeltaX += raw->data.mouse.lLastX;
g_mouseDeltaY += raw->data.mouse.lLastY;
if (g_Config.bMouseControl && (GetUIState() == UISTATE_INGAME || g_Config.bMapMouse)) {
if (raw->data.mouse.usButtonFlags & RI_MOUSE_LEFT_BUTTON_DOWN) {
key.flags = KEY_DOWN;
key.keyCode = windowsTransTable[VK_LBUTTON];
NativeTouch(touch);
if (MouseInWindow(hWnd)) {
NativeKey(key);
}
mouseLeftDown = true;
} else if (raw->data.mouse.usButtonFlags & RI_MOUSE_LEFT_BUTTON_UP) {
key.flags = KEY_UP;
key.keyCode = windowsTransTable[VK_LBUTTON];
NativeTouch(touch);
if (MouseInWindow(hWnd)) {
if (!mouseLeftDown) {
// This means they were focused outside, and left clicked inside.
// Seems intentional, so send a down first.
key.flags = KEY_DOWN;
NativeKey(key);
key.flags = KEY_UP;
NativeKey(key);
}
else {
NativeKey(key);
}
}
mouseLeftDown = false;
}
}
const int rawInputDownID[5] = {
RI_MOUSE_LEFT_BUTTON_DOWN,
RI_MOUSE_RIGHT_BUTTON_DOWN,
RI_MOUSE_BUTTON_3_DOWN,
RI_MOUSE_BUTTON_4_DOWN,
RI_MOUSE_BUTTON_5_DOWN
};
const int rawInputUpID[5] = {
RI_MOUSE_LEFT_BUTTON_UP,
RI_MOUSE_RIGHT_BUTTON_UP,
RI_MOUSE_BUTTON_3_UP,
RI_MOUSE_BUTTON_4_UP,
RI_MOUSE_BUTTON_5_UP
};
const int vkInputID[5] = {
VK_LBUTTON,
VK_RBUTTON,
VK_MBUTTON,
VK_XBUTTON1,
VK_XBUTTON2
};
if (raw->data.mouse.usButtonFlags & RI_MOUSE_RIGHT_BUTTON_DOWN) {
key.flags = KEY_DOWN;
key.keyCode = windowsTransTable[VK_RBUTTON];
NativeTouch(touch);
if (MouseInWindow(hWnd)) {
NativeKey(key);
}
mouseRightDown = true;
} else if (raw->data.mouse.usButtonFlags & RI_MOUSE_RIGHT_BUTTON_UP) {
key.flags = KEY_UP;
key.keyCode = windowsTransTable[VK_RBUTTON];
NativeTouch(touch);
if (MouseInWindow(hWnd)) {
if (!mouseRightDown) {
// This means they were focused outside, and right clicked inside.
// Seems intentional, so send a down first.
for (int i = 0; i < 5; i++) {
if (i > 0 || (g_Config.bMouseControl && (GetUIState() == UISTATE_INGAME || g_Config.bMapMouse))) {
if (raw->data.mouse.usButtonFlags & rawInputDownID[i]) {
key.flags = KEY_DOWN;
NativeKey(key);
key.keyCode = windowsTransTable[vkInputID[i]];
NativeTouch(touch);
if (MouseInWindow(hWnd)) {
NativeKey(key);
}
mouseDown[i] = true;
} else if (raw->data.mouse.usButtonFlags & rawInputUpID[i]) {
key.flags = KEY_UP;
NativeKey(key);
} else {
NativeKey(key);
key.keyCode = windowsTransTable[vkInputID[i]];
NativeTouch(touch);
if (MouseInWindow(hWnd)) {
if (!mouseDown[i]) {
// This means they were focused outside, and left clicked inside.
// Seems intentional, so send a down first.
key.flags = KEY_DOWN;
NativeKey(key);
key.flags = KEY_UP;
NativeKey(key);
} else {
NativeKey(key);
}
}
mouseDown[i] = false;
}
}
mouseRightDown = false;
}
// TODO : Smooth and translate to an axis every frame.

View file

@ -257,7 +257,9 @@ typedef enum _keycode_t {
NKCODE_EXT_MOUSEBUTTON_1 = 1002,
NKCODE_EXT_MOUSEBUTTON_2 = 1003,
NKCODE_EXT_MOUSEBUTTON_3 = 1004,
NKCODE_EXT_MOUSEBUTTON_3 = 1005,
NKCODE_EXT_MOUSEBUTTON_4 = 1006,
NKCODE_EXT_MOUSEBUTTON_5 = 1007,
NKCODE_EXT_MOUSEWHEEL_UP = 1008,
NKCODE_EXT_MOUSEWHEEL_DOWN = 1009
} keycode_t;