forked from cafeberry/cafeberry
is it morally wrong to steal code
This commit is contained in:
@@ -301,6 +301,108 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
switch (message)
|
||||
{
|
||||
case WM_KILLFOCUS:
|
||||
g_KBMInput.ClearAllState();
|
||||
g_KBMInput.SetWindowFocused(false);
|
||||
if (g_KBMInput.IsMouseGrabbed())
|
||||
g_KBMInput.SetMouseGrabbed(false);
|
||||
break;
|
||||
case WM_SETFOCUS:
|
||||
g_KBMInput.SetWindowFocused(true);
|
||||
break;
|
||||
case WM_CHAR:
|
||||
if (wParam >= 0x20 || wParam == 0x08 || wParam == 0x0D)
|
||||
g_KBMInput.OnChar(static_cast<wchar_t>(wParam));
|
||||
break;
|
||||
|
||||
case WM_KEYDOWN:
|
||||
case WM_SYSKEYDOWN:
|
||||
{
|
||||
int vk = static_cast<int>(wParam);
|
||||
if ((lParam & 0x40000000) && vk != VK_LEFT && vk != VK_RIGHT && vk != VK_BACK)
|
||||
break;
|
||||
const Minecraft* pm = Minecraft::GetInstance();
|
||||
ChatScreen* chat = pm && pm->screen ? dynamic_cast<ChatScreen*>(pm->screen) : nullptr;
|
||||
if (chat)
|
||||
{
|
||||
if (vk == 'V' && (GetKeyState(VK_CONTROL) & 0x8000))
|
||||
{ chat->handlePasteRequest(); break; }
|
||||
if ((vk == VK_UP || vk == VK_DOWN) && !(lParam & 0x40000000))
|
||||
{ if (vk == VK_UP) chat->handleHistoryUp(); else chat->handleHistoryDown(); break; }
|
||||
if (vk >= '1' && vk <= '9')
|
||||
break;
|
||||
if (vk == VK_SHIFT)
|
||||
break;
|
||||
}
|
||||
|
||||
if (vk == VK_SHIFT)
|
||||
vk = (MapVirtualKey((lParam >> 16) & 0xFF, MAPVK_VSC_TO_VK_EX) == VK_RSHIFT) ? VK_RSHIFT : VK_LSHIFT;
|
||||
else if (vk == VK_CONTROL)
|
||||
vk = (lParam & (1 <, 24)) ? VK_RCONTROL : VK_LCONTROL;
|
||||
else if (vk == VK_MENU)
|
||||
vk = (lParam & (1 << 24)) ? VK_RMENU : VK_LMENU;
|
||||
g_KBMInput.OnKeyDown(vk);
|
||||
break;
|
||||
}
|
||||
case WM_KEYUP:
|
||||
case WM_SYSKEYUP:
|
||||
{
|
||||
int vk = static_cast<int>(wParam);
|
||||
if (vk == VK_SHIFT)
|
||||
vk = (MapVirtualKey((lParam >> 16) & 0xFF, MAPVK_VSC_TO_VK_EX) == VK_RSHIFT) ? VK_RSHIFT : VK_LSHIFT;
|
||||
else if (vk == VK_CONTROL)
|
||||
vk = (lParam & (1 << 24)) ? VK_RCONTROL : VK_LCONTROL;
|
||||
else if (vk == VK_MENU)
|
||||
vk = (lParam & (1 << 24)) ? VK_RMENU : VK_LMENU;
|
||||
g_KBMInput.OnKeyUp(vk);
|
||||
break;
|
||||
}
|
||||
|
||||
case WM_LBUTTONDOWN:
|
||||
g_KBMInput.OnMouseButtonDown(KeyboardMouseInput::MOUSE_LEFT);
|
||||
break;
|
||||
case WM_LBUTTONUP:
|
||||
g_KBMInput.OnMouseButtonUp(KeyboardMouseInput::MOUSE_LEFT);
|
||||
break;
|
||||
case WM_RBUTTONDOWN:
|
||||
g_KBMInput.OnMouseButtonDown(KeyboardMouseInput::MOUSE_RIGHT);
|
||||
break;
|
||||
case WM_RBUTTONUP:
|
||||
g_KBMInput.OnMouseButtonUp(KeyboardMouseInput::MOUSE_RIGHT);
|
||||
break;
|
||||
case WM_MBUTTONDOWN:
|
||||
g_KBMInput.OnMouseButtonDown(KeyboardMouseInput::MOUSE_MIDDLE);
|
||||
break;
|
||||
case WM_MBUTTONUP:
|
||||
g_KBMInput.OnMouseButtonUp(KeyboardMouseInput::MOUSE_MIDDLE);
|
||||
break;
|
||||
|
||||
case WM_MOUSEMOVE:
|
||||
g_KBMInput.OnMouseMove(LOWORD(lParam), HIWORD(lParam));
|
||||
break;
|
||||
|
||||
case WM_MOUSEWHEEL:
|
||||
g_KBMInput.OnMouseWheel(GET_WHEEL_DELTA_WPARAM(wParam));
|
||||
break;
|
||||
|
||||
case WM_INPUT:
|
||||
{
|
||||
UINT dwSize = 0;
|
||||
GetRawInputData((HRAWINPUT)lParam, RID_INPUT, nullptr, &dwSize, sizeof(RAWINPUTHEADER));
|
||||
if (dwSize > 0 && dwSize <= 256)
|
||||
{
|
||||
BYTE rawBuffer[256];
|
||||
if (GetRawInputData((HRAWINPUT)lParam, RID_INPUT, rawBuffer, &dwSize, sizeof(RAWINPUTHEADER)) == dwSize)
|
||||
{
|
||||
const RAWINPUT* raw = (RAWINPUT*)rawBuffer;
|
||||
if (raw->header.dwType == RIM_TYPEMOUSE)
|
||||
{
|
||||
g_KBMInput.OnRawMouseDelta(raw->data.mouse.lLastX, raw->data.mouse.lLastY);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case WM_SETCURSOR:
|
||||
if (LOWORD(lParam) == HTCLIENT || LOWORD(lParam) == HTCAPTION)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user