void I_KillDevice(LPDIRECTINPUTDEVICE8 *dev) { if(*dev) IDirectInputDevice8_Unacquire(*dev); I_SAFE_RELEASE(*dev); }
static int Mouse_Win32_Init() { if(CommandLine_Check("-nomouse") || novideo) return false; // We'll need a window handle for this. HWND hWnd = (HWND) ClientWindow::main().nativeHandle(); HRESULT hr = E_FAIL; // Prefer the newer version 8 interface if available. if(LPDIRECTINPUT8 dInput = DirectInput_IVersion8()) { hr = dInput->CreateDevice(GUID_SysMouse, &didMouse, 0); } else if(LPDIRECTINPUT dInput = DirectInput_IVersion3()) { hr = dInput->CreateDevice(GUID_SysMouse, (LPDIRECTINPUTDEVICE*) &didMouse, 0); } if(FAILED(hr)) { LOGDEV_INPUT_ERROR("Failed to create device (0x%x: %s)") << hr << DirectInput_ErrorMsg(hr); return false; } // Set data format. hr = didMouse->SetDataFormat(&c_dfDIMouse2); if(FAILED(hr)) { LOGDEV_INPUT_ERROR("Failed to set data format (0x%x: %s)") << hr << DirectInput_ErrorMsg(hr); goto kill_mouse; } // Set behavior. hr = didMouse->SetCooperativeLevel(hWnd, DISCL_EXCLUSIVE | DISCL_FOREGROUND); if(FAILED(hr)) { LOGDEV_INPUT_ERROR("Failed to set co-op level (0x%x: %s)") << hr << DirectInput_ErrorMsg(hr); goto kill_mouse; } // Acquire the device. //didMouse->Acquire(); //mouseTrapped = true; // We will be told when to trap the mouse. mouseTrapped = false; // Init was successful. return true; kill_mouse: I_SAFE_RELEASE(didMouse); return false; }
boolean I_InitMouse(void) { HWND hWnd; HRESULT hr; if(ArgCheck("-nomouse") || novideo) return false; hWnd = Sys_GetWindowHandle(mainWindowIdx); if(!hWnd) { Con_Error("I_InitMouse: Main window not available, cannot init mouse."); return false; } hr = IDirectInput_CreateDevice(dInput, &GUID_SysMouse, &didMouse, 0); if(FAILED(hr)) { Con_Message("I_InitMouse: Failed to create device (0x%x).\n", hr); return false; } // Set data format. hr = IDirectInputDevice_SetDataFormat(didMouse, &c_dfDIMouse2); if(FAILED(hr)) { Con_Message("I_InitMouse: Failed to set data format (0x%x).\n", hr); goto kill_mouse; } // Set behaviour. hr = IDirectInputDevice_SetCooperativeLevel(didMouse, hWnd, DISCL_FOREGROUND | DISCL_EXCLUSIVE); if(FAILED(hr)) { Con_Message("I_InitMouse: Failed to set co-op level (0x%x).\n", hr); goto kill_mouse; } // Acquire the device. IDirectInputDevice_Acquire(didMouse); // Init was successful. return true; kill_mouse: I_SAFE_RELEASE(didMouse); return false; }
void DirectInput_KillDevice(LPDIRECTINPUTDEVICE8* dev) { if(*dev) (*dev)->Unacquire(); I_SAFE_RELEASE(*dev); }
boolean I_InitJoystick(void) { DIDEVICEINSTANCE ddi; int i, joyProp[] = { DIJOFS_X, DIJOFS_Y, DIJOFS_Z, DIJOFS_RX, DIJOFS_RY, DIJOFS_RZ, DIJOFS_SLIDER(0), DIJOFS_SLIDER(1) }; const char *axisName[] = { "X", "Y", "Z", "RX", "RY", "RZ", "Slider 1", "Slider 2" }; HWND hWnd; HRESULT hr; if(ArgCheck("-nojoy")) return false; hWnd = Sys_GetWindowHandle(mainWindowIdx); if(!hWnd) { Con_Error("I_InitJoystick: Main window not available, cannot init joystick."); return false; } // ddi will contain info for the joystick device. memset(&firstJoystick, 0, sizeof(firstJoystick)); memset(&ddi, 0, sizeof(ddi)); counter = 0; // Find the joystick we want by doing an enumeration. IDirectInput_EnumDevices(dInput, DI8DEVCLASS_GAMECTRL, I_JoyEnum, &ddi, DIEDFL_ALLDEVICES); // Was the joystick we want found? if(!ddi.dwSize) { // Use the default joystick. if(!firstJoystick.dwSize) return false; // Not found. Con_Message("I_InitJoystick: joydevice = %i, out of range.\n", joydevice); // Use the first joystick that was found. memcpy(&ddi, &firstJoystick, sizeof(ddi)); } // Show some info. Con_Message("I_InitJoystick: %s\n", ddi.tszProductName); // Create the joystick device. hr = IDirectInput8_CreateDevice(dInput, &ddi.guidInstance, &didJoy, 0); if(FAILED(hr)) { Con_Message("I_InitJoystick: Failed to create device (0x%x).\n", hr); return false; } // Set data format. if(FAILED(hr = IDirectInputDevice_SetDataFormat(didJoy, &c_dfDIJoystick))) { Con_Message("I_InitJoystick: Failed to set data format (0x%x).\n", hr); goto kill_joy; } // Set behaviour. if(FAILED (hr = IDirectInputDevice_SetCooperativeLevel(didJoy, hWnd, DISCL_NONEXCLUSIVE | DISCL_FOREGROUND))) { Con_Message("I_InitJoystick: Failed to set co-op level (0x%x: %s).\n", hr, I_ErrorMsg(hr)); goto kill_joy; } // Set properties. for(i = 0; i < sizeof(joyProp) / sizeof(joyProp[0]); i++) { if(FAILED (hr = I_SetRangeProperty(didJoy, DIPROP_RANGE, DIPH_BYOFFSET, joyProp[i], IJOY_AXISMIN, IJOY_AXISMAX))) { if(verbose) Con_Message("I_InitJoystick: Failed to set %s " "range (0x%x: %s).\n", axisName[i], hr, I_ErrorMsg(hr)); } } // Set no dead zone. if(FAILED(hr = I_SetProperty(didJoy, DIPROP_DEADZONE, DIPH_DEVICE, 0, 0))) { Con_Message("I_InitJoystick: Failed to set dead zone (0x%x: %s).\n", hr, I_ErrorMsg(hr)); } // Set absolute mode. if(FAILED (hr = I_SetProperty(didJoy, DIPROP_AXISMODE, DIPH_DEVICE, 0, DIPROPAXISMODE_ABS))) { Con_Message ("I_InitJoystick: Failed to set absolute axis mode (0x%x: %s).\n", hr, I_ErrorMsg(hr)); } // Acquire it. IDirectInputDevice_Acquire(didJoy); // Initialization was successful. return true; kill_joy: I_SAFE_RELEASE(didJoy); return false; }