Skip to content

Commit

Permalink
Refactor: Use SDL's repeat to disable changes on hold
Browse files Browse the repository at this point in the history
This is much simpler than the previous implementation with custom
variables used as semaphors.
  • Loading branch information
jmolero committed Apr 23, 2024
1 parent 060978e commit a115768
Showing 1 changed file with 19 additions and 44 deletions.
63 changes: 19 additions & 44 deletions src/input.c
Original file line number Diff line number Diff line change
Expand Up @@ -98,15 +98,6 @@ void close_game_controllers() {
}
}

typedef struct KeyState {
int key_jazz_dec_octave_handled;
int key_jazz_inc_octave_handled;
int key_jazz_dec_velocity_handled;
int key_jazz_inc_velocity_handled;
} KeyState;

KeyState keyState = {0, 0, 0, 0};

static input_msg_s handle_keyjazz(
SDL_Event *event,
uint8_t keyvalue,
Expand Down Expand Up @@ -203,53 +194,37 @@ static input_msg_s handle_keyjazz(
break;
default:
key.type = normal;
if (event->key.repeat > 0 || event->key.type == SDL_KEYUP) {
break;
}
if (event->key.keysym.scancode == conf->key_jazz_dec_octave) {
if (event->type == SDL_KEYDOWN && !keyState.key_jazz_dec_octave_handled && keyjazz_base_octave > 0) {
keyState.key_jazz_dec_octave_handled = 1;
keyjazz_base_octave--;
display_keyjazz_overlay(1, keyjazz_base_octave, keyjazz_velocity);
} else if (event->type == SDL_KEYUP) {
keyState.key_jazz_dec_octave_handled = 0;
}
if (keyjazz_base_octave > 0) {
keyjazz_base_octave--;
display_keyjazz_overlay(1, keyjazz_base_octave, keyjazz_velocity);
}
} else if (event->key.keysym.scancode == conf->key_jazz_inc_octave) {
if (event->type == SDL_KEYDOWN && !keyState.key_jazz_inc_octave_handled && keyjazz_base_octave < 8) {
keyState.key_jazz_inc_octave_handled = 1;
keyjazz_base_octave++;
display_keyjazz_overlay(1, keyjazz_base_octave, keyjazz_velocity);
} else if (event->type == SDL_KEYUP) {
keyState.key_jazz_inc_octave_handled = 0;
}
if (keyjazz_base_octave < 8) {
keyjazz_base_octave++;
display_keyjazz_overlay(1, keyjazz_base_octave, keyjazz_velocity);
}
} else if (event->key.keysym.scancode == conf->key_jazz_dec_velocity) {
if (event->type == SDL_KEYDOWN && !keyState.key_jazz_dec_velocity_handled) {
keyState.key_jazz_dec_velocity_handled = 1;
if ((event->key.keysym.mod & KMOD_ALT) > 0) {
if (keyjazz_velocity > 1) {
keyjazz_velocity -= 1;
}
if (keyjazz_velocity > 1)
keyjazz_velocity -= 1;
} else {
if (keyjazz_velocity > 0x10)
keyjazz_velocity -= 0x10;
if (keyjazz_velocity > 0x10)
keyjazz_velocity -= 0x10;
}
display_keyjazz_overlay(1, keyjazz_base_octave, keyjazz_velocity);
} else if (event->type == SDL_KEYUP) {
keyState.key_jazz_dec_velocity_handled = 0;
}
} else if (event->key.keysym.scancode == conf->key_jazz_inc_velocity) {
if (event->type == SDL_KEYDOWN && !keyState.key_jazz_inc_velocity_handled) {
keyState.key_jazz_inc_velocity_handled = 1;
if ((event->key.keysym.mod & KMOD_ALT) > 0) {
if (keyjazz_velocity < 0x7F) {
keyjazz_velocity += 1;
}
if (keyjazz_velocity < 0x7F)
keyjazz_velocity += 1;
} else {
if (keyjazz_velocity < 0x6F) {
keyjazz_velocity += 0x10;
}
if (keyjazz_velocity < 0x6F)
keyjazz_velocity += 0x10;
}
display_keyjazz_overlay(1, keyjazz_base_octave, keyjazz_velocity);
} else if (event->type == SDL_KEYUP) {
keyState.key_jazz_inc_velocity_handled = 0;
}
}
break;
}
Expand Down

0 comments on commit a115768

Please sign in to comment.