From: Julian Smart Date: Tue, 20 Aug 2002 17:16:05 +0000 (+0000) Subject: Applied patch [ 597700 ] Fix proposal for wxJoystick under MSW X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/131f9d9b19b6b7943b24601fc813ceaa2c57340e?hp=b5c702530ee772946d878a15c63ae264299bb6eb 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 --- diff --git a/docs/latex/wx/joystick.tex b/docs/latex/wx/joystick.tex index f9c03f49fb..7520b28603 100644 --- a/docs/latex/wx/joystick.tex +++ b/docs/latex/wx/joystick.tex @@ -33,8 +33,11 @@ Destroys the wxJoystick object. \constfunc{int}{GetButtonState}{\void} -Returns the state of the joystick buttons. A bitlist of wxJOY\_BUTTONn identifiers, -where n is 1, 2, 3 or 4. +Returns the state of the joystick buttons. Every button is mapped to a single +bit in the returned integer, with the first button being mapped to the least +significant bit, and so on. +A bitlist of wxJOY\_BUTTONn identifiers, where n is 1, 2, 3 or 4 +is available for historical reasons. \membersection{wxJoystick::GetManufacturerId}\label{wxjoystickgetmanufacturerid} @@ -101,13 +104,16 @@ Returns the x, y position of the joystick. \constfunc{int}{GetPOVPosition}{\void} -Returns the point-of-view position, expressed in discrete units. +Returns the point-of-view position, expressed in continuous, one-hundredth of a degree units, +but limited to return 0, 9000, 18000 or 27000. +Returns -1 on error. \membersection{wxJoystick::GetPOVCTSPosition}\label{wxjoystickgetpovctsposition} \constfunc{int}{GetPOVCTSPosition}{\void} Returns the point-of-view position, expressed in continuous, one-hundredth of a degree units. +Returns -1 on error. \membersection{wxJoystick::GetRudderMax}\label{wxjoystickgetruddermax} diff --git a/include/wx/msw/joystick.h b/include/wx/msw/joystick.h index 4b15a0245e..18cad55c79 100644 --- a/include/wx/msw/joystick.h +++ b/include/wx/msw/joystick.h @@ -26,7 +26,7 @@ class WXDLLEXPORT wxJoystick: public wxObject * Public interface */ - wxJoystick(int joystick = wxJOYSTICK1) { m_joystick = joystick; }; + wxJoystick(int joystick = wxJOYSTICK1); // Attributes //////////////////////////////////////////////////////////////////////////// @@ -45,8 +45,9 @@ class WXDLLEXPORT wxJoystick: public wxObject // Capabilities //////////////////////////////////////////////////////////////////////////// + static int GetNumberJoysticks(void); + bool IsOk(void) const; // Checks that the joystick is functioning - int GetNumberJoysticks(void) const ; int GetManufacturerId(void) const ; int GetProductId(void) const ; wxString GetProductName(void) const ; diff --git a/src/gtk/joystick.cpp b/src/gtk/joystick.cpp index e53af61ccf..bbc4d826c0 100644 --- a/src/gtk/joystick.cpp +++ b/src/gtk/joystick.cpp @@ -139,12 +139,12 @@ int wxJoystick::GetButtonState(void) const int wxJoystick::GetPOVPosition(void) const { - return 0; + return -1; } int wxJoystick::GetPOVCTSPosition(void) const { - return 0; + return -1; } int wxJoystick::GetRudderPosition(void) const @@ -207,7 +207,11 @@ int wxJoystick::GetProductId(void) const wxString wxJoystick::GetProductName(void) const { - return wxT(""); + wxString dev_name; + // 2002-08-20 johan@linkdata.se + // Return the device name in lieu of a better one + dev_name.Printf( wxT("/dev/js%d"), (m_joystick == wxJOYSTICK1) ? 0 : 1); // FIXME Unicode? + return dev_name; } int wxJoystick::GetXMin(void) const diff --git a/src/gtk1/joystick.cpp b/src/gtk1/joystick.cpp index e53af61ccf..bbc4d826c0 100644 --- a/src/gtk1/joystick.cpp +++ b/src/gtk1/joystick.cpp @@ -139,12 +139,12 @@ int wxJoystick::GetButtonState(void) const int wxJoystick::GetPOVPosition(void) const { - return 0; + return -1; } int wxJoystick::GetPOVCTSPosition(void) const { - return 0; + return -1; } int wxJoystick::GetRudderPosition(void) const @@ -207,7 +207,11 @@ int wxJoystick::GetProductId(void) const wxString wxJoystick::GetProductName(void) const { - return wxT(""); + wxString dev_name; + // 2002-08-20 johan@linkdata.se + // Return the device name in lieu of a better one + dev_name.Printf( wxT("/dev/js%d"), (m_joystick == wxJOYSTICK1) ? 0 : 1); // FIXME Unicode? + return dev_name; } int wxJoystick::GetXMin(void) const diff --git a/src/msw/joystick.cpp b/src/msw/joystick.cpp index 0cd1a0307f..b3c1369e2c 100644 --- a/src/msw/joystick.cpp +++ b/src/msw/joystick.cpp @@ -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 0) || (res == JOYERR_NOERROR)); -} - -int wxJoystick::GetNumberJoysticks() const + int i, maxsticks, actualsticks; + maxsticks = joyGetNumDevs(); + actualsticks = 0; + for( i=0; i