: Software Foundation.
Authors : os, m
Created : 2007-08-27 13:55:49
- Updated : 2017-09-10 12:13:00
+ Updated : 2018-07-08 10:54:00
Comment : RetroPlatform Player interprocess communication include file
*****************************************************************************/
#include <windows.h>
-#define RETROPLATFORM_API_VER "7.2"
+#define RETROPLATFORM_API_VER "7.3"
#define RETROPLATFORM_API_VER_MAJOR 7
-#define RETROPLATFORM_API_VER_MINOR 2
+#define RETROPLATFORM_API_VER_MINOR 3
#define RPIPC_HostWndClass "RetroPlatformHost%s"
#define RPIPC_GuestWndClass "RetroPlatformGuest%d"
#define RP_IPC_TO_HOST_PRIVATE_TYPECLIPDONE (WM_APP + 32) // introduced in RetroPlatform API 7.2
#define RP_IPC_TO_HOST_PRIVATE_KEYEVENT (WM_APP + 33) // introduced in RetroPlatform API 7.2
#define RP_IPC_TO_HOST_PRIVATE_GUESTEVENT (WM_APP + 34) // introduced in RetroPlatform API 7.2
+#define RP_IPC_TO_HOST_PRIVATE_KEYREMINDER (WM_APP + 35) // introduced in RetroPlatform API 7.2
+#define RP_IPC_TO_HOST_RAWINPUT_EVENT (WM_APP + 36) // introduced in RetroPlatform API 7.3
// ****************************************************************************
// Host-to-Guest Messages
#define RP_IPC_TO_GUEST_PRIVATE_CANESCAPE (WM_APP + 226) // introduced in RetroPlatform API 7.2
#define RP_IPC_TO_GUEST_PRIVATE_LOGGING (WM_APP + 227) // introduced in RetroPlatform API 7.2
#define RP_IPC_TO_GUEST_PRIVATE_INPUTDEVICES (WM_APP + 228) // introduced in RetroPlatform API 7.2
+#define RP_IPC_TO_GUEST_PRIVATE_KEYREMINDER (WM_APP + 229) // introduced in RetroPlatform API 7.2
// ****************************************************************************
// Message Data Structures and Defines
#define RP_FEATURE_MEMORY_BASIC 0x02000000 // Memory I/O basic features: Read, Write
#define RP_FEATURE_MEMORY_ADVANCED 0x04000000 // Memory I/O advanced features: Watch, Find, Alert, Freeze, Lock, Unlock, Off (must set both flags if full set is supported!)
#define RP_FEATURE_SCREENCAPTURE 0x08000000 // new screen capture functionality is available (see RP_IPC_TO_GUEST_SCREENCAPTURE message)
+#define RP_FEATURE_RAWINPUT_EVENT 0x10000000 // RawInput mouse buttons events are forwarded via RP_IPC_TO_HOST_RAWINPUT_EVENT messages
typedef struct RPScreenMode
{
static uae_u8 rawkeystate[256];
static int rawprevkey;
-static void handle_rawinput_2 (RAWINPUT *raw)
+static void handle_rawinput_2 (RAWINPUT *raw, LPARAM lParam)
{
int i, num;
struct didata *did;
if (num == num_mouse)
return;
+ USHORT usButtonFlags = rm->usButtonFlags;
+
+#ifdef RETROPLATFORM
+ if (isfocus() > 0 && usButtonFlags) {
+ usButtonFlags = rp_rawbuttons(lParam, usButtonFlags);
+ }
+#endif
+
if (isfocus () > 0 || istest) {
static int lastx[MAX_INPUT_DEVICES], lasty[MAX_INPUT_DEVICES];
static int lastmbr[MAX_INPUT_DEVICES];
for (i = 0; i < (5 > did->buttons ? did->buttons : 5); i++) {
- if (rm->usButtonFlags & (3 << (i * 2))) {
- int state = (rm->usButtonFlags & (1 << (i * 2))) ? 1 : 0;
+ if (usButtonFlags & (3 << (i * 2))) {
+ int state = (usButtonFlags & (1 << (i * 2))) ? 1 : 0;
if (!istest && i == 2 && (currprefs.input_mouse_untrap & MOUSEUNTRAP_MIDDLEBUTTON))
continue;
setmousebuttonstate (num, i, state);
}
}
if (isfocus () && !istest) {
- if (did->buttons >= 3 && (rm->usButtonFlags & RI_MOUSE_MIDDLE_BUTTON_DOWN)) {
+ if (did->buttons >= 3 && (usButtonFlags & RI_MOUSE_MIDDLE_BUTTON_DOWN)) {
if (currprefs.input_mouse_untrap & MOUSEUNTRAP_MIDDLEBUTTON) {
if ((isfullscreen() < 0 && currprefs.win32_minimize_inactive) || isfullscreen() > 0)
minimizewindow(0);
if (GetRawInputData ((HRAWINPUT)lParam, RID_INPUT, lpb, &dwSize, sizeof (RAWINPUTHEADER)) == dwSize) {
raw = (RAWINPUT*)lpb;
if (!isguiactive() || (inputdevice_istest() && isguiactive())) {
- handle_rawinput_2 (raw);
+ handle_rawinput_2 (raw, lParam);
}
DefRawInputProc (&raw, 1, sizeof (RAWINPUTHEADER));
} else {
feat |= RP_FEATURE_INPUTDEVICE_JOYPAD;
feat |= RP_FEATURE_INPUTDEVICE_ANALOGSTICK;
feat |= RP_FEATURE_INPUTDEVICE_LIGHTPEN;
+ feat |= RP_FEATURE_RAWINPUT_EVENT;
write_log (_T("RP_IPC_TO_HOST_FEATURES=%x %d\n"), feat, WIN32GFX_IsPicassoScreen(mon));
RPSendMessagex (RP_IPC_TO_HOST_FEATURES, feat, 0, NULL, 0, &guestinfo, NULL);
}
return 0;
}
+USHORT rp_rawbuttons(LPARAM lParam, USHORT usButtonFlags)
+{
+ LRESULT lr;
+ if (!initialized)
+ return usButtonFlags;
+ if (RPSendMessage(RP_IPC_TO_HOST_RAWINPUT_EVENT, 0, lParam, NULL, 0, &guestinfo, &lr))
+ usButtonFlags = (USHORT)lr;
+ return usButtonFlags;
+}
+
int rp_isactive (void)
{
return initialized;
extern void rp_rtg_switch (void);
extern void rp_screenmode_changed (void);
extern void rp_keymap(TrapContext*, uaecptr, uae_u32);
+extern USHORT rp_rawbuttons(LPARAM lParam, USHORT usButtonFlags);
extern TCHAR *rp_param;
extern int rp_rpescapekey;