@@ -443,7 +443,7 @@ static void osx_joy_generate_button_event(ALLEGRO_JOYSTICK_OSX *joy, int button,
443
443
_al_event_source_emit_event (es, &event);
444
444
}
445
445
446
- #define MAX_HAT_DIRECTIONS 9
446
+ #define MAX_HAT_DIRECTIONS 8
447
447
struct HAT_MAPPING {
448
448
int axisV;
449
449
int axisH;
@@ -456,7 +456,6 @@ static void osx_joy_generate_button_event(ALLEGRO_JOYSTICK_OSX *joy, int button,
456
456
{ 1 , -1 }, // 5
457
457
{ 0 , -1 }, // 6
458
458
{ -1 , -1 }, // 7
459
- { 0 , 0 }, // 8
460
459
};
461
460
462
461
static void value_callback (
@@ -496,9 +495,12 @@ static void value_callback(
496
495
int int_value = IOHIDValueGetIntegerValue (value);
497
496
498
497
if (joy->dpad == elem){
499
- if (int_value >= 0 && int_value < MAX_HAT_DIRECTIONS) {
500
- osx_joy_generate_axis_event (joy, joy->dpad_stick , joy->dpad_axis_vert , (float )hat_mapping[int_value].axisV );
501
- osx_joy_generate_axis_event (joy, joy->dpad_stick , joy->dpad_axis_horiz , (float )hat_mapping[int_value].axisH );
498
+ if (int_value > 0 && int_value <= MAX_HAT_DIRECTIONS) {
499
+ osx_joy_generate_axis_event (joy, joy->dpad_stick , joy->dpad_axis_vert , (float )hat_mapping[int_value-1 ].axisV );
500
+ osx_joy_generate_axis_event (joy, joy->dpad_stick , joy->dpad_axis_horiz , (float )hat_mapping[int_value-1 ].axisH );
501
+ } else if (joy->min [joy->dpad_stick][1 ] > int_value || joy->max [joy->dpad_stick][1 ] < int_value) {
502
+ osx_joy_generate_axis_event (joy, joy->dpad_stick , joy->dpad_axis_vert , 0 );
503
+ osx_joy_generate_axis_event (joy, joy->dpad_stick , joy->dpad_axis_horiz , 0 );
502
504
}
503
505
goto done;
504
506
}
0 commit comments