bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { case BASE1: if (record->event.pressed) { base_n = base_n | BASE_1; if (base_n == BASE_12) { base_layer(); } } else { base_n = base_n & ~BASE_1; } return false; case BASE2: if (record->event.pressed) { base_n = base_n | BASE_2; if (base_n == BASE_12) { base_layer(); } } else { base_n = base_n & ~BASE_2; } return false; case AT_DOWN: #ifdef HOME_MODS case HOME_E: case HOME_R: #endif tap_mods(record, KC_LALT); break; case CT_RGHT: #ifdef HOME_MODS case HOME_H: case HOME_W: #endif tap_mods(record, KC_LGUI); break; case GT_UP: #ifdef HOME_MODS case HOME_I: case HOME_S: #endif tap_mods(record, KC_LCTL); break; #ifdef HOME_MODS case HOME_A: case HOME_T: tap_mods(record, KC_LSFT); break; #endif #ifdef CENTER_TT case TT_ESC: clear_tt(); // exit TT layer return false; #endif case LT_ESC: #ifdef CENTER_TT if (tt_keycode != 0) { clear_tt(); // exit TT layer return false; } #endif tap_layer(record, _NUMBER); break; case LT_LEFT: case SP_BSPC: tap_layer(record, _SYMBOL); // LT (_SYMBOL, KC_LEFT) left right combination layer thumb_layer(record, RIGHT, 0, 0, _SYMBOL, _LSHIFT); break; case OS_ALT: tap_mods(record, KC_LALT); break; case OS_CTL: tap_mods(record, KC_LCTL); break; case OS_GUI: tap_mods(record, KC_LGUI); break; case SM_CIRC: // GUI_T(S(KC_6)) mt_shift(record, KC_LGUI, 0, KC_6); break; case SM_DLR: // SFT_T(S(KC_4)) mt_shift(record, KC_LSFT, 0, KC_4); break; case SM_G: // MT(MOD_LALT | MOD_LSFT, S(KC_G)) mt_shift(record, KC_LALT, KC_LSFT, KC_G); break; case SM_H: // MT(MOD_LCTL | MOD_LSFT, S(KC_K)) mt_shift(record, KC_LCTL, KC_LSFT, KC_H); break; case SM_W: // MT(MOD_LGUI | MOD_LSFT, S(KC_W)) mt_shift(record, KC_LGUI, KC_LSFT, KC_W); break; case SM_PERC: // ALT_T(S(KC_5)) mt_shift(record, KC_LALT, 0, KC_5); break; case LT_BSLS: tap_layer(record, _MOUSE); // LT (_MOUSE, KC_BSLS) left right combination layer, see #define LT_BSLS thumb_layer(record, LEFT, 0, 0, _MOUSE, _SYMBOL); break; case SL_LEFT: tap_layer(record, _MOUSE); // LT (_MOUSE, S(KC_LEFT)) left right combination layer thumb_layer(record, RIGHT, SHIFT, KC_LEFT, _MOUSE, _LSHIFT); break; case SP_DEL: tap_layer(record, _MOUSE); // LT (_MOUSE, S(KC_LEFT)) left right combination layer thumb_layer(record, RIGHT, NOSHIFT, KC_DEL, _MOUSE, _LSHIFT); break; case SL_TAB: // LT (_FNCKEY, S(KC_TAB)) emulation lt_shift(record, KC_TAB, _FNCKEY); break; case TD_ENT: tap_layer(record, _RSHIFT); // LT (_RSHIFT, KC_ENT) emulation, see tap dance enter break; case TD_SPC: tap_layer(record, _LSHIFT); // LT (_LSHIFT, KC_SPC) left right combination layer, see tap dance TD_SPC thumb_layer(record, LEFT, 0, 0, _LSHIFT, _SYMBOL); break; #ifdef CENTER_TT case CNTR_TL: case CNTR_TR: case CNTR_HL: case CNTR_HR: case CNTR_BL: case CNTR_BR: if (tt_keycode != keycode && tt_keycode != 0) { clear_tt(); // return to base layer first if different TT layer selected } tt_keycode = keycode; break; #endif // #ifdef STENO_ENABLE // case PS_STNA: // stn_layer(record, STN_A, _NUMBER); // break; // case PS_STNO: // stn_layer(record, STN_O, _FNCKEY); // break; // case PS_STNE: // stn_layer(record, STN_E, _EDIT); // break; // case PS_STNU: // stn_layer(record, STN_U, _SYMBOL); // break; // #endif case PLOVER: steno(record); return false; } return true; }
IImageDataSP VKTS_APIENTRY imageDataLoadGli(const std::string& name, const IBinaryBufferSP& buffer) { if (!buffer.get()) { return IImageDataSP(); } auto texture = gli::load(name.c_str()); if (texture.empty()) { return IImageDataSP(); } if (texture.layers() > 1 && texture.faces() > 1) { return IImageDataSP(); } VkFormat format = imageDataTranslateFormat(texture.format()); if (format == VK_FORMAT_UNDEFINED) { return IImageDataSP(); } uint32_t arrayLayers = (uint32_t)(texture.layers() * texture.faces()); uint32_t mipLevels = (uint32_t)texture.levels(); VkImageType imageType = VK_IMAGE_TYPE_2D; if (texture.extent().z > 1) { imageType = VK_IMAGE_TYPE_3D; } // std::vector<size_t> allOffsets; size_t offset = 0; for (size_t arrayLayer = texture.base_layer(); arrayLayer <= texture.max_layer(); arrayLayer++) { for (size_t face = texture.base_face(); face <= texture.max_face(); face++) { for (size_t mipLevel = texture.base_level(); mipLevel <= texture.max_level(); mipLevel++) { allOffsets.push_back(offset); offset += texture.size(mipLevel); } } } size_t totalSize = offset; std::vector<uint8_t> data(totalSize); offset = 0; for (size_t arrayLayer = texture.base_layer(); arrayLayer <= texture.max_layer(); arrayLayer++) { for (size_t face = texture.base_face(); face <= texture.max_face(); face++) { for (size_t mipLevel = texture.base_level(); mipLevel <= texture.max_level(); mipLevel++) { memcpy(&data[offset], texture.data(arrayLayer, face, mipLevel), texture.size(mipLevel)); offset += texture.size(mipLevel); } } } return IImageDataSP(new ImageData(name, imageType, format, { (uint32_t)texture.extent().x, (uint32_t)texture.extent().y, (uint32_t)texture.extent().z }, mipLevels, arrayLayers, allOffsets, &data[0], totalSize)); }