- // Motion data comes in two parts: motion type and
- // displacement/rotation along three axis.
- // Orientation is a right handed coordinate system with
- // X goes right, Y goes up and Z goes towards viewer, e.g.
- // the one used in OpenGL
- if (pRawInput->data.hid.bRawData[0] ==
- SPNAV_EVENT_MOTION_TRANSLATION)
- { // Translation vector
- short* pnData = (short*)(&pRawInput->data.hid.bRawData[1]);
- short X = pnData[0];
- short Y = -pnData[2];
- short Z = pnData[1];
- INVOKE_WCB(*window, SpaceMotion, (X, Y, Z));
- }
- else if (pRawInput->data.hid.bRawData[0] ==
+ SFG_Window* window = fgWindowByHandle(hwnd);
+ if ((window == NULL))
+ return;
+
+ if (sRidDeviceInfo.hid.dwVendorId == LOGITECH_VENDOR_ID)
+ {
+ // Motion data comes in two parts: motion type and
+ // displacement/rotation along three axis.
+ // Orientation is a right handed coordinate system with
+ // X goes right, Y goes up and Z goes towards viewer, e.g.
+ // the one used in OpenGL
+ if (pRawInput->data.hid.bRawData[0] ==
+ SPNAV_EVENT_MOTION_TRANSLATION)
+ { // Translation vector
+ short* pnData = (short*)(&pRawInput->data.hid.bRawData[1]);
+ short X = pnData[0];
+ short Y = -pnData[2];
+ short Z = pnData[1];
+ INVOKE_WCB(*window, SpaceMotion, (X, Y, Z));
+ }
+ else if (pRawInput->data.hid.bRawData[0] ==