Browse Source

Implement scroll wheel navigation

up/down/left/right = arrow keys
ctrl+up/down = zoom automap in/out
pull/527/head
Anders Jenbo 6 years ago
parent
commit
d04e0e44bb
  1. 4
      SourceS/sdl_compat.h
  2. 9
      SourceX/DiabloUI/diabloui.cpp
  3. 14
      SourceX/miniwin/misc_msg.cpp

4
SourceS/sdl_compat.h

@ -3,6 +3,8 @@
#include <SDL.h>
#ifndef USE_SDL1
#define SDLC_KEYSTATE_LEFTCTRL SDL_SCANCODE_LCTRL
#define SDLC_KEYSTATE_RIGHTCTRL SDL_SCANCODE_RCTRL
#define SDLC_KEYSTATE_LEFTSHIFT SDL_SCANCODE_LSHIFT
#define SDLC_KEYSTATE_RIGHTSHIFT SDL_SCANCODE_RSHIFT
#define SDLC_KEYSTATE_MENU SDL_SCANCODE_MENU
@ -11,6 +13,8 @@
#define SDLC_KEYSTATE_LEFT SDL_SCANCODE_LEFT
#define SDLC_KEYSTATE_RIGHT SDL_SCANCODE_RIGHT
#else
#define SDLC_KEYSTATE_LEFTCTRL SDLK_LCTRL
#define SDLC_KEYSTATE_RIGHTCTRL SDLK_RCTRL
#define SDLC_KEYSTATE_LEFTSHIFT SDLK_LSHIFT
#define SDLC_KEYSTATE_RIGHTSHIFT SDLK_LSHIFT
#define SDLC_KEYSTATE_MENU SDLK_MENU

9
SourceX/DiabloUI/diabloui.cpp

@ -240,6 +240,15 @@ void UiFocusNavigation(SDL_Event *event)
break;
}
if (event->type == SDL_MOUSEWHEEL) {
if (event->wheel.y > 0) {
UiFocus(SelectedItem - 1, UiItemsWraps);
} else if (event->wheel.y < 0) {
UiFocus(SelectedItem + 1, UiItemsWraps);
}
return;
}
if (SDL_IsTextInputActive()) {
switch (event->type) {
case SDL_KEYDOWN: {

14
SourceX/miniwin/misc_msg.cpp

@ -549,6 +549,18 @@ WINBOOL PeekMessageA(LPMSG lpMsg)
}
} break;
#ifndef USE_SDL1
case SDL_MOUSEWHEEL:
lpMsg->message = DVL_WM_KEYDOWN;
if (e.wheel.y > 0) {
lpMsg->wParam = GetAsyncKeyState(DVL_VK_CONTROL) ? DVL_VK_OEM_PLUS : DVL_VK_UP;
} else if (e.wheel.y < 0) {
lpMsg->wParam = GetAsyncKeyState(DVL_VK_CONTROL) ? DVL_VK_OEM_MINUS : DVL_VK_DOWN;
} else if (e.wheel.x > 0) {
lpMsg->wParam = DVL_VK_LEFT;
} else if (e.wheel.x < 0) {
lpMsg->wParam = DVL_VK_RIGHT;
}
break;
#if SDL_VERSION_ATLEAST(2, 0, 4)
case SDL_AUDIODEVICEADDED:
return false_avail("SDL_AUDIODEVICEADDED", e.adevice.which);
@ -696,6 +708,8 @@ SHORT GetAsyncKeyState(int vKey)
return SDL_GetMouseState(NULL, NULL) & SDL_BUTTON(SDL_BUTTON_RIGHT);
const Uint8 *state = SDLC_GetKeyState();
switch (vKey) {
case DVL_VK_CONTROL:
return state[SDLC_KEYSTATE_LEFTCTRL] || state[SDLC_KEYSTATE_RIGHTCTRL] ? 0x8000 : 0;
case DVL_VK_SHIFT:
return state[SDLC_KEYSTATE_LEFTSHIFT] || state[SDLC_KEYSTATE_RIGHTSHIFT] ? 0x8000 : 0;
case DVL_VK_MENU:

Loading…
Cancel
Save