Applied patch [ 597700 ] Fix proposal for wxJoystick under MSW
Proposed fixes for the wxWindows joystick code under MSW. Some of these would be valid for other platforms, too. Events for buttons are named wrong, docs say different. Docs say EVT_JOY_BUTTON_DOWN and EVT_JOY_BUTTON_UP, but the code says EVT_JOY_DOWN and EVT_JOY_UP. I suggest changing the code to match the docs. wxJoystick::GetNumberJoysticks() should be a static member function. Having to create a joystick object to see if there are joysticks is silly. Docs for GetNumberJoysticks() must be changed; it returns the number of potentially connected joysticks, not the number of actually connected. Alternatively, GetNumberJoysticks() and others must be rewritten to conform with documentation, including remapping of wxWindows sequential joystick ID's to match MSW non-sequential joystick ID's. dwSize is not set when joyGetPosEx() is called. SEVERE ERROR. Error return value from functions should not be a legal return, for instance, wxJoystick::GetPOVCTSPosition() returns 0 for error, but this is a legal return value. GetButtonState() supports only four (out of 32) buttons. Also, should return as bitmap (LSB = button 1). (Win32 does this, although not documented as such). git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@16630 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -51,6 +51,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 = wxJOYSTICK1)
|
||||
{
|
||||
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 +102,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,12 +125,18 @@ 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
|
||||
@@ -105,12 +149,16 @@ int wxJoystick::GetPOVPosition() const
|
||||
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
|
||||
@@ -123,9 +171,9 @@ int wxJoystick::GetPOVCTSPosition() const
|
||||
return joyInfo.dwPOV;
|
||||
}
|
||||
else
|
||||
return 0;
|
||||
return -1;
|
||||
#else
|
||||
return 0;
|
||||
return -1;
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -204,16 +252,36 @@ void wxJoystick::SetMovementThreshold(int threshold)
|
||||
// Capabilities
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/**
|
||||
johan@linkdata.se 2002-08-20:
|
||||
Now returns the number of connected, functioning
|
||||
joysticks, as intended.
|
||||
*/
|
||||
int wxJoystick::GetNumberJoysticks()
|
||||
{
|
||||
JOYINFO joyInfo;
|
||||
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
|
||||
{
|
||||
JOYINFO joyInfo;
|
||||
MMRESULT res = joyGetPos(m_joystick, & joyInfo);
|
||||
return ((joyGetNumDevs() > 0) || (res == JOYERR_NOERROR));
|
||||
}
|
||||
|
||||
int wxJoystick::GetNumberJoysticks() const
|
||||
{
|
||||
return joyGetNumDevs();
|
||||
return (joyGetPos(m_joystick, & joyInfo) == JOYERR_NOERROR);
|
||||
}
|
||||
|
||||
int wxJoystick::GetManufacturerId() const
|
||||
|
Reference in New Issue
Block a user