Skip to content

Commit 3d0582d

Browse files
committed
Added Remove Row Opcode to the KLM
* Removed blank row from Sixty percent (Mini) keyboards * Resolves #3404
1 parent 70ba6a2 commit 3d0582d

File tree

3 files changed

+54
-2
lines changed

3 files changed

+54
-2
lines changed

Controllers/RazerController/RazerDevices.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -778,8 +778,7 @@ keyboard_keymap_overlay_values razer_huntsman_mini_layout
778778
| Edit Keys |
779779
| Zone, Row, Column, Value, Key, OpCode, |
780780
\*---------------------------------------------------------------------------------------------------------*/
781-
{ 0, 0, 0, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_SWAP_ONLY, }, // Swap out Backtick
782-
{ 0, 0, 1, 0, KEY_EN_ESCAPE, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Insert Escape and shift row 0
781+
{ 0, 0, 0, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Shift row 0
783782
{ 0, 1, 0, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Shift row 1
784783
{ 0, 2, 0, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Shift row 2
785784
{ 0, 3, 0, 0, KEY_EN_UNUSED, KEYBOARD_OPCODE_INSERT_SHIFT_RIGHT, }, // Shift row 3

KeyboardLayoutManager/KeyboardLayoutManager.cpp

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -372,10 +372,18 @@ KeyboardLayoutManager::KeyboardLayoutManager(KEYBOARD_LAYOUT layout, KEYBOARD_SI
372372
SwapKeys(values.regional_overlay.find(layout)->second);
373373
}
374374

375+
/*---------------------------------------------------------------------*\
376+
| Size specific fixes |
377+
\*---------------------------------------------------------------------*/
375378
switch(size)
376379
{
377380
case KEYBOARD_SIZE::KEYBOARD_SIZE_SIXTY:
381+
/*-------------------------------------------------------------*\
382+
| Remove the empty Function row and swap in the Escape key |
383+
\*-------------------------------------------------------------*/
378384
name = KEYBOARD_NAME_SIXTY;
385+
RemoveRow(0);
386+
SwapKey(keyboard_zone_fn_row[0]);
379387
break;
380388

381389
case KEYBOARD_SIZE::KEYBOARD_SIZE_SEVENTY_FIVE:
@@ -443,6 +451,10 @@ void KeyboardLayoutManager::OpCodeSwitch(key_set change_keys)
443451
//SwapKey(change_keys[chg_key_idx]);
444452
break;
445453

454+
case KEYBOARD_OPCODE_REMOVE_ROW:
455+
RemoveRow(change_keys[chg_key_idx].row);
456+
break;
457+
446458
default:
447459
LOG_DEBUG(LOG_MSG_MISSING_OPCODE, KLM_CLASS_NAME, change_keys[chg_key_idx].opcode,
448460
change_keys[chg_key_idx].name, change_keys[chg_key_idx].row, change_keys[chg_key_idx].col);
@@ -698,6 +710,45 @@ void KeyboardLayoutManager::RemoveKey(keyboard_led rmv_key)
698710
}
699711
}
700712

713+
void KeyboardLayoutManager::RemoveRow(uint8_t rmv_row)
714+
{
715+
/*---------------------------------------------------------------------*\
716+
| Check row is valid to remove |
717+
\*---------------------------------------------------------------------*/
718+
if(rmv_row >= rows)
719+
{
720+
LOG_DEBUG("[%s] Removing row %d failed as rows currently = %d", KLM_CLASS_NAME, rmv_row, rows);
721+
return;
722+
}
723+
724+
/*---------------------------------------------------------------------*\
725+
| Loop through and remove any keys in the row |
726+
\*---------------------------------------------------------------------*/
727+
unsigned int key_idx = 0;
728+
729+
for(/*key_idx*/; key_idx < keymap.size() && rmv_row > keymap[key_idx].row; key_idx++)
730+
{
731+
if(rmv_row == keymap[key_idx].row)
732+
{
733+
LOG_DEBUG("[%s] Removing %s @ %02d, %02d from row %d", KLM_CLASS_NAME, keymap[key_idx].name, keymap[key_idx].row, keymap[key_idx].col, rmv_row);
734+
keymap.erase(keymap.begin() + key_idx);
735+
}
736+
}
737+
738+
/*---------------------------------------------------------------------*\
739+
| Loop through the remaining rows and adjust row number |
740+
\*---------------------------------------------------------------------*/
741+
if(rmv_row < keymap[key_idx].row)
742+
{
743+
for(/*key_idx*/; key_idx < keymap.size(); key_idx++)
744+
{
745+
keymap[key_idx].row--;
746+
}
747+
748+
LOG_DEBUG("[%s] Remove row %d successful", KLM_CLASS_NAME, rmv_row);
749+
}
750+
}
751+
701752
std::string KeyboardLayoutManager::GetName()
702753

703754
{

KeyboardLayoutManager/KeyboardLayoutManager.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ enum KEYBOARD_OPCODE
6060
KEYBOARD_OPCODE_SWAP_ONLY = 1,
6161
KEYBOARD_OPCODE_REMOVE_SHIFT_LEFT = 2,
6262
KEYBOARD_OPCODE_INS_SHFT_ADJACENT = 3,
63+
KEYBOARD_OPCODE_REMOVE_ROW = 4,
6364
};
6465

6566
typedef struct
@@ -132,6 +133,7 @@ class KeyboardLayoutManager
132133
void SwapKey(keyboard_led keys);
133134
void SwapKeys(std::vector<keyboard_led> keys);
134135
void RemoveKey(keyboard_led keys);
136+
void RemoveRow(uint8_t row);
135137

136138
KEYBOARD_LAYOUT layout;
137139
KEYBOARD_SIZE physical_size;

0 commit comments

Comments
 (0)