From 90b8b3eb76cc9db16a598ce32534a6b5073c5d2f Mon Sep 17 00:00:00 2001 From: xennex22 Date: Sat, 28 Sep 2019 09:19:27 -0700 Subject: [PATCH] Update lv_kb.c Changed keyboard mapping to set a map copy for each keyboard shift state. --- src/lv_objx/lv_kb.c | 53 +++++++++++++++++++++++++++++---------------- 1 file changed, 34 insertions(+), 19 deletions(-) diff --git a/src/lv_objx/lv_kb.c b/src/lv_objx/lv_kb.c index 12731855a..675b6ab32 100644 --- a/src/lv_objx/lv_kb.c +++ b/src/lv_objx/lv_kb.c @@ -32,40 +32,40 @@ static lv_res_t lv_kb_signal(lv_obj_t * kb, lv_signal_t sign, void * param); **********************/ static lv_signal_cb_t ancestor_signal; /* clang-format off */ -static const char * kb_map_lc[] = {"1#", "q", "w", "e", "r", "t", "y", "u", "i", "o", "p", "Bksp", "\n", +static const char * const default_kb_map_lc[] = {"1#", "q", "w", "e", "r", "t", "y", "u", "i", "o", "p", "Bksp", "\n", "ABC", "a", "s", "d", "f", "g", "h", "j", "k", "l", "Enter", "\n", "_", "-", "z", "x", "c", "v", "b", "n", "m", ".", ",", ":", "\n", LV_SYMBOL_CLOSE, LV_SYMBOL_LEFT, " ", LV_SYMBOL_RIGHT, LV_SYMBOL_OK, ""}; -static const lv_btnm_ctrl_t kb_ctrl_lc_map[] = { +static const lv_btnm_ctrl_t default_kb_ctrl_lc_map[] = { LV_KB_CTRL_BTN_FLAGS | 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 7, LV_KB_CTRL_BTN_FLAGS | 6, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, LV_KB_CTRL_BTN_FLAGS | 2, 2, 6, 2, LV_KB_CTRL_BTN_FLAGS | 2}; -static const char * kb_map_uc[] = {"1#", "Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P", "Bksp", "\n", +static const char * const default_kb_map_uc[] = {"1#", "Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P", "Bksp", "\n", "abc", "A", "S", "D", "F", "G", "H", "J", "K", "L", "Enter", "\n", "_", "-", "Z", "X", "C", "V", "B", "N", "M", ".", ",", ":", "\n", LV_SYMBOL_CLOSE, LV_SYMBOL_LEFT, " ", LV_SYMBOL_RIGHT, LV_SYMBOL_OK, ""}; -static const lv_btnm_ctrl_t kb_ctrl_uc_map[] = { +static const lv_btnm_ctrl_t default_kb_ctrl_uc_map[] = { LV_KB_CTRL_BTN_FLAGS | 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 7, LV_KB_CTRL_BTN_FLAGS | 6, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, LV_KB_CTRL_BTN_FLAGS | 2, 2, 6, 2, LV_KB_CTRL_BTN_FLAGS | 2}; -static const char * kb_map_spec[] = {"0", "1", "2", "3", "4" ,"5", "6", "7", "8", "9", "Bksp", "\n", +static const char * const default_kb_map_spec[] = {"0", "1", "2", "3", "4" ,"5", "6", "7", "8", "9", "Bksp", "\n", "abc", "+", "-", "/", "*", "=", "%", "!", "?", "#", "<", ">", "\n", "\\", "@", "$", "(", ")", "{", "}", "[", "]", ";", "\"", "'", "\n", LV_SYMBOL_CLOSE, LV_SYMBOL_LEFT, " ", LV_SYMBOL_RIGHT, LV_SYMBOL_OK, ""}; -static const lv_btnm_ctrl_t kb_ctrl_spec_map[] = { +static const lv_btnm_ctrl_t default_kb_ctrl_spec_map[] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, LV_KB_CTRL_BTN_FLAGS | 2, LV_KB_CTRL_BTN_FLAGS | 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, LV_KB_CTRL_BTN_FLAGS | 2, 2, 6, 2, LV_KB_CTRL_BTN_FLAGS | 2}; -static const char * kb_map_num[] = {"1", "2", "3", LV_SYMBOL_CLOSE, "\n", +static const char * const kb_map_num[] = {"1", "2", "3", LV_SYMBOL_CLOSE, "\n", "4", "5", "6", LV_SYMBOL_OK, "\n", "7", "8", "9", "Bksp", "\n", "+/-", "0", ".", LV_SYMBOL_LEFT, LV_SYMBOL_RIGHT, ""}; @@ -77,6 +77,9 @@ static const lv_btnm_ctrl_t kb_ctrl_num_map[] = { 1, 1, 1, 1, 1}; /* clang-format on */ +static const char * * kb_map[3] = { (const char * *)default_kb_map_lc, (const char * *)default_kb_map_uc, (const char * *)default_kb_map_spec }; +static const lv_btnm_ctrl_t * kb_ctrl[3] = { default_kb_ctrl_lc_map, default_kb_ctrl_uc_map, default_kb_ctrl_spec_map }; + /********************** * MACROS **********************/ @@ -126,8 +129,8 @@ lv_obj_t * lv_kb_create(lv_obj_t * par, const lv_obj_t * copy) lv_obj_align(new_kb, NULL, LV_ALIGN_IN_BOTTOM_MID, 0, 0); lv_obj_set_event_cb(new_kb, lv_kb_def_event_cb); - lv_btnm_set_map(new_kb, kb_map_lc); - lv_btnm_set_ctrl_map(new_kb, kb_ctrl_lc_map); + lv_btnm_set_map(new_kb, kb_map[LC_KB_SHIFT_LOWER]); + lv_btnm_set_ctrl_map(new_kb, kb_ctrl[LC_KB_SHIFT_LOWER]); /*Set the default styles*/ lv_theme_t * th = lv_theme_get_current(); @@ -200,10 +203,10 @@ void lv_kb_set_mode(lv_obj_t * kb, lv_kb_mode_t mode) ext->mode = mode; if(mode == LV_KB_MODE_TEXT) { - lv_btnm_set_map(kb, kb_map_lc); - lv_btnm_set_ctrl_map(kb, kb_ctrl_lc_map); - } else if(mode == LV_KB_MODE_NUM) { - lv_btnm_set_map(kb, kb_map_num); + lv_btnm_set_map(kb, kb_map[LC_KB_SHIFT_LOWER]); + lv_btnm_set_ctrl_map(kb, kb_ctrl[LC_KB_SHIFT_LOWER]); + } else if(mode == LV_KB_MODE_NUM) { + lv_btnm_set_map(kb, (const char * *)kb_map_num); lv_btnm_set_ctrl_map(kb, kb_ctrl_num_map); } } @@ -250,6 +253,18 @@ void lv_kb_set_style(lv_obj_t * kb, lv_kb_style_t type, const lv_style_t * style } } +void lv_kb_set_map(lv_obj_t * kb, lv_kb_shift_t shift, const char * map[]) +{ + kb_map[shift] = map; + lv_btnm_set_map(kb, map); +} + +void lv_kb_set_ctrl_map(lv_obj_t * kb, lv_kb_shift_t shift, const lv_btnm_ctrl_t ctrl_map[]) +{ + kb_ctrl[shift] = ctrl_map; + lv_btnm_set_ctrl_map(kb, ctrl_map); +} + /*===================== * Getter functions *====================*/ @@ -336,16 +351,16 @@ void lv_kb_def_event_cb(lv_obj_t * kb, lv_event_t event) /*Do the corresponding action according to the text of the button*/ if(strcmp(txt, "abc") == 0) { - lv_btnm_set_map(kb, kb_map_lc); - lv_btnm_set_ctrl_map(kb, kb_ctrl_lc_map); + lv_btnm_set_map(kb, kb_map[LC_KB_SHIFT_LOWER]); + lv_btnm_set_ctrl_map(kb, kb_ctrl[LC_KB_SHIFT_LOWER]); return; } else if(strcmp(txt, "ABC") == 0) { - lv_btnm_set_map(kb, kb_map_uc); - lv_btnm_set_ctrl_map(kb, kb_ctrl_uc_map); + lv_btnm_set_map(kb, kb_map[LC_KB_SHIFT_UPPER]); + lv_btnm_set_ctrl_map(kb, kb_ctrl[LC_KB_SHIFT_UPPER]); return; } else if(strcmp(txt, "1#") == 0) { - lv_btnm_set_map(kb, kb_map_spec); - lv_btnm_set_ctrl_map(kb, kb_ctrl_spec_map); + lv_btnm_set_map(kb, kb_map[LC_KB_SHIFT_SYMBOL]); + lv_btnm_set_ctrl_map(kb, kb_ctrl[LC_KB_SHIFT_SYMBOL]); return; } else if(strcmp(txt, LV_SYMBOL_CLOSE) == 0) { if(kb->event_cb != lv_kb_def_event_cb) {