[PATCH 2/3] joy.cpl: Graphical Axis test

Lucas Fialho Zawacki lfzawacki at gmail.com
Thu Jun 7 12:44:13 CDT 2012


From: Lucas Fialho Zawacki <lfzawacki at gmail.com>

---
 dlls/joy.cpl/joy.h  |   11 +++++++++++
 dlls/joy.cpl/joy.rc |    3 +++
 dlls/joy.cpl/main.c |   48 ++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 62 insertions(+)

diff --git a/dlls/joy.cpl/joy.h b/dlls/joy.cpl/joy.h
index e860b1b..c54d30f 100644
--- a/dlls/joy.cpl/joy.h
+++ b/dlls/joy.cpl/joy.h
@@ -37,6 +37,7 @@ struct Joystick {
 };
 
 #define TEST_MAX_BUTTONS    32
+#define TEST_MAX_AXES       3
 
 struct JoystickData {
     IDirectInput8W *di;
@@ -45,6 +46,7 @@ struct JoystickData {
     int cur_joystick;
     int chosen_joystick;
     HWND buttons[TEST_MAX_BUTTONS];
+    HWND axes[TEST_MAX_AXES];
     BOOL stop;
 };
 
@@ -68,6 +70,7 @@ struct JoystickData {
 #define IDC_TESTSELECTCOMBO 2004
 
 #define IDC_JOYSTICKBUTTON  3000
+#define IDC_JOYSTICKAXES    4000
 
 /* constants */
 #define TEST_POLL_TIME      100
@@ -80,4 +83,12 @@ struct JoystickData {
 #define TEST_BUTTON_SIZE_X  30
 #define TEST_BUTTON_SIZE_Y  25
 
+#define TEST_AXIS_X         65
+#define TEST_AXIS_Y         98
+#define TEST_NEXT_AXIS_X    115
+#define TEST_AXIS_SIZE_X    5
+#define TEST_AXIS_SIZE_Y    5
+#define TEST_AXIS_MIN       -40
+#define TEST_AXIS_MAX       40
+
 #endif
diff --git a/dlls/joy.cpl/joy.rc b/dlls/joy.cpl/joy.rc
index ba341f9..042d7df 100644
--- a/dlls/joy.cpl/joy.rc
+++ b/dlls/joy.cpl/joy.rc
@@ -48,6 +48,9 @@ FONT 8, "Ms Shell Dlg"
 {
     COMBOBOX        IDC_TESTSELECTCOMBO, 5, 5, 100, 30, CBS_DROPDOWNLIST | CBS_HASSTRINGS
     GROUPBOX        "Buttons", IDC_STATIC, 0, 110, 250, 90
+    GROUPBOX        "X,Y", IDC_STATIC, 15, 30, 60, 60
+    GROUPBOX        "Rx,Ry", IDC_STATIC, 92, 30, 60, 60
+    GROUPBOX        "Z, Rz", IDC_STATIC, 169, 30, 60, 60
 }
 
 IDD_FORCEFEEDBACK DIALOG 0, 0, 250, 200
diff --git a/dlls/joy.cpl/main.c b/dlls/joy.cpl/main.c
index 2e8be0a..9e4148d 100644
--- a/dlls/joy.cpl/main.c
+++ b/dlls/joy.cpl/main.c
@@ -194,6 +194,7 @@ static void poll_input(const struct Joystick *joy, DIJOYSTATE *state)
 
 static DWORD WINAPI input_thread(void *param)
 {
+    int axes_pos[TEST_MAX_AXES][2];
     DIJOYSTATE state;
     struct JoystickData *data = param;
 
@@ -209,6 +210,20 @@ static DWORD WINAPI input_thread(void *param)
             if (state.rgbButtons[i])
                 SendMessageW(data->buttons[i], BM_SETSTATE, TRUE, 0);
 
+        /* Indicate axis positions, axes showing are hardcoded for now */
+        axes_pos[0][0] = state.lX;
+        axes_pos[0][1] = state.lY;
+        axes_pos[1][0] = state.lRx;
+        axes_pos[1][1] = state.lRy;
+        axes_pos[2][0] = state.lZ;
+        axes_pos[2][1] = state.lRz;
+
+        for (i = 0; i < TEST_MAX_AXES; i++)
+            SetWindowPos(data->axes[i], 0,
+                        TEST_AXIS_X + TEST_NEXT_AXIS_X*i + axes_pos[i][0],
+                        TEST_AXIS_Y + axes_pos[i][1],
+                        0, 0, SWP_NOZORDER | SWP_NOSIZE);
+
         Sleep(TEST_POLL_TIME);
 
         /* Reset button state */
@@ -271,6 +286,38 @@ static void draw_joystick_buttons(HWND hwnd, struct JoystickData* data)
     }
 }
 
+static void draw_joystick_axes(HWND hwnd, struct JoystickData* data)
+{
+    int i;
+    struct Joystick *joy;
+    DIPROPRANGE propRange;
+    HINSTANCE hinst = (HINSTANCE) GetWindowLongPtrW(hwnd, GWLP_HINSTANCE);
+    static WCHAR button_class[] = {'B','u','t','t','o','n','\0'};
+
+    /* Set axis range to ease the GUI visualization */
+    for (i = 0; i < data->num_joysticks; i++)
+    {
+        joy = &data->joysticks[i];
+        propRange.diph.dwSize = sizeof(DIPROPRANGE);
+        propRange.diph.dwHeaderSize = sizeof(DIPROPHEADER);
+        propRange.diph.dwHow = DIPH_DEVICE;
+        propRange.diph.dwObj = 0;
+        propRange.lMin = TEST_AXIS_MIN;
+        propRange.lMax = TEST_AXIS_MAX;
+
+        IDirectInputDevice_SetProperty(joy->device, DIPROP_RANGE, &propRange.diph);
+    }
+
+    for (i = 0; i < TEST_MAX_AXES; i++)
+    {
+        data->axes[i] = CreateWindowW( button_class, NULL, WS_CHILD | WS_VISIBLE,
+            TEST_AXIS_X + TEST_NEXT_AXIS_X*i, TEST_AXIS_Y,
+            TEST_AXIS_SIZE_X, TEST_AXIS_SIZE_Y,
+            hwnd, (HMENU) IDC_JOYSTICKAXES + i, NULL, hinst);
+    }
+}
+
 /*********************************************************************
  * test_dlgproc [internal]
  *
@@ -297,6 +344,7 @@ INT_PTR CALLBACK test_dlgproc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
             }
 
             draw_joystick_buttons(hwnd, data);
+            draw_joystick_axes(hwnd, data);
 
             return TRUE;
         }
-- 
1.7.9.5




More information about the wine-patches mailing list