shithub: m8c

Download patch

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;
   }
--