static HRESULT WINAPI SysKeyboardWImpl_GetDeviceState(LPDIRECTINPUTDEVICE8W iface, DWORD len, LPVOID ptr) { SysKeyboardImpl *This = impl_from_IDirectInputDevice8W(iface); TRACE("(%p)->(%d,%p)\n", This, len, ptr); if (!This->base.acquired) return DIERR_NOTACQUIRED; if (len != This->base.data_format.user_df->dwDataSize ) return DIERR_INVALIDPARAM; EnterCriticalSection(&This->base.crit); if (TRACE_ON(dinput)) { int i; for (i = 0; i < WINE_DINPUT_KEYBOARD_MAX_KEYS; i++) { if (This->DInputKeyState[i] != 0x00) TRACE(" - %02X: %02x\n", i, This->DInputKeyState[i]); } } fill_DataFormat(ptr, len, This->DInputKeyState, &This->base.data_format); LeaveCriticalSection(&This->base.crit); return DI_OK; }
/****************************************************************************** * GetDeviceState : returns the "state" of the mouse. * * For the moment, only the "standard" return structure (DIMOUSESTATE) is * supported. */ static HRESULT WINAPI SysMouseWImpl_GetDeviceState(LPDIRECTINPUTDEVICE8W iface, DWORD len, LPVOID ptr) { SysMouseImpl *This = impl_from_IDirectInputDevice8W(iface); if(This->base.acquired == 0) return DIERR_NOTACQUIRED; #ifndef __REACTOS__ __wine_check_for_events( QS_ALLINPUT ); #endif TRACE("(this=%p,0x%08x,%p):\n", This, len, ptr); _dump_mouse_state(&This->m_state); EnterCriticalSection(&This->base.crit); /* Copy the current mouse state */ fill_DataFormat(ptr, len, &This->m_state, &This->base.data_format); /* Initialize the buffer when in relative mode */ if (!(This->base.data_format.user_df->dwFlags & DIDF_ABSAXIS)) { This->m_state.lX = 0; This->m_state.lY = 0; This->m_state.lZ = 0; } LeaveCriticalSection(&This->base.crit); warp_check( This, FALSE ); return DI_OK; }
/****************************************************************************** * GetDeviceState : returns the "state" of the joystick. * */ HRESULT WINAPI JoystickWGenericImpl_GetDeviceState(LPDIRECTINPUTDEVICE8W iface, DWORD len, LPVOID ptr) { JoystickGenericImpl *This = impl_from_IDirectInputDevice8W(iface); TRACE("(%p,0x%08x,%p)\n", This, len, ptr); if (!This->base.acquired) { WARN("not acquired\n"); return DIERR_NOTACQUIRED; } /* update joystick state */ This->joy_polldev(IDirectInputDevice8A_from_impl(This)); /* convert and copy data to user supplied buffer */ fill_DataFormat(ptr, len, &This->js, &This->base.data_format); return DI_OK; }
/****************************************************************************** * GetDeviceState : returns the "state" of the joystick. * */ static HRESULT WINAPI JoystickAImpl_GetDeviceState( LPDIRECTINPUTDEVICE8A iface,DWORD len,LPVOID ptr ) { JoystickImpl *This = (JoystickImpl *)iface; TRACE("(this=%p,0x%08x,%p)\n", This, len, ptr); if (!This->base.acquired) { WARN("not acquired\n"); return DIERR_NOTACQUIRED; } joy_polldev(This); /* convert and copy data to user supplied buffer */ fill_DataFormat(ptr, &This->js, &This->base.data_format); return DI_OK; }
/****************************************************************************** * GetDeviceState : returns the "state" of the mouse. * * For the moment, only the "standard" return structure (DIMOUSESTATE) is * supported. */ static HRESULT WINAPI SysMouseAImpl_GetDeviceState( LPDIRECTINPUTDEVICE8A iface,DWORD len,LPVOID ptr ) { SysMouseImpl *This = (SysMouseImpl *)iface; if(This->acquired == 0) return DIERR_NOTACQUIRED; EnterCriticalSection(&(This->crit)); TRACE("(this=%p,0x%08lx,%p):\n", This, len, ptr); TRACE("(X: %ld - Y: %ld - Z: %ld L: %02x M: %02x R: %02x)\n", This->m_state.lX, This->m_state.lY, This->m_state.lZ, This->m_state.rgbButtons[0], This->m_state.rgbButtons[2], This->m_state.rgbButtons[1]); /* Copy the current mouse state */ fill_DataFormat(ptr, &(This->m_state), This->wine_df); /* Initialize the buffer when in relative mode */ if (This->absolute == 0) { This->m_state.lX = 0; This->m_state.lY = 0; This->m_state.lZ = 0; } /* Check if we need to do a mouse warping */ if (This->need_warp == WARP_NEEDED && (GetCurrentTime() - This->last_warped > 10)) { dinput_window_check(This); TRACE("Warping mouse to %ld - %ld\n", This->mapped_center.x, This->mapped_center.y); SetCursorPos( This->mapped_center.x, This->mapped_center.y ); This->last_warped = GetCurrentTime(); #ifdef MOUSE_HACK This->need_warp = WARP_DONE; #else This->need_warp = WARP_STARTED; #endif } LeaveCriticalSection(&(This->crit)); return DI_OK; }
/****************************************************************************** * GetDeviceState : returns the "state" of the mouse. * * For the moment, only the "standard" return structure (DIMOUSESTATE) is * supported. */ static HRESULT WINAPI SysMouseAImpl_GetDeviceState( LPDIRECTINPUTDEVICE8A iface,DWORD len,LPVOID ptr ) { SysMouseImpl *This = (SysMouseImpl *)iface; if(This->base.acquired == 0) return DIERR_NOTACQUIRED; TRACE("(this=%p,0x%08x,%p):\n", This, len, ptr); _dump_mouse_state(&This->m_state); EnterCriticalSection(&This->base.crit); /* Copy the current mouse state */ fill_DataFormat(ptr, &(This->m_state), &This->base.data_format); /* Initialize the buffer when in relative mode */ if (!(This->base.data_format.user_df->dwFlags & DIDF_ABSAXIS)) { This->m_state.lX = 0; This->m_state.lY = 0; This->m_state.lZ = 0; } LeaveCriticalSection(&This->base.crit); /* Check if we need to do a mouse warping */ if (This->need_warp && (GetCurrentTime() - This->last_warped > 10)) { if(!dinput_window_check(This)) return DIERR_GENERIC; TRACE("Warping mouse to %d - %d\n", This->mapped_center.x, This->mapped_center.y); SetCursorPos( This->mapped_center.x, This->mapped_center.y ); This->last_warped = GetCurrentTime(); This->need_warp = FALSE; } return DI_OK; }