#include "custom_encoder.h" #include "custom_keycodes.h" #ifdef RGB_OLED_MENU #include "custom_rgb.h" // I'm lazy and like constants over calculations, also using it as a compile time check #if defined(RGB_MATRIX_ENABLE) #define RGB_FUNCTION_COUNT 6 #elif defined(RGBLIGHT_ENABLE) #define RGB_FUNCTION_COUNT 5 #endif typedef void (*rgb_f)(void); const rgb_f rgb_functions[RGB_FUNCTION_COUNT][2] = { #if defined(RGB_MATRIX_ENABLE) { rgb_matrix_increase_hue, rgb_matrix_decrease_hue }, { rgb_matrix_increase_sat, rgb_matrix_decrease_sat }, { rgb_matrix_increase_val, rgb_matrix_decrease_val }, { rgb_matrix_increase_speed, rgb_matrix_decrease_speed }, { rgb_matrix_step, rgb_matrix_step_reverse }, { rgb_matrix_increase_flags, rgb_matrix_decrease_flags } #elif defined(RGBLIGHT_ENABLE) { rgblight_increase_hue, rgblight_decrease_hue }, { rgblight_increase_sat, rgblight_decrease_sat }, { rgblight_increase_val, rgblight_decrease_val }, { rgblight_increase_speed, rgblight_decrease_speed }, { rgblight_step, rgblight_step_reverse } #endif }; // Start at the end for mode uint8_t rgb_encoder_state = 4; bool process_record_encoder(uint16_t keycode, keyrecord_t *record) { switch (keycode) { case RGB_ENC: if (record->event.pressed) { if (get_mods() & MOD_MASK_SHIFT) { rgb_encoder_state = (rgb_encoder_state - 1); if (rgb_encoder_state >= RGB_FUNCTION_COUNT) rgb_encoder_state = RGB_FUNCTION_COUNT - 1; } else { rgb_encoder_state = (rgb_encoder_state + 1) % RGB_FUNCTION_COUNT; } } return false; } return true; } #endif // RGB_OLED_MENU const uint16_t PROGMEM encoders[][2] = { { KC_PGUP, KC_PGDN }, { KC_VOLU, KC_VOLD } }; bool encoder_update_user(uint8_t index, bool clockwise) { if (!is_keyboard_master()) return; #ifdef RGB_OLED_MENU if (index == RGB_OLED_MENU) (*rgb_functions[rgb_encoder_state][clockwise])(); else #endif // RGB_OLED_MENU tap_code16(pgm_read_word(&encoders[index][clockwise])); return true; }