You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
103 lines
2.3 KiB
103 lines
2.3 KiB
/** |
|
* @file miniwin/misc_msg.h |
|
* |
|
* Contains most of the the demomode specific logic |
|
*/ |
|
#pragma once |
|
|
|
#include <SDL.h> |
|
#include <cstdint> |
|
|
|
#ifdef USE_SDL1 |
|
#include "utils/sdl2_to_1_2_backports.h" |
|
#endif |
|
|
|
#include "engine/point.hpp" |
|
|
|
namespace devilution { |
|
|
|
struct tagMSG { |
|
uint32_t message; |
|
uint32_t wParam; |
|
uint32_t lParam; |
|
}; |
|
|
|
typedef void (*EventHandler)(uint32_t, uint32_t, uint32_t); |
|
|
|
void SetCursorPos(Point position); |
|
void FocusOnCharInfo(); |
|
|
|
void SetMouseButtonEvent(SDL_Event &event, uint32_t type, uint8_t button, Point position); |
|
bool FetchMessage(tagMSG *lpMsg); |
|
|
|
void TranslateMessage(const tagMSG *lpMsg); |
|
void PushMessage(const tagMSG *lpMsg); |
|
void PostMessage(uint32_t type, uint32_t wParam, uint32_t lParam); |
|
void ClearMessageQueue(); |
|
|
|
// Encoding / decoding keyboard modifier state from wParam. |
|
// This is only to be compatible with the old timedemo files. |
|
// TODO: These should be removed next time we change the timedemo format. |
|
|
|
inline uint32_t EncodeKeyboardModState(uint16_t modState) |
|
{ |
|
return modState << 16; |
|
} |
|
|
|
inline uint16_t DecodeKeyboardModState(uint32_t wParam) |
|
{ |
|
return wParam >> 16; |
|
} |
|
|
|
inline uint32_t EncodeMouseModState(uint16_t modState) |
|
{ |
|
uint32_t result = 0; |
|
if ((modState & KMOD_SHIFT) != 0) |
|
result |= 0x0004; |
|
if ((modState & KMOD_CTRL) != 0) |
|
result |= 0x0008; |
|
return result; |
|
} |
|
|
|
inline uint16_t DecodeMouseModState(uint32_t wParam) |
|
{ |
|
uint16_t modState = 0; |
|
if ((wParam & 0x0004) != 0) |
|
modState |= KMOD_LSHIFT; |
|
if ((wParam & 0x0008) != 0) |
|
modState |= KMOD_LCTRL; |
|
return modState; |
|
} |
|
|
|
#define DVL_WM_QUIT 0x0012 |
|
|
|
// |
|
// Events |
|
// |
|
#define DVL_WM_MOUSEMOVE 0x0200 |
|
#define DVL_WM_LBUTTONDOWN 0x0201 |
|
#define DVL_WM_LBUTTONUP 0x0202 |
|
#define DVL_WM_RBUTTONDOWN 0x0204 |
|
#define DVL_WM_RBUTTONUP 0x0205 |
|
#define DVL_WM_MBUTTONDOWN 0x0206 |
|
#define DVL_WM_MBUTTONUP 0x0207 |
|
#define DVL_WM_X1BUTTONDOWN 0x0208 |
|
#define DVL_WM_X1BUTTONUP 0x0209 |
|
#define DVL_WM_X2BUTTONDOWN 0x020A |
|
#define DVL_WM_X2BUTTONUP 0x020B |
|
|
|
#define DVL_WM_KEYDOWN 0x0100 |
|
#define DVL_WM_KEYUP 0x0101 |
|
#define DVL_WM_SYSKEYDOWN 0x0104 |
|
|
|
#define DVL_WM_SYSCOMMAND 0x0112 |
|
|
|
#define DVL_WM_CHAR 0x0102 |
|
#define DVL_WM_CAPTURECHANGED 0x0215 |
|
|
|
#define DVL_WM_PAINT 0x000F |
|
#define DVL_WM_QUERYENDSESSION 0x0011 |
|
|
|
#define DVL_SC_CLOSE 0xF060 |
|
|
|
} // namespace devilution
|
|
|