X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c42404a58eac2c9eb0557565a471a794c387a715..439ddeba9dcb2bb020ba70da81dab76746dc0081:/src/msw/joystick.cpp?ds=sidebyside diff --git a/src/msw/joystick.cpp b/src/msw/joystick.cpp index 28c0752f05..ac154cde1b 100644 --- a/src/msw/joystick.cpp +++ b/src/msw/joystick.cpp @@ -5,11 +5,11 @@ // Modified by: // Created: 04/01/98 // RCS-ID: $Id$ -// Copyright: (c) Julian Smart and Markus Holzem -// Licence: wxWindows license +// Copyright: (c) Julian Smart +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #pragma implementation "joystick.h" #endif @@ -24,7 +24,7 @@ #include "wx/window.h" #include "wx/msw/private.h" -#ifndef __GNUWIN32_OLD__ +#if !defined(__GNUWIN32_OLD__) || defined(__CYGWIN10__) #include <mmsystem.h> #endif @@ -32,14 +32,12 @@ typedef UINT MMRESULT; #endif -#ifndef __TWIN32__ #ifdef __GNUWIN32_OLD__ #include "wx/msw/gnuwin32/extra.h" #endif -#endif // Why doesn't BC++ have joyGetPosEx? -#if !defined(__WIN32__) || defined(__BORLANDC__) || defined(__TWIN32__) +#if !defined(__WIN32__) || defined(__BORLANDC__) #define NO_JOYGETPOSEX #endif @@ -51,6 +49,37 @@ IMPLEMENT_DYNAMIC_CLASS(wxJoystick, wxObject) // Attributes //////////////////////////////////////////////////////////////////////////// +/** + johan@linkdata.se 2002-08-20: + Now returns only valid, functioning + joysticks, counting from the first + available and upwards. +*/ +wxJoystick::wxJoystick(int joystick) +{ + JOYINFO joyInfo; + int i, maxsticks; + + maxsticks = joyGetNumDevs(); + for( i=0; i<maxsticks; i++ ) + { + if( joyGetPos(i, & joyInfo) == JOYERR_NOERROR ) + { + if( !joystick ) + { + /* Found the one we want, store actual OS id and return */ + m_joystick = i; + return; + } + joystick --; + } + } + + /* No such joystick, return ID 0 */ + m_joystick = 0; + return; +}; + wxPoint wxJoystick::GetPosition() const { JOYINFO joyInfo; @@ -71,12 +100,19 @@ int wxJoystick::GetZPosition() const return 0; } +/** + johan@linkdata.se 2002-08-20: + Return a bitmap with all button states in it, + like the GTK version does and Win32 does. +*/ int wxJoystick::GetButtonState() const { JOYINFO joyInfo; MMRESULT res = joyGetPos(m_joystick, & joyInfo); if (res == JOYERR_NOERROR ) { + return joyInfo.wButtons; +#if 0 int buttons = 0; if (joyInfo.wButtons & JOY_BUTTON1) @@ -87,43 +123,55 @@ int wxJoystick::GetButtonState() const buttons |= wxJOY_BUTTON3; if (joyInfo.wButtons & JOY_BUTTON4) buttons |= wxJOY_BUTTON4; + return buttons; +#endif } else return 0; } +/** + JLI 2002-08-20: + Returns -1 to signify error. +*/ int wxJoystick::GetPOVPosition() const { #ifndef NO_JOYGETPOSEX JOYINFOEX joyInfo; joyInfo.dwFlags = JOY_RETURNPOV; + joyInfo.dwSize = sizeof(joyInfo); MMRESULT res = joyGetPosEx(m_joystick, & joyInfo); if (res == JOYERR_NOERROR ) { return joyInfo.dwPOV; } else - return 0; + return -1; #else - return 0; + return -1; #endif } +/** + johan@linkdata.se 2002-08-20: + Returns -1 to signify error. +*/ int wxJoystick::GetPOVCTSPosition() const { #ifndef NO_JOYGETPOSEX JOYINFOEX joyInfo; joyInfo.dwFlags = JOY_RETURNPOVCTS; + joyInfo.dwSize = sizeof(joyInfo); MMRESULT res = joyGetPosEx(m_joystick, & joyInfo); if (res == JOYERR_NOERROR ) { return joyInfo.dwPOV; } else - return 0; + return -1; #else - return 0; + return -1; #endif } @@ -132,6 +180,7 @@ int wxJoystick::GetRudderPosition() const #ifndef NO_JOYGETPOSEX JOYINFOEX joyInfo; joyInfo.dwFlags = JOY_RETURNR; + joyInfo.dwSize = sizeof(joyInfo); MMRESULT res = joyGetPosEx(m_joystick, & joyInfo); if (res == JOYERR_NOERROR ) { @@ -149,6 +198,7 @@ int wxJoystick::GetUPosition() const #ifndef NO_JOYGETPOSEX JOYINFOEX joyInfo; joyInfo.dwFlags = JOY_RETURNU; + joyInfo.dwSize = sizeof(joyInfo); MMRESULT res = joyGetPosEx(m_joystick, & joyInfo); if (res == JOYERR_NOERROR ) { @@ -166,6 +216,7 @@ int wxJoystick::GetVPosition() const #ifndef NO_JOYGETPOSEX JOYINFOEX joyInfo; joyInfo.dwFlags = JOY_RETURNV; + joyInfo.dwSize = sizeof(joyInfo); MMRESULT res = joyGetPosEx(m_joystick, & joyInfo); if (res == JOYERR_NOERROR ) { @@ -199,16 +250,36 @@ void wxJoystick::SetMovementThreshold(int threshold) // Capabilities //////////////////////////////////////////////////////////////////////////// -bool wxJoystick::IsOk() const +/** + johan@linkdata.se 2002-08-20: + Now returns the number of connected, functioning + joysticks, as intended. +*/ +int wxJoystick::GetNumberJoysticks() { JOYINFO joyInfo; - MMRESULT res = joyGetPos(m_joystick, & joyInfo); - return ((joyGetNumDevs() > 0) || (res == JOYERR_NOERROR)); -} - -int wxJoystick::GetNumberJoysticks() const + int i, maxsticks, actualsticks; + maxsticks = joyGetNumDevs(); + actualsticks = 0; + for( i=0; i<maxsticks; i++ ) + { + if( joyGetPos( i, & joyInfo ) == JOYERR_NOERROR ) + { + actualsticks ++; + } + } + return actualsticks; +} + +/** + johan@linkdata.se 2002-08-20: + The old code returned true if there were any + joystick capable drivers loaded (=always). +*/ +bool wxJoystick::IsOk() const { - return joyGetNumDevs(); + JOYINFO joyInfo; + return (joyGetPos(m_joystick, & joyInfo) == JOYERR_NOERROR); } int wxJoystick::GetManufacturerId() const @@ -233,7 +304,7 @@ wxString wxJoystick::GetProductName() const { JOYCAPS joyCaps; if (joyGetDevCaps(m_joystick, & joyCaps, sizeof(JOYCAPS)) != JOYERR_NOERROR) - return wxString(""); + return wxEmptyString; else return wxString(joyCaps.szPname); } @@ -303,7 +374,7 @@ int wxJoystick::GetNumberButtons() const int wxJoystick::GetNumberAxes() const { -#if defined(__WIN32__) && !defined(__TWIN32__) +#if defined(__WIN32__) JOYCAPS joyCaps; if (joyGetDevCaps(m_joystick, & joyCaps, sizeof(JOYCAPS)) != JOYERR_NOERROR) return 0; @@ -316,7 +387,7 @@ int wxJoystick::GetNumberAxes() const int wxJoystick::GetMaxButtons() const { -#if defined(__WIN32__) && !defined(__TWIN32__) +#if defined(__WIN32__) JOYCAPS joyCaps; if (joyGetDevCaps(m_joystick, & joyCaps, sizeof(JOYCAPS)) != JOYERR_NOERROR) return 0; @@ -329,7 +400,7 @@ int wxJoystick::GetMaxButtons() const int wxJoystick::GetMaxAxes() const { -#if defined(__WIN32__) && !defined(__TWIN32__) +#if defined(__WIN32__) JOYCAPS joyCaps; if (joyGetDevCaps(m_joystick, & joyCaps, sizeof(JOYCAPS)) != JOYERR_NOERROR) return 0; @@ -360,7 +431,7 @@ int wxJoystick::GetPollingMax() const int wxJoystick::GetRudderMin() const { -#if defined(__WIN32__) && !defined(__TWIN32__) +#if defined(__WIN32__) JOYCAPS joyCaps; if (joyGetDevCaps(m_joystick, & joyCaps, sizeof(JOYCAPS)) != JOYERR_NOERROR) return 0; @@ -373,7 +444,7 @@ int wxJoystick::GetRudderMin() const int wxJoystick::GetRudderMax() const { -#if defined(__WIN32__) && !defined(__TWIN32__) +#if defined(__WIN32__) JOYCAPS joyCaps; if (joyGetDevCaps(m_joystick, & joyCaps, sizeof(JOYCAPS)) != JOYERR_NOERROR) return 0; @@ -386,7 +457,7 @@ int wxJoystick::GetRudderMax() const int wxJoystick::GetUMin() const { -#if defined(__WIN32__) && !defined(__TWIN32__) +#if defined(__WIN32__) JOYCAPS joyCaps; if (joyGetDevCaps(m_joystick, & joyCaps, sizeof(JOYCAPS)) != JOYERR_NOERROR) return 0; @@ -399,7 +470,7 @@ int wxJoystick::GetUMin() const int wxJoystick::GetUMax() const { -#if defined(__WIN32__) && !defined(__TWIN32__) +#if defined(__WIN32__) JOYCAPS joyCaps; if (joyGetDevCaps(m_joystick, & joyCaps, sizeof(JOYCAPS)) != JOYERR_NOERROR) return 0; @@ -412,7 +483,7 @@ int wxJoystick::GetUMax() const int wxJoystick::GetVMin() const { -#if defined(__WIN32__) && !defined(__TWIN32__) +#if defined(__WIN32__) JOYCAPS joyCaps; if (joyGetDevCaps(m_joystick, & joyCaps, sizeof(JOYCAPS)) != JOYERR_NOERROR) return 0; @@ -425,7 +496,7 @@ int wxJoystick::GetVMin() const int wxJoystick::GetVMax() const { -#if defined(__WIN32__) && !defined(__TWIN32__) +#if defined(__WIN32__) JOYCAPS joyCaps; if (joyGetDevCaps(m_joystick, & joyCaps, sizeof(JOYCAPS)) != JOYERR_NOERROR) return 0; @@ -439,7 +510,7 @@ int wxJoystick::GetVMax() const bool wxJoystick::HasRudder() const { -#if defined(__WIN32__) && !defined(__TWIN32__) +#if defined(__WIN32__) JOYCAPS joyCaps; if (joyGetDevCaps(m_joystick, & joyCaps, sizeof(JOYCAPS)) != JOYERR_NOERROR) return FALSE; @@ -452,7 +523,7 @@ bool wxJoystick::HasRudder() const bool wxJoystick::HasZ() const { -#if defined(__WIN32__) && !defined(__TWIN32__) +#if defined(__WIN32__) JOYCAPS joyCaps; if (joyGetDevCaps(m_joystick, & joyCaps, sizeof(JOYCAPS)) != JOYERR_NOERROR) return FALSE; @@ -465,7 +536,7 @@ bool wxJoystick::HasZ() const bool wxJoystick::HasU() const { -#if defined(__WIN32__) && !defined(__TWIN32__) +#if defined(__WIN32__) JOYCAPS joyCaps; if (joyGetDevCaps(m_joystick, & joyCaps, sizeof(JOYCAPS)) != JOYERR_NOERROR) return FALSE; @@ -478,7 +549,7 @@ bool wxJoystick::HasU() const bool wxJoystick::HasV() const { -#if defined(__WIN32__) && !defined(__TWIN32__) +#if defined(__WIN32__) JOYCAPS joyCaps; if (joyGetDevCaps(m_joystick, & joyCaps, sizeof(JOYCAPS)) != JOYERR_NOERROR) return FALSE; @@ -491,7 +562,7 @@ bool wxJoystick::HasV() const bool wxJoystick::HasPOV() const { -#if defined(__WIN32__) && !defined(__TWIN32__) +#if defined(__WIN32__) JOYCAPS joyCaps; if (joyGetDevCaps(m_joystick, & joyCaps, sizeof(JOYCAPS)) != JOYERR_NOERROR) return FALSE; @@ -504,7 +575,7 @@ bool wxJoystick::HasPOV() const bool wxJoystick::HasPOV4Dir() const { -#if defined(__WIN32__) && !defined(__TWIN32__) +#if defined(__WIN32__) JOYCAPS joyCaps; if (joyGetDevCaps(m_joystick, & joyCaps, sizeof(JOYCAPS)) != JOYERR_NOERROR) return FALSE; @@ -517,7 +588,7 @@ bool wxJoystick::HasPOV4Dir() const bool wxJoystick::HasPOVCTS() const { -#if defined(__WIN32__) && !defined(__TWIN32__) +#if defined(__WIN32__) JOYCAPS joyCaps; if (joyGetDevCaps(m_joystick, & joyCaps, sizeof(JOYCAPS)) != JOYERR_NOERROR) return FALSE;