~ruther/qmk_firmware

c4bd6af837ada55cd3cbc21f0e50d6a2d620bcf8 — Liyang HU 4 years ago 2e4f087
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.
2 files changed, 21 insertions(+), 72 deletions(-)

M tmk_core/common/action.c
M tmk_core/common/report.h
M tmk_core/common/action.c => tmk_core/common/action.c +12 -64
@@ 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

M tmk_core/common/report.h => tmk_core/common/report.h +9 -8
@@ 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)