ref: a11576828cc4e1050c99faadc78d471ace7dd3b3
parent: 060978e75697f26b4b5340d1526d0bdf826f5cb0
author: Jorge Molero <jmolerocalafell@gmail.com>
date: Tue Apr 23 14:28:00 EDT 2024
Refactor: Use SDL's repeat to disable changes on hold This is much simpler than the previous implementation with custom variables used as semaphors.
--- a/src/input.c
+++ b/src/input.c
@@ -98,15 +98,6 @@
}
}
-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,
@@ -203,53 +194,37 @@
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;
}
--
⑨