shithub: m8c

Download patch

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