From c4bd6af837ada55cd3cbc21f0e50d6a2d620bcf8 Mon Sep 17 00:00:00 2001
From: Liyang HU <github.com@liyang.hu>
Date: Sat, 20 Feb 2021 19:53:53 +0000
Subject: tmk_core/common/action.c: refactor for code size; merge multiple
 `case`s into one (#11943)

* tmk_core/common/report.h: define `enum mouse_buttons` in terms of `#define MOUSE_BTN_MASK()`

* tmk_core/common/action.c: collapse multiple `case KC_MS_BTN[1-8]:` into single `MOUSE_BTN_MASK(action.key.code - KC_MS_BTN1)`

We all love tapping on our keyboards but this is taking the piss.

This saves ~134 bytes on my ATmega32.
---
 tmk_core/common/action.c | 76 ++++++++----------------------------------------
 tmk_core/common/report.h | 17 ++++++-----
 2 files changed, 21 insertions(+), 72 deletions(-)

(limited to 'tmk_core/common')

diff --git a/tmk_core/common/action.c b/tmk_core/common/action.c
index 66411b4fd3..f53e3c7084 100644
--- a/tmk_core/common/action.c
+++ b/tmk_core/common/action.c
@@ -410,74 +410,22 @@ void process_action(keyrecord_t *record, action_t action) {
         case ACT_MOUSEKEY:
             if (event.pressed) {
                 mousekey_on(action.key.code);
-                switch (action.key.code) {
-#    if defined(PS2_MOUSE_ENABLE) || defined(POINTING_DEVICE_ENABLE)
-                    case KC_MS_BTN1:
-                        register_button(true, MOUSE_BTN1);
-                        break;
-                    case KC_MS_BTN2:
-                        register_button(true, MOUSE_BTN2);
-                        break;
-                    case KC_MS_BTN3:
-                        register_button(true, MOUSE_BTN3);
-                        break;
-#    endif
-#    ifdef POINTING_DEVICE_ENABLE
-                    case KC_MS_BTN4:
-                        register_button(true, MOUSE_BTN4);
-                        break;
-                    case KC_MS_BTN5:
-                        register_button(true, MOUSE_BTN5);
-                        break;
-                    case KC_MS_BTN6:
-                        register_button(true, MOUSE_BTN6);
-                        break;
-                    case KC_MS_BTN7:
-                        register_button(true, MOUSE_BTN7);
-                        break;
-                    case KC_MS_BTN8:
-                        register_button(true, MOUSE_BTN8);
-                        break;
-#    endif
-                    default:
-                        mousekey_send();
-                        break;
-                }
             } else {
                 mousekey_off(action.key.code);
-                switch (action.key.code) {
+            }
+            switch (action.key.code) {
 #    if defined(PS2_MOUSE_ENABLE) || defined(POINTING_DEVICE_ENABLE)
-                    case KC_MS_BTN1:
-                        register_button(false, MOUSE_BTN1);
-                        break;
-                    case KC_MS_BTN2:
-                        register_button(false, MOUSE_BTN2);
-                        break;
-                    case KC_MS_BTN3:
-                        register_button(false, MOUSE_BTN3);
-                        break;
-#    endif
-#    ifdef POINTING_DEVICE_ENABLE
-                    case KC_MS_BTN4:
-                        register_button(false, MOUSE_BTN4);
-                        break;
-                    case KC_MS_BTN5:
-                        register_button(false, MOUSE_BTN5);
-                        break;
-                    case KC_MS_BTN6:
-                        register_button(false, MOUSE_BTN6);
-                        break;
-                    case KC_MS_BTN7:
-                        register_button(false, MOUSE_BTN7);
-                        break;
-                    case KC_MS_BTN8:
-                        register_button(false, MOUSE_BTN8);
-                        break;
+#        ifdef POINTING_DEVICE_ENABLE
+                case KC_MS_BTN1 ... KC_MS_BTN8:
+#        else
+                case KC_MS_BTN1 ... KC_MS_BTN3:
+#        endif
+                    register_button(event.pressed, MOUSE_BTN_MASK(action.key.code - KC_MS_BTN1));
+                    break;
 #    endif
-                    default:
-                        mousekey_send();
-                        break;
-                }
+                default:
+                    mousekey_send();
+                    break;
             }
             break;
 #endif
diff --git a/tmk_core/common/report.h b/tmk_core/common/report.h
index bcf5cab388..606a259643 100644
--- a/tmk_core/common/report.h
+++ b/tmk_core/common/report.h
@@ -34,15 +34,16 @@ enum hid_report_ids {
 };
 
 /* Mouse buttons */
+#define MOUSE_BTN_MASK(n) (1 << (n))
 enum mouse_buttons {
-    MOUSE_BTN1 = (1 << 0),
-    MOUSE_BTN2 = (1 << 1),
-    MOUSE_BTN3 = (1 << 2),
-    MOUSE_BTN4 = (1 << 3),
-    MOUSE_BTN5 = (1 << 4),
-    MOUSE_BTN6 = (1 << 5),
-    MOUSE_BTN7 = (1 << 6),
-    MOUSE_BTN8 = (1 << 7)
+    MOUSE_BTN1 = MOUSE_BTN_MASK(0),
+    MOUSE_BTN2 = MOUSE_BTN_MASK(1),
+    MOUSE_BTN3 = MOUSE_BTN_MASK(2),
+    MOUSE_BTN4 = MOUSE_BTN_MASK(3),
+    MOUSE_BTN5 = MOUSE_BTN_MASK(4),
+    MOUSE_BTN6 = MOUSE_BTN_MASK(5),
+    MOUSE_BTN7 = MOUSE_BTN_MASK(6),
+    MOUSE_BTN8 = MOUSE_BTN_MASK(7)
 };
 
 /* Consumer Page (0x0C)
-- 
cgit v1.2.3