qmk_firmware

QMK firmware for my keyboards (Corne, Sweep Ferris) and trackball (Ploopy Adept)
Log | Files | Refs | Submodules | LICENSE

keymap.c (8726B)


      1 /* Copyright 2019 niltea
      2  *
      3  * This program is free software: you can redistribute it and/or modify
      4  * it under the terms of the GNU General Public License as published by
      5  * the Free Software Foundation, either version 2 of the License, or
      6  * (at your option) any later version.
      7  *
      8  * This program is distributed in the hope that it will be useful,
      9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
     10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     11  * GNU General Public License for more details.
     12  *
     13  * You should have received a copy of the GNU General Public License
     14  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
     15  */
     16 #include QMK_KEYBOARD_H
     17 #ifdef OLED_ENABLE
     18   #include <string.h>
     19   #include "lib/oled_helper.h"
     20 #endif
     21 
     22 enum layerID {
     23   MAC_CS_1 = 0,
     24   MAC_CS_2,
     25   MAC_PS_1,
     26   MAC_PS_2,
     27   WIN_CS_1,
     28   WIN_CS_2,
     29   WIN_PS_1,
     30   WIN_PS_2,
     31   IOS_CS_1,
     32   IOS_CS_2,
     33   SETTING,
     34 };
     35 
     36 #define Mac_CS PDF(MAC_CS_1)
     37 #define Mac_PS PDF(MAC_PS_1)
     38 #define Win_CS PDF(WIN_CS_1)
     39 #define Win_PS PDF(WIN_PS_1)
     40 #define IOS_CS PDF(IOS_CS_1)
     41 
     42 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     43     // Mac
     44     // Clip Studio
     45     [MAC_CS_1] = LAYOUT(
     46       KC_TAB,       LGUI(KC_A), KC_E,         KC_P,          LGUI(KC_0),
     47       MO(MAC_CS_2), KC_M,       KC_BSPC,      KC_B,          KC_HYPR,
     48                     KC_LSFT,    KC_LGUI,      LGUI(KC_Z),    KC_SPC
     49     ),
     50     [MAC_CS_2] = LAYOUT(
     51       MO(SETTING),  KC_ESC,     KC_G,         KC_R,          LGUI(KC_GRV),
     52       _______,      LGUI(KC_D), KC_K,         KC_F,          LGUI(KC_S),
     53                     KC_LALT,    KC_I,         LSG(KC_Z),     KC_H
     54     ),
     55     // Photoshop
     56     [MAC_PS_1] = LAYOUT(
     57       KC_TAB,       LGUI(KC_A), KC_E,         KC_B,          LGUI(KC_1),
     58       MO(MAC_PS_2), KC_L,       LGUI(KC_DEL), LGUI(KC_QUOT), KC_MEH,
     59                     KC_LSFT,    KC_LGUI,      LGUI(KC_Z),    KC_SPC
     60     ),
     61     [MAC_PS_2] = LAYOUT(
     62       MO(SETTING),  KC_ESC,     KC_G,         KC_R,          KC_ESC,
     63       _______,      LGUI(KC_D), KC_V,         LGUI(KC_T),    LGUI(KC_S),
     64                     KC_LALT,    KC_I,         LSG(KC_Z),     KC_H
     65     ),
     66 
     67     // Windows
     68     // Clip Studio
     69     [WIN_CS_1] = LAYOUT(
     70       KC_TAB,       LCTL(KC_A), KC_E,         KC_P,          LCTL(KC_0),
     71       MO(WIN_CS_2), KC_M,       KC_BSPC,      KC_B,          KC_HYPR,
     72                     KC_LSFT,    KC_LCTL,      LCTL(KC_Z),    KC_SPC
     73     ),
     74     [WIN_CS_2] = LAYOUT(
     75       MO(SETTING),  KC_ESC,     KC_G,         KC_R,          LCTL(KC_GRV),
     76       _______,      LCTL(KC_D), KC_K,         KC_F,          LCTL(KC_S),
     77                     KC_LALT,    KC_I,         C(S(KC_Z)),    KC_H
     78     ),
     79     // Photoshop
     80     [WIN_PS_1] = LAYOUT(
     81       KC_TAB,       LCTL(KC_A), KC_E,         KC_B,          LCTL(KC_1),
     82       MO(WIN_PS_2), KC_L,       LCTL(KC_DEL), LCTL(KC_QUOT), KC_MEH,
     83                     KC_LSFT,    KC_LCTL,      LCTL(KC_Z),    KC_SPC
     84     ),
     85     [WIN_PS_2] = LAYOUT(
     86       MO(SETTING),  KC_ESC,     KC_G,         KC_R,          KC_ESC,
     87       _______,      LCTL(KC_D), KC_V,         LCTL(KC_T),    LCTL(KC_S),
     88                     KC_LALT,    KC_I,         C(S(KC_Z)),    KC_H
     89     ),
     90     // iOS
     91     // Clip Studio
     92     [IOS_CS_1] = LAYOUT(
     93       KC_TAB,       LGUI(KC_A), KC_E,         KC_P,          LGUI(KC_0),
     94       MO(IOS_CS_2), KC_M,       KC_BSPC,      KC_B,          LGUI(KC_LALT),
     95                     KC_LSFT,    KC_LGUI,      LGUI(KC_Z),    KC_SPC
     96     ),
     97     [IOS_CS_2] = LAYOUT(
     98       MO(SETTING),  KC_ESC,     KC_G,         KC_R,          LGUI(KC_EQL),
     99       _______,      LGUI(KC_D), KC_K,         KC_F,          LGUI(KC_S),
    100                     KC_LALT,    KC_I,         LSG(KC_Z),     KC_H
    101     ),
    102     [SETTING] = LAYOUT(
    103       _______, IOS_CS, Win_CS, Mac_CS, KC_NO,
    104       _______, KC_NO,  Win_PS, Mac_PS, KC_NO,
    105                KC_NO,  KC_NO,  KC_NO,  KC_NO
    106     ),
    107 };
    108 
    109 bool encoder_update_user(uint8_t index, bool clockwise) {
    110   uint8_t currentDefault = get_highest_layer(default_layer_state);
    111   uint8_t currentLayer = get_highest_layer(layer_state);
    112   if (index == 0) { /* the upper encoder */
    113     switch (currentDefault) {
    114       case MAC_CS_1:
    115         if (currentLayer % 2 == 0) {
    116           // default layer
    117           // Zoom
    118           tap_code16(!clockwise ? G(KC_MINS) : G(KC_EQL));
    119         } else {
    120           // Fn Layer
    121           // rotate canvas
    122           tap_code(!clockwise ? KC_MINS : KC_QUOT);
    123         }
    124         break;
    125       case MAC_PS_1:
    126         if (currentLayer % 2 == 0) {
    127           // default layer
    128           // Zoom
    129           tap_code16(!clockwise ? G(KC_MINS) : G(KC_EQL));
    130         } else {
    131           // Fn Layer
    132           // undo / redo
    133           tap_code16(!clockwise ? G(KC_Z) : S(G(KC_Z)));
    134         }
    135         break;
    136       case WIN_CS_1:
    137         if (currentLayer % 2 == 0) {
    138           // default layer
    139           // Zoom
    140           tap_code16(!clockwise ? C(KC_MINS) : C(KC_EQL));
    141         } else {
    142           // Fn Layer
    143           // rotate canvas
    144           tap_code(!clockwise ? KC_MINS : KC_QUOT);
    145         }
    146         break;
    147       case WIN_PS_1:
    148         if (currentLayer % 2 == 0) {
    149           // default layer
    150           // Zoom
    151           tap_code16(!clockwise ? C(KC_MINS) : C(KC_SCLN));
    152         } else {
    153           // Fn Layer
    154           // undo / redo
    155           tap_code16(!clockwise ? C(KC_Z) : C(S(KC_Z)));
    156         }
    157         break;
    158       case IOS_CS_1:
    159         if (currentLayer % 2 == 0) {
    160           // default layer
    161           // Zoom
    162           tap_code16(!clockwise ? G(KC_MINS) : G(KC_SCLN));
    163         } else {
    164           // Fn Layer
    165           // rotate canvas
    166           tap_code(!clockwise ? KC_MINS : KC_EQL);
    167         }
    168         break;
    169       default:
    170         break;
    171     }
    172   } else if (index == 1) { /* the lower encoder */
    173     switch (currentDefault) {
    174       case MAC_CS_1:
    175         if (currentLayer % 2 == 0) {
    176           // default layer
    177           // size of brush
    178           tap_code(!clockwise ? KC_LBRC : KC_RBRC);
    179         } else {
    180           // Fn Layer
    181           // opacity of brush
    182           tap_code16(!clockwise ? G(KC_LBRC) : G(KC_RBRC));
    183         }
    184         break;
    185       case MAC_PS_1:
    186         if (currentLayer % 2 == 0) {
    187           // default layer
    188           // size of brush
    189           tap_code(!clockwise ? KC_LBRC : KC_RBRC);
    190         } else {
    191           // Fn Layer
    192           // opacity of brush
    193           tap_code16(!clockwise ? KC_LCBR : KC_RCBR);
    194         }
    195         break;
    196       case WIN_CS_1:
    197         if (currentLayer % 2 == 0) {
    198           // default layer
    199           // rotate canvas
    200           tap_code(!clockwise ? KC_LBRC : KC_RBRC);
    201         } else {
    202           // Fn Layer
    203           // opacity of brush
    204           tap_code16(!clockwise ? C(KC_LBRC) : C(KC_RBRC));
    205         }
    206         break;
    207       case WIN_PS_1:
    208         if (currentLayer % 2 == 0) {
    209           // default layer
    210           // rotate canvas
    211           tap_code(!clockwise ? KC_LBRC : KC_RBRC);
    212         } else {
    213           // Fn Layer
    214           // opacity of brush
    215           tap_code16(!clockwise ? KC_LCBR : KC_RCBR);
    216         }
    217         break;
    218       case IOS_CS_1:
    219         if (currentLayer % 2 == 0) {
    220           // default layer
    221           // size of brush
    222           tap_code(!clockwise ? KC_RBRC : KC_BSLS);
    223         } else {
    224           // Fn Layer
    225           // opacity of brush
    226           tap_code16(!clockwise ? G(KC_RBRC) : G(KC_BSLS));
    227         }
    228         break;
    229       default:
    230         break;
    231     }
    232   }
    233     return true;
    234 }
    235 
    236 // OLED Display
    237 #ifdef OLED_ENABLE
    238 bool oled_task_user(void) {
    239   // get layer Number
    240   uint8_t currentDefault = get_highest_layer(default_layer_state);
    241   uint8_t currentLayer = get_highest_layer(layer_state);
    242   // write OS mode / 1st line of the logo
    243   switch (currentDefault) {
    244     case MAC_CS_1:
    245     case MAC_PS_1:
    246       render_row(0, "Mac ");
    247       break;
    248     case WIN_CS_1:
    249     case WIN_PS_1:
    250       render_row(0, "Win ");
    251       break;
    252     case IOS_CS_1:
    253       render_row(0, "iOS ");
    254       break;
    255     default:
    256       render_row(0, "    ");
    257   }
    258 
    259   // write Application mode / 2nd line of the logo
    260   switch (currentDefault) {
    261     case MAC_CS_1:
    262     case WIN_CS_1:
    263     case IOS_CS_1:
    264       render_row(1, "A:CS");
    265       break;
    266     case MAC_PS_1:
    267     case WIN_PS_1:
    268       render_row(1, "A:Ps");
    269       break;
    270     default:
    271       render_row(1, "    ");
    272   }
    273 
    274   if (currentLayer == SETTING) {
    275     // 3rd & 4th line of the logo
    276     render_row(2, "****");
    277     render_row(3, "LSEL");
    278   } else {
    279     // Layer Status / 3rd line of the logo
    280     if (currentLayer % 2 == 0) {
    281       // default layer
    282       render_row(2, "L:DF");
    283     } else {
    284       // Fn Layer
    285       render_row(2, "L:Fn");
    286     }
    287     // pressed key / 4th line of the logo
    288     render_row(3, "    ");
    289   }
    290     return false;
    291 }
    292 #endif // #ifdef OLED_ENABLE