mirror of
https://github.com/ZDoom/qzdoom.git
synced 2024-11-10 14:51:51 +00:00
- Fixed: The mouse wheel generated no events in GUI mode if you weren't
fullscreen. (e.g. You could no longer scroll the console with the mouse buffer.) - Fixed: Wheeling down was seen as wheeling up with the Win32 mouse. SVN r1618 (trunk)
This commit is contained in:
parent
12959a1bd1
commit
092512c44a
4 changed files with 63 additions and 35 deletions
|
@ -1,4 +1,8 @@
|
|||
May 27, 2009
|
||||
- Fixed: The mouse wheel generated no events in GUI mode if you weren't
|
||||
fullscreen. (e.g. You could no longer scroll the console with the mouse
|
||||
buffer.)
|
||||
- Fixed: Wheeling down was seen as wheeling up with the Win32 mouse.
|
||||
- EV_GUI_Key(Down|Up|Repeat) events no longer provide shifted key codes
|
||||
in data2. This was just unnecessary overhead that wasn't really needed
|
||||
anywhere.
|
||||
|
|
|
@ -143,6 +143,7 @@ extern menu_t JoystickMenu;
|
|||
EXTERN_CVAR (String, language)
|
||||
EXTERN_CVAR (Bool, lookstrafe)
|
||||
|
||||
static int WheelDelta;
|
||||
|
||||
extern BOOL paused;
|
||||
static bool noidle = false;
|
||||
|
@ -415,6 +416,32 @@ bool GUIWndProcHook(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam, LRESU
|
|||
}
|
||||
D_PostEvent(&ev);
|
||||
return true;
|
||||
|
||||
// Note: If the mouse is grabbed, it sends the mouse wheel events itself.
|
||||
case WM_MOUSEWHEEL:
|
||||
if (wParam & MK_SHIFT) ev.data3 |= GKM_SHIFT;
|
||||
if (wParam & MK_CONTROL) ev.data3 |= GKM_CTRL;
|
||||
if (GetKeyState(VK_MENU) & 0x8000) ev.data3 |= GKM_ALT;
|
||||
WheelDelta += (SHORT)HIWORD(wParam);
|
||||
if (WheelDelta < 0)
|
||||
{
|
||||
ev.subtype = EV_GUI_WheelDown;
|
||||
while (WheelDelta <= -WHEEL_DELTA)
|
||||
{
|
||||
D_PostEvent(&ev);
|
||||
WheelDelta += WHEEL_DELTA;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ev.subtype = EV_GUI_WheelUp;
|
||||
while (WheelDelta >= WHEEL_DELTA)
|
||||
{
|
||||
D_PostEvent(&ev);
|
||||
WheelDelta -= WHEEL_DELTA;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -80,6 +80,7 @@ protected:
|
|||
void PostButtonEvent(int button, bool down);
|
||||
void ClearButtonState();
|
||||
|
||||
int WheelMove;
|
||||
int LastX, LastY; // for m_filter
|
||||
WORD ButtonState; // bit mask of current button states (1=down, 0=up)
|
||||
};
|
||||
|
|
|
@ -266,6 +266,7 @@ FMouse::FMouse()
|
|||
{
|
||||
LastX = LastY = 0;
|
||||
ButtonState = 0;
|
||||
WheelMove = 0;
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
|
@ -316,33 +317,9 @@ void FMouse::WheelMoved(int wheelmove)
|
|||
event_t ev = { 0 };
|
||||
int dir;
|
||||
|
||||
if (GUICapture)
|
||||
{
|
||||
ev.type = EV_GUI_Event;
|
||||
if (wheelmove < 0)
|
||||
{
|
||||
dir = WHEEL_DELTA;
|
||||
ev.subtype = EV_GUI_WheelDown;
|
||||
}
|
||||
else
|
||||
{
|
||||
dir = -WHEEL_DELTA;
|
||||
ev.subtype = EV_GUI_WheelUp;
|
||||
}
|
||||
/* FIXME
|
||||
ev.data3 = ((KeyState[VK_SHIFT]&128) ? GKM_SHIFT : 0) |
|
||||
((KeyState[VK_CONTROL]&128) ? GKM_CTRL : 0) |
|
||||
((KeyState[VK_MENU]&128) ? GKM_ALT : 0);
|
||||
*/
|
||||
while (abs(wheelmove) >= WHEEL_DELTA)
|
||||
{
|
||||
D_PostEvent(&ev);
|
||||
wheelmove += dir;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (wheelmove < 0)
|
||||
WheelMove += wheelmove;
|
||||
|
||||
if (WheelMove < 0)
|
||||
{
|
||||
dir = WHEEL_DELTA;
|
||||
ev.data1 = KEY_MWHEELDOWN;
|
||||
|
@ -352,13 +329,30 @@ void FMouse::WheelMoved(int wheelmove)
|
|||
dir = -WHEEL_DELTA;
|
||||
ev.data1 = KEY_MWHEELUP;
|
||||
}
|
||||
while (abs(wheelmove) >= WHEEL_DELTA)
|
||||
|
||||
if (!GUICapture)
|
||||
{
|
||||
while (abs(WheelMove) >= WHEEL_DELTA)
|
||||
{
|
||||
ev.type = EV_KeyDown;
|
||||
D_PostEvent(&ev);
|
||||
ev.type = EV_KeyUp;
|
||||
D_PostEvent(&ev);
|
||||
wheelmove += dir;
|
||||
WheelMove += dir;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ev.type = EV_GUI_Event;
|
||||
ev.subtype = (WheelMove < 0) ? EV_GUI_WheelDown : EV_GUI_WheelUp;
|
||||
if (GetKeyState(VK_SHIFT) & 0x8000) ev.data3 |= GKM_SHIFT;
|
||||
if (GetKeyState(VK_CONTROL) & 0x8000) ev.data3 |= GKM_CTRL;
|
||||
if (GetKeyState(VK_MENU) & 0x8000) ev.data3 |= GKM_ALT;
|
||||
ev.data1 = 0;
|
||||
while (abs(WheelMove) >= WHEEL_DELTA)
|
||||
{
|
||||
D_PostEvent(&ev);
|
||||
WheelMove += dir;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -420,6 +414,8 @@ void FMouse::ClearButtonState()
|
|||
}
|
||||
ButtonState = 0;
|
||||
}
|
||||
// Reset mouse wheel accumulation to 0.
|
||||
WheelMove = 0;
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
|
@ -967,7 +963,7 @@ bool FWin32Mouse::WndProcHook(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPa
|
|||
}
|
||||
else if (message == WM_MOUSEWHEEL)
|
||||
{
|
||||
WheelMoved(HIWORD(wParam));
|
||||
WheelMoved((SHORT)HIWORD(wParam));
|
||||
return true;
|
||||
}
|
||||
else if (message >= WM_LBUTTONDOWN && message <= WM_MBUTTONUP)
|
||||
|
|
Loading…
Reference in a new issue