From cc4c7167fdee31c91fcfeefa558c0a08f2564d67 Mon Sep 17 00:00:00 2001 From: Camilla Berglund Date: Thu, 7 Nov 2013 19:29:33 +0100 Subject: [PATCH] Fixed joysticks test segfault. --- README.md | 1 + tests/joysticks.c | 62 +++++++++++++++++++++++++---------------------- 2 files changed, 34 insertions(+), 29 deletions(-) diff --git a/README.md b/README.md index 7ebb8885..d6b4bcd0 100644 --- a/README.md +++ b/README.md @@ -35,6 +35,7 @@ guide in the GLFW documentation. documentation is built - Renamed configuration header to `glfw_config.h` to avoid conflicts - Bugfix: The `glfw3.pc` file did not respect the `LIB_SUFFIX` CMake option + - Bugfix: The `joysticks` test would segfault if a controller had no axes - [Win32] Bugfix: Removed joystick axis value negation left over from GLFW 2 - [Win32] Bugfix: Restoring windows using the Win+D hot key did not trigger the focus callback diff --git a/tests/joysticks.c b/tests/joysticks.c index cd49cd46..a3a5cd7e 100644 --- a/tests/joysticks.c +++ b/tests/joysticks.c @@ -64,43 +64,47 @@ static void framebuffer_size_callback(GLFWwindow* window, int width, int height) static void draw_joystick(Joystick* j, int x, int y, int width, int height) { int i; - int axis_width, axis_height; - int button_width, button_height; + const int axis_height = 3 * height / 4; + const int button_height = height / 4; - axis_width = width / j->axis_count; - axis_height = 3 * height / 4; - - button_width = width / j->button_count; - button_height = height / 4; - - for (i = 0; i < j->axis_count; i++) + if (j->axis_count) { - float value = j->axes[i] / 2.f + 0.5f; + const int axis_width = width / j->axis_count; - glColor3f(0.3f, 0.3f, 0.3f); - glRecti(x + i * axis_width, - y, - x + (i + 1) * axis_width, - y + axis_height); + for (i = 0; i < j->axis_count; i++) + { + float value = j->axes[i] / 2.f + 0.5f; - glColor3f(1.f, 1.f, 1.f); - glRecti(x + i * axis_width, - y + (int) (value * (axis_height - 5)), - x + (i + 1) * axis_width, - y + 5 + (int) (value * (axis_height - 5))); + glColor3f(0.3f, 0.3f, 0.3f); + glRecti(x + i * axis_width, + y, + x + (i + 1) * axis_width, + y + axis_height); + + glColor3f(1.f, 1.f, 1.f); + glRecti(x + i * axis_width, + y + (int) (value * (axis_height - 5)), + x + (i + 1) * axis_width, + y + 5 + (int) (value * (axis_height - 5))); + } } - for (i = 0; i < j->button_count; i++) + if (j->button_count) { - if (j->buttons[i]) - glColor3f(1.f, 1.f, 1.f); - else - glColor3f(0.3f, 0.3f, 0.3f); + const int button_width = width / j->button_count; - glRecti(x + i * button_width, - y + axis_height, - x + (i + 1) * button_width, - y + axis_height + button_height); + for (i = 0; i < j->button_count; i++) + { + if (j->buttons[i]) + glColor3f(1.f, 1.f, 1.f); + else + glColor3f(0.3f, 0.3f, 0.3f); + + glRecti(x + i * button_width, + y + axis_height, + x + (i + 1) * button_width, + y + axis_height + button_height); + } } }