]> git.saurik.com Git - wxWidgets.git/commitdiff
Applied patch [ 597700 ] Fix proposal for wxJoystick under MSW
authorJulian Smart <julian@anthemion.co.uk>
Tue, 20 Aug 2002 17:16:05 +0000 (17:16 +0000)
committerJulian Smart <julian@anthemion.co.uk>
Tue, 20 Aug 2002 17:16:05 +0000 (17:16 +0000)
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

docs/latex/wx/joystick.tex
include/wx/msw/joystick.h
src/gtk/joystick.cpp
src/gtk1/joystick.cpp
src/msw/joystick.cpp

index f9c03f49fbda3252eddde17bda3b776179e05a02..7520b28603e8eaf9a03ba0fc10f64ac7b8495cb0 100644 (file)
@@ -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}
 
index 4b15a0245e4de2ceef48a52a456d6d390772331e..18cad55c797c632f29ff00a7303612f795d39010 100644 (file)
@@ -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 ;
index e53af61ccf66cf1284ec599f929d8c38af54c5a8..bbc4d826c0aa1d14b32c79b354e93cdf10466408 100644 (file)
@@ -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
index e53af61ccf66cf1284ec599f929d8c38af54c5a8..bbc4d826c0aa1d14b32c79b354e93cdf10466408 100644 (file)
@@ -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
index 0cd1a0307f52a2bdf524820b3f19c22c3aa541a6..b3c1369e2c67019b0105ba26c26687da0f3679e2 100644 (file)
@@ -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
 ////////////////////////////////////////////////////////////////////////////
 
-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