MCPcopy Create free account
hub / github.com/SFML/SFML / deviceObjectEnumerationCallback

Method deviceObjectEnumerationCallback

src/SFML/Window/Win32/JoystickImpl.cpp:1079–1154  ·  view source on GitHub ↗

///////////////////////////////////////////////////////

Source from the content-addressed store, hash-verified

1077
1078////////////////////////////////////////////////////////////
1079BOOL CALLBACK JoystickImpl::deviceObjectEnumerationCallback(const DIDEVICEOBJECTINSTANCE* deviceObjectInstance, void* userData)
1080{
1081 JoystickImpl& joystick = *reinterpret_cast<JoystickImpl*>(userData);
1082
1083 if (DIDFT_GETTYPE(deviceObjectInstance->dwType) & DIDFT_AXIS)
1084 {
1085 // Axes
1086 if (deviceObjectInstance->guidType == guids::GUID_XAxis)
1087 joystick.m_axes[Joystick::Axis::X] = DIJOFS_X;
1088 else if (deviceObjectInstance->guidType == guids::GUID_YAxis)
1089 joystick.m_axes[Joystick::Axis::Y] = DIJOFS_Y;
1090 else if (deviceObjectInstance->guidType == guids::GUID_ZAxis)
1091 joystick.m_axes[Joystick::Axis::Z] = DIJOFS_Z;
1092 else if (deviceObjectInstance->guidType == guids::GUID_RzAxis)
1093 joystick.m_axes[Joystick::Axis::R] = DIJOFS_RZ;
1094 else if (deviceObjectInstance->guidType == guids::GUID_RxAxis)
1095 joystick.m_axes[Joystick::Axis::U] = DIJOFS_RX;
1096 else if (deviceObjectInstance->guidType == guids::GUID_RyAxis)
1097 joystick.m_axes[Joystick::Axis::V] = DIJOFS_RY;
1098 else if (deviceObjectInstance->guidType == guids::GUID_Slider)
1099 {
1100 if (joystick.m_axes[Joystick::Axis::U] == -1)
1101 joystick.m_axes[Joystick::Axis::U] = DIJOFS_SLIDER(0);
1102 else
1103 joystick.m_axes[Joystick::Axis::V] = DIJOFS_SLIDER(1);
1104 }
1105 else
1106 return DIENUM_CONTINUE;
1107
1108 // Set the axis' value range to that of a signed short: [-32768, 32767]
1109 auto propertyRange = DIPROPRANGE();
1110 propertyRange.diph.dwSize = sizeof(propertyRange);
1111 propertyRange.diph.dwHeaderSize = sizeof(propertyRange.diph);
1112 propertyRange.diph.dwObj = deviceObjectInstance->dwType;
1113 propertyRange.diph.dwHow = DIPH_BYID;
1114 propertyRange.lMin = -32768;
1115 propertyRange.lMax = 32767;
1116
1117 const HRESULT result = joystick.m_device->SetProperty(DIPROP_RANGE, &propertyRange.diph);
1118
1119 if (result != DI_OK)
1120 err() << "Failed to set DirectInput device axis property range: " << result << std::endl;
1121
1122 return DIENUM_CONTINUE;
1123 }
1124 if (DIDFT_GETTYPE(deviceObjectInstance->dwType) & DIDFT_POV)
1125 {
1126 // POVs
1127 if (deviceObjectInstance->guidType == guids::GUID_POV)
1128 {
1129 if (joystick.m_axes[Joystick::Axis::PovX] == -1)
1130 {
1131 joystick.m_axes[Joystick::Axis::PovX] = DIJOFS_POV(0);
1132 joystick.m_axes[Joystick::Axis::PovY] = DIJOFS_POV(0);
1133 }
1134 }
1135
1136 return DIENUM_CONTINUE;

Callers

nothing calls this directly

Calls 1

DIPROPRANGEClass · 0.85

Tested by

no test coverage detected