1
0
Fork 0

Adding Win32EventQueue

This commit is contained in:
Henrik Hautakoski 2020-01-24 15:35:07 +01:00
parent 3477b72371
commit da76c4b4d1
No known key found for this signature in database
GPG key ID: 96765B12FEAC4745
2 changed files with 101 additions and 0 deletions

View file

@ -0,0 +1,79 @@
#include <windows.h>
#include "Win32Keyboard.h"
#include "Win32Mouse.h"
#include "Win32EventQueue.h"
namespace sp {
bool Win32EventQueue::poll(SysEvent& event)
{
MSG msg;
if (PeekMessage(&msg, 0, 0, 0, PM_REMOVE)) {
TranslateMessage(&msg);
if (processMessage(msg, event) == 0) {
return true;
}
}
return false;
}
LRESULT Win32EventQueue::processMessage(MSG msg, SysEvent& event)
{
switch(msg.message) {
case WM_QUIT :
event.type = SysEvent::Quit;
return 0;
// Input, Forward to devices.
case WM_KEYDOWN :
case WM_KEYUP :
OutputDebugString("WM_KEYDOWN\n");
//SetCapture(msg.hwnd);
if (Win32Keyboard::handleMessage(msg)) {
// Keyboard did handle the message.
return 0;
}
break;
case WM_MOUSEMOVE :
case WM_MOUSELEAVE :
if (Win32Mouse::handleMessage(msg)) {
// Mouse did handle the message.
return 0;
}
break;
case WM_LBUTTONDOWN :
case WM_RBUTTONDOWN :
case WM_MBUTTONDOWN :
case WM_XBUTTONDOWN :
SetCapture(msg.hwnd);
if (Win32Mouse::handleMessage(msg)) {
// Mouse did handle the message.
return 0;
}
break;
case WM_LBUTTONUP :
case WM_RBUTTONUP :
case WM_MBUTTONUP :
case WM_XBUTTONUP :
ReleaseCapture();
if (Win32Mouse::handleMessage(msg)) {
// Mouse did handle the message.
return 0;
}
break;
default :
break;
}
// Message was not intercepted. Pass down to window.
return DispatchMessage(&msg);
}
} // namespace sp

View file

@ -0,0 +1,22 @@
#ifndef PLATFORM_WIN32_EVENT_QUEUE_H
#define PLATFORM_WIN32_EVENT_QUEUE_H
#include <windows.h>
#include <Spectre/System/SystemEvent.h>
#include <Platform/PlatformEventQueue.h>
namespace sp {
class Win32EventQueue : public PlatformEventQueue
{
public :
virtual bool poll(SysEvent& event);
private :
LRESULT processMessage(MSG msg, SysEvent& event);
};
} // namespace sp
#endif /* PLATFORM_WIN32_MESSAGE_QUEUE_H */