X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8b5d5223d164a3b7fbacc5e69808cadd25163b1b..43f4e852a1b2ac37c3db6a2b87315192ac549191:/src/msw/joystick.cpp diff --git a/src/msw/joystick.cpp b/src/msw/joystick.cpp index 46a7666794..158c0b64b8 100644 --- a/src/msw/joystick.cpp +++ b/src/msw/joystick.cpp @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: joystick.cpp +// Name: src/msw/joystick.cpp // Purpose: wxJoystick class // Author: Julian Smart // Modified by: @@ -9,31 +9,26 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) -#pragma implementation "joystick.h" -#endif - // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" #ifdef __BORLANDC__ -#pragma hdrstop + #pragma hdrstop #endif -#include "wx/string.h" -#include "wx/window.h" -#include "wx/msw/private.h" +#if wxUSE_JOYSTICK -#if !defined(__GNUWIN32_OLD__) || defined(__CYGWIN10__) - #include <mmsystem.h> -#endif +#include "wx/joystick.h" -#if !defined(__WIN32__) && !defined(_MMRESULT_) -typedef UINT MMRESULT; +#ifndef WX_PRECOMP + #include "wx/string.h" + #include "wx/window.h" #endif -#ifdef __GNUWIN32_OLD__ -#include "wx/msw/gnuwin32/extra.h" +#include "wx/msw/private.h" + +#if !defined(__GNUWIN32_OLD__) || defined(__CYGWIN10__) + #include <mmsystem.h> #endif // Why doesn't BC++ have joyGetPosEx? @@ -41,8 +36,9 @@ typedef UINT MMRESULT; #define NO_JOYGETPOSEX #endif -#include "wx/window.h" -#include "wx/msw/joystick.h" +#include "wx/msw/registry.h" + +#include <regstr.h> IMPLEMENT_DYNAMIC_CLASS(wxJoystick, wxObject) @@ -78,7 +74,7 @@ wxJoystick::wxJoystick(int joystick) /* No such joystick, return ID 0 */ m_joystick = 0; return; -}; +} wxPoint wxJoystick::GetPosition() const { @@ -87,7 +83,27 @@ wxPoint wxJoystick::GetPosition() const if (res == JOYERR_NOERROR ) return wxPoint(joyInfo.wXpos, joyInfo.wYpos); else - return wxPoint(); + return wxPoint(0,0); +} + +int wxJoystick::GetPosition(unsigned axis) const +{ + switch (axis) { + case 0: + return GetPosition().x; + case 1: + return GetPosition().y; + case 2: + return GetZPosition(); + case 3: + return GetRudderPosition(); + case 4: + return GetUPosition(); + case 5: + return GetVPosition(); + default: + return 0; + } } int wxJoystick::GetZPosition() const @@ -131,6 +147,14 @@ int wxJoystick::GetButtonState() const return 0; } +bool wxJoystick::GetButtonState(unsigned id) const +{ + if (id > sizeof(int) * 8) + return false; + + return (GetButtonState() & (1 << id)) != 0; +} + /** JLI 2002-08-20: Returns -1 to signify error. @@ -302,11 +326,24 @@ int wxJoystick::GetProductId() const wxString wxJoystick::GetProductName() const { + wxString str; +#ifndef __WINE__ JOYCAPS joyCaps; - if (joyGetDevCaps(m_joystick, & joyCaps, sizeof(JOYCAPS)) != JOYERR_NOERROR) + if (joyGetDevCaps(m_joystick, &joyCaps, sizeof(joyCaps)) != JOYERR_NOERROR) return wxEmptyString; - else - return wxString(joyCaps.szPname); + + wxRegKey key1(wxString::Format(wxT("HKEY_LOCAL_MACHINE\\%s\\%s\\%s"), + REGSTR_PATH_JOYCONFIG, joyCaps.szRegKey, REGSTR_KEY_JOYCURR)); + + key1.QueryValue(wxString::Format(wxT("Joystick%d%s"), + m_joystick + 1, REGSTR_VAL_JOYOEMNAME), + str); + + wxRegKey key2(wxString::Format(wxT("HKEY_LOCAL_MACHINE\\%s\\%s"), + REGSTR_PATH_JOYOEM, str.c_str())); + key2.QueryValue(REGSTR_VAL_JOYOEMNAME, str); +#endif + return str; } int wxJoystick::GetXMin() const @@ -604,9 +641,15 @@ bool wxJoystick::HasPOVCTS() const bool wxJoystick::SetCapture(wxWindow* win, int pollingFreq) { +#ifdef __WXMSW__ BOOL changed = (pollingFreq == 0); MMRESULT res = joySetCapture((HWND) win->GetHWND(), m_joystick, pollingFreq, changed); return (res == JOYERR_NOERROR); +#else + wxUnusedVar(win); + wxUnusedVar(pollingFreq); + return false; +#endif } bool wxJoystick::ReleaseCapture() @@ -615,3 +658,4 @@ bool wxJoystick::ReleaseCapture() return (res == JOYERR_NOERROR); } +#endif // wxUSE_JOYSTICK