feat(ime_pinyin): add API to use 9-key numeric keypad (#3460)
Like the 9-key Pinyin input mode, it is customized to adapt to the small screen. Co-authored-by: 100ask <team100ask@outlook.com>
This commit is contained in:
@@ -58,7 +58,7 @@ const lv_obj_class_t lv_ime_pinyin_class = {
|
|||||||
|
|
||||||
#if LV_IME_PINYIN_USE_K9_MODE
|
#if LV_IME_PINYIN_USE_K9_MODE
|
||||||
static char * lv_btnm_def_pinyin_k9_map[LV_IME_PINYIN_K9_CAND_TEXT_NUM + 21] = {\
|
static char * lv_btnm_def_pinyin_k9_map[LV_IME_PINYIN_K9_CAND_TEXT_NUM + 21] = {\
|
||||||
",\0", "1#\0", "abc \0", "def\0", LV_SYMBOL_BACKSPACE"\0", "\n\0",
|
",\0", "123\0", "abc \0", "def\0", LV_SYMBOL_BACKSPACE"\0", "\n\0",
|
||||||
".\0", "ghi\0", "jkl\0", "mno\0", LV_SYMBOL_KEYBOARD"\0", "\n\0",
|
".\0", "ghi\0", "jkl\0", "mno\0", LV_SYMBOL_KEYBOARD"\0", "\n\0",
|
||||||
"?\0", "pqrs\0", "tuv\0", "wxyz\0", LV_SYMBOL_NEW_LINE"\0", "\n\0",
|
"?\0", "pqrs\0", "tuv\0", "wxyz\0", LV_SYMBOL_NEW_LINE"\0", "\n\0",
|
||||||
LV_SYMBOL_LEFT"\0", "\0"
|
LV_SYMBOL_LEFT"\0", "\0"
|
||||||
@@ -647,12 +647,13 @@ static void lv_ime_pinyin_kb_event(lv_event_t * e)
|
|||||||
const char * txt = lv_btnmatrix_get_btn_text(kb, lv_btnmatrix_get_selected_btn(kb));
|
const char * txt = lv_btnmatrix_get_btn_text(kb, lv_btnmatrix_get_selected_btn(kb));
|
||||||
if(txt == NULL) return;
|
if(txt == NULL) return;
|
||||||
|
|
||||||
|
lv_obj_t * ta = lv_keyboard_get_textarea(pinyin_ime->kb);
|
||||||
|
|
||||||
#if LV_IME_PINYIN_USE_K9_MODE
|
#if LV_IME_PINYIN_USE_K9_MODE
|
||||||
if(pinyin_ime->mode == LV_IME_PINYIN_MODE_K9) {
|
if(pinyin_ime->mode == LV_IME_PINYIN_MODE_K9) {
|
||||||
lv_obj_t * ta = lv_keyboard_get_textarea(pinyin_ime->kb);
|
|
||||||
uint16_t tmp_btn_str_len = strlen(pinyin_ime->input_char);
|
uint16_t tmp_btn_str_len = strlen(pinyin_ime->input_char);
|
||||||
if((btn_id >= 16) && (tmp_btn_str_len > 0) && (btn_id < (16 + LV_IME_PINYIN_K9_CAND_TEXT_NUM))) {
|
if((btn_id >= 16) && (tmp_btn_str_len > 0) && (btn_id < (16 + LV_IME_PINYIN_K9_CAND_TEXT_NUM))) {
|
||||||
tmp_btn_str_len = strlen(pinyin_ime->input_char);
|
|
||||||
lv_memset_00(pinyin_ime->input_char, sizeof(pinyin_ime->input_char));
|
lv_memset_00(pinyin_ime->input_char, sizeof(pinyin_ime->input_char));
|
||||||
strcat(pinyin_ime->input_char, txt);
|
strcat(pinyin_ime->input_char, txt);
|
||||||
pinyin_input_proc(obj);
|
pinyin_input_proc(obj);
|
||||||
@@ -703,21 +704,32 @@ static void lv_ime_pinyin_kb_event(lv_event_t * e)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if((strcmp(txt, "ABC") == 0) || (strcmp(txt, "abc") == 0) || (strcmp(txt, "1#") == 0)) {
|
else if((strcmp(txt, "ABC") == 0) || (strcmp(txt, "abc") == 0) || (strcmp(txt, "1#") == 0) ||
|
||||||
|
(strcmp(txt, LV_SYMBOL_OK) == 0)) {
|
||||||
pinyin_ime_clear_data(obj);
|
pinyin_ime_clear_data(obj);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
else if(strcmp(txt, "123") == 0) {
|
||||||
|
for(uint16_t i = 0; i < strlen(txt); i++)
|
||||||
|
lv_textarea_del_char(ta);
|
||||||
|
|
||||||
|
pinyin_ime_clear_data(obj);
|
||||||
|
lv_textarea_set_cursor_pos(ta, LV_TEXTAREA_CURSOR_LAST);
|
||||||
|
lv_ime_pinyin_set_mode(obj, LV_IME_PINYIN_MODE_K9_NUMBER);
|
||||||
|
lv_keyboard_set_mode(kb, LV_KEYBOARD_MODE_NUMBER);
|
||||||
|
lv_obj_add_flag(pinyin_ime->cand_panel, LV_OBJ_FLAG_HIDDEN);
|
||||||
|
}
|
||||||
else if(strcmp(txt, LV_SYMBOL_KEYBOARD) == 0) {
|
else if(strcmp(txt, LV_SYMBOL_KEYBOARD) == 0) {
|
||||||
if(pinyin_ime->mode == LV_IME_PINYIN_MODE_K26) {
|
if(pinyin_ime->mode == LV_IME_PINYIN_MODE_K26) {
|
||||||
lv_ime_pinyin_set_mode(obj, LV_IME_PINYIN_MODE_K9);
|
lv_ime_pinyin_set_mode(obj, LV_IME_PINYIN_MODE_K9);
|
||||||
}
|
}
|
||||||
else {
|
else if(pinyin_ime->mode == LV_IME_PINYIN_MODE_K9) {
|
||||||
lv_ime_pinyin_set_mode(obj, LV_IME_PINYIN_MODE_K26);
|
lv_ime_pinyin_set_mode(obj, LV_IME_PINYIN_MODE_K26);
|
||||||
lv_keyboard_set_mode(pinyin_ime->kb, LV_KEYBOARD_MODE_TEXT_LOWER);
|
lv_keyboard_set_mode(pinyin_ime->kb, LV_KEYBOARD_MODE_TEXT_LOWER);
|
||||||
}
|
}
|
||||||
pinyin_ime_clear_data(obj);
|
else if(pinyin_ime->mode == LV_IME_PINYIN_MODE_K9_NUMBER) {
|
||||||
}
|
lv_ime_pinyin_set_mode(obj, LV_IME_PINYIN_MODE_K9);
|
||||||
else if(strcmp(txt, LV_SYMBOL_OK) == 0) {
|
}
|
||||||
pinyin_ime_clear_data(obj);
|
pinyin_ime_clear_data(obj);
|
||||||
}
|
}
|
||||||
else if((pinyin_ime->mode == LV_IME_PINYIN_MODE_K26) && ((txt[0] >= 'a' && txt[0] <= 'z') || (txt[0] >= 'A' &&
|
else if((pinyin_ime->mode == LV_IME_PINYIN_MODE_K26) && ((txt[0] >= 'a' && txt[0] <= 'z') || (txt[0] >= 'A' &&
|
||||||
@@ -940,7 +952,6 @@ static void pinyin_ime_clear_data(lv_obj_t * obj)
|
|||||||
{
|
{
|
||||||
lv_ime_pinyin_t * pinyin_ime = (lv_ime_pinyin_t *)obj;
|
lv_ime_pinyin_t * pinyin_ime = (lv_ime_pinyin_t *)obj;
|
||||||
|
|
||||||
|
|
||||||
#if LV_IME_PINYIN_USE_K9_MODE
|
#if LV_IME_PINYIN_USE_K9_MODE
|
||||||
if(pinyin_ime->mode == LV_IME_PINYIN_MODE_K9) {
|
if(pinyin_ime->mode == LV_IME_PINYIN_MODE_K9) {
|
||||||
pinyin_ime->k9_input_str_len = 0;
|
pinyin_ime->k9_input_str_len = 0;
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ extern "C" {
|
|||||||
typedef enum {
|
typedef enum {
|
||||||
LV_IME_PINYIN_MODE_K26,
|
LV_IME_PINYIN_MODE_K26,
|
||||||
LV_IME_PINYIN_MODE_K9,
|
LV_IME_PINYIN_MODE_K9,
|
||||||
|
LV_IME_PINYIN_MODE_K9_NUMBER,
|
||||||
} lv_ime_pinyin_mode_t;
|
} lv_ime_pinyin_mode_t;
|
||||||
|
|
||||||
/*Data of pinyin_dict*/
|
/*Data of pinyin_dict*/
|
||||||
@@ -141,4 +142,3 @@ lv_pinyin_dict_t * lv_ime_pinyin_get_dict(lv_obj_t * obj);
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /*LV_USE_IME_PINYIN*/
|
#endif /*LV_USE_IME_PINYIN*/
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user