mirror of
https://github.com/hrydgard/ppsspp.git
synced 2025-04-02 11:01:50 -04:00
Handle more mouse buttons(middle, 4, 5)
This commit is contained in:
parent
1d0dab2020
commit
a9d9063680
4 changed files with 56 additions and 54 deletions
|
@ -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"},
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Add table
Reference in a new issue