[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