ref: f305482566eac11144636213f537b79f892320a2
parent: 174d07c60c9fdae8090b929a064acacf17595bd7
author: Jorge Molero <jmolerocalafell@gmail.com>
date: Sun Apr 7 15:59:58 EDT 2024
Fix: Do not keep changing values on hold It works better if the changes only occur once per key press.
--- a/src/input.c
+++ b/src/input.c
@@ -98,6 +98,15 @@
}
}
+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,
@@ -195,33 +204,52 @@
default:
key.type = normal;
if (event->key.keysym.scancode == conf->key_jazz_dec_octave) {- if (event->type == SDL_KEYDOWN && keyjazz_base_octave > 0) {- keyjazz_base_octave--;
- display_keyjazz_overlay(1, keyjazz_base_octave, keyjazz_velocity);
- }
+ 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;
+ }
} else if (event->key.keysym.scancode == conf->key_jazz_inc_octave) {- if (event->type == SDL_KEYDOWN && keyjazz_base_octave < 8) {- keyjazz_base_octave++;
- display_keyjazz_overlay(1, keyjazz_base_octave, keyjazz_velocity);
- }
+ 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;
+ }
} 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;
}
--
⑨