From 33e86349afc93205cb57189ec46fa6a17f0e504c Mon Sep 17 00:00:00 2001 From: idea4good Date: Fri, 14 Jun 2019 14:00:23 +0800 Subject: [PATCH] refactor keyboard --- widgets/edit.cpp | 27 ++------ widgets/keyboard.cpp | 138 ++++++++++++++++++++----------------- widgets_include/edit.h | 4 +- widgets_include/keyboard.h | 5 +- 4 files changed, 83 insertions(+), 91 deletions(-) diff --git a/widgets/edit.cpp b/widgets/edit.cpp index 423fe93..bb0b0a5 100644 --- a/widgets/edit.cpp +++ b/widgets/edit.cpp @@ -8,23 +8,23 @@ #include "core_include/theme.h" #include "../widgets_include/button.h" #include "../widgets_include/label.h" +#include "../widgets_include/keyboard.h" #include "../widgets_include/edit.h" #include "../widgets_include/keyboard.h" #include -#define IDD_ALL_KEY_BOARD 0x5012 -#define IDD_NUM_KEY_BOARD 0x5013 +#define IDD_KEY_BOARD 0x1 GL_BEGIN_MESSAGE_MAP(c_edit) -ON_KEYBORAD_UPDATE(IDD_ALL_KEY_BOARD, c_edit::on_key_board_click) -ON_KEYBORAD_UPDATE(IDD_NUM_KEY_BOARD, c_edit::on_key_board_click) +ON_KEYBORAD_UPDATE(IDD_KEY_BOARD, c_edit::on_key_board_click) GL_END_MESSAGE_MAP() static c_keyboard s_keyboard; void c_edit::pre_create_wnd() { - m_style = GL_ATTR_VISIBLE | GL_ATTR_FOCUS | ALIGN_HCENTER | ALIGN_VCENTER | KEY_BOARD_STYLE; + m_style = GL_ATTR_VISIBLE | GL_ATTR_FOCUS | ALIGN_HCENTER | ALIGN_VCENTER; + m_kb_style = STYLE_ALL_BOARD; m_font_type = c_theme::get_font(FONT_DEFAULT); m_font_color = c_theme::get_color(COLOR_WND_FONT); @@ -165,22 +165,7 @@ void c_edit::on_paint() void c_edit::show_keyboard() { - if (s_keyboard.get_id()) - { - ASSERT(FALSE); - return; - } - - if ((get_style()&KEY_BOARD_STYLE) == KEY_BOARD_STYLE ) - { - s_keyboard.set_style(STYLE_ALL_BOARD); - s_keyboard.connect(this, IDD_ALL_KEY_BOARD); - } - else - { - s_keyboard.set_style(STYLE_NUM_BOARD); - s_keyboard.connect(this, IDD_NUM_KEY_BOARD); - } + s_keyboard.connect(this, IDD_KEY_BOARD, m_kb_style); c_rect kb_rect; s_keyboard.get_screen_rect(kb_rect); diff --git a/widgets/keyboard.cpp b/widgets/keyboard.cpp index e56be6b..974a26e 100644 --- a/widgets/keyboard.cpp +++ b/widgets/keyboard.cpp @@ -10,24 +10,25 @@ #include "../widgets_include/keyboard.h" #include -#define KEYBOARD_WIDTH (1024 * 2 / 3 - 10)//change this will change every key proportional -#define KEYBOARD_HEIGHT 165 -#define NUM_BOARD_WIDTH (65 * 4 + 2 * 5) -#define NUM_BOARD_HEIGHT (38 * 4 + 2 * 5) +//Changing key width/height will change the width/height of keyboard +#define KEY_WIDTH 65 +#define KEY_HEIGHT 38 -#define CHAR_HEIGHT ((KEYBOARD_HEIGHT - 5* 2) / 4) -#define CHAR_WIDTH ((KEYBOARD_WIDTH - 11 * 2) / 10) +#define KEYBOARD_WIDTH ((KEY_WIDTH + 2) * 10) +#define KEYBOARD_HEIGHT ((KEY_HEIGHT + 2) * 4) +#define NUM_BOARD_WIDTH ((KEY_WIDTH + 2) * 4) +#define NUM_BOARD_HEIGHT ((KEY_HEIGHT + 2) * 4) -#define CAPS_WIDTH (CHAR_WIDTH * 3 / 2) -#define DEL_WIDTH (CHAR_WIDTH * 3 / 2 + 1) -#define ESC_WIDTH (CHAR_WIDTH * 2 + 2) -#define SWITCH_WIDTH (CHAR_WIDTH * 3 / 2 ) -#define SPACE_WIDTH (CHAR_WIDTH * 3 + 2 * 2) -#define DOT_WIDTH (CHAR_WIDTH * 3 / 2 + 3) -#define ENTER_WIDTH (CHAR_WIDTH * 2 + 2) +#define CAPS_WIDTH (KEY_WIDTH * 3 / 2) +#define DEL_WIDTH (KEY_WIDTH * 3 / 2 + 1) +#define ESC_WIDTH (KEY_WIDTH * 2 + 2) +#define SWITCH_WIDTH (KEY_WIDTH * 3 / 2 ) +#define SPACE_WIDTH (KEY_WIDTH * 3 + 2 * 2) +#define DOT_WIDTH (KEY_WIDTH * 3 / 2 + 3) +#define ENTER_WIDTH (KEY_WIDTH * 2 + 2) -#define POS_X(c) ((CHAR_WIDTH * c) + (c + 1) * 2) -#define POS_Y(r) ((CHAR_HEIGHT * r) + (r + 1) * 2) +#define POS_X(c) ((KEY_WIDTH * c) + (c + 1) * 2) +#define POS_Y(r) ((KEY_HEIGHT * r) + (r + 1) * 2) static c_keyboard_button s_button_0,s_button_1, s_button_2, s_button_3, s_button_4, s_button_5, s_button_6, s_button_7, s_button_8, s_button_9; static c_keyboard_button s_button_A, s_button_B, s_button_C, s_button_D, s_button_E, s_button_F, s_button_G, s_button_H, s_button_I, s_button_J; @@ -38,64 +39,64 @@ static c_keyboard_button s_button_dot, s_button_caps, s_button_space, s_button_e WND_TREE g_key_board_children[] = { //Row 1 - {&s_button_Q, 'Q', 0, POS_X(0), POS_Y(0), CHAR_WIDTH, CHAR_HEIGHT}, - {&s_button_W, 'W', 0, POS_X(1), POS_Y(0), CHAR_WIDTH, CHAR_HEIGHT}, - {&s_button_E, 'E', 0, POS_X(2), POS_Y(0), CHAR_WIDTH, CHAR_HEIGHT}, - {&s_button_R, 'R', 0, POS_X(3), POS_Y(0), CHAR_WIDTH, CHAR_HEIGHT}, - {&s_button_T, 'T', 0, POS_X(4), POS_Y(0), CHAR_WIDTH, CHAR_HEIGHT}, - {&s_button_Y, 'Y', 0, POS_X(5), POS_Y(0), CHAR_WIDTH, CHAR_HEIGHT}, - {&s_button_U, 'U', 0, POS_X(6), POS_Y(0), CHAR_WIDTH, CHAR_HEIGHT}, - {&s_button_I, 'I', 0, POS_X(7), POS_Y(0), CHAR_WIDTH, CHAR_HEIGHT}, - {&s_button_O, 'O', 0, POS_X(8), POS_Y(0), CHAR_WIDTH, CHAR_HEIGHT}, - {&s_button_P, 'P', 0, POS_X(9), POS_Y(0), CHAR_WIDTH, CHAR_HEIGHT}, + {&s_button_Q, 'Q', 0, POS_X(0), POS_Y(0), KEY_WIDTH, KEY_HEIGHT}, + {&s_button_W, 'W', 0, POS_X(1), POS_Y(0), KEY_WIDTH, KEY_HEIGHT}, + {&s_button_E, 'E', 0, POS_X(2), POS_Y(0), KEY_WIDTH, KEY_HEIGHT}, + {&s_button_R, 'R', 0, POS_X(3), POS_Y(0), KEY_WIDTH, KEY_HEIGHT}, + {&s_button_T, 'T', 0, POS_X(4), POS_Y(0), KEY_WIDTH, KEY_HEIGHT}, + {&s_button_Y, 'Y', 0, POS_X(5), POS_Y(0), KEY_WIDTH, KEY_HEIGHT}, + {&s_button_U, 'U', 0, POS_X(6), POS_Y(0), KEY_WIDTH, KEY_HEIGHT}, + {&s_button_I, 'I', 0, POS_X(7), POS_Y(0), KEY_WIDTH, KEY_HEIGHT}, + {&s_button_O, 'O', 0, POS_X(8), POS_Y(0), KEY_WIDTH, KEY_HEIGHT}, + {&s_button_P, 'P', 0, POS_X(9), POS_Y(0), KEY_WIDTH, KEY_HEIGHT}, //Row 2 - {&s_button_A, 'A', 0, ((CHAR_WIDTH / 2) + POS_X(0)), POS_Y(1), CHAR_WIDTH, CHAR_HEIGHT}, - {&s_button_S, 'S', 0, ((CHAR_WIDTH / 2) + POS_X(1)), POS_Y(1), CHAR_WIDTH, CHAR_HEIGHT}, - {&s_button_D, 'D', 0, ((CHAR_WIDTH / 2) + POS_X(2)), POS_Y(1), CHAR_WIDTH, CHAR_HEIGHT}, - {&s_button_F, 'F', 0, ((CHAR_WIDTH / 2) + POS_X(3)), POS_Y(1), CHAR_WIDTH, CHAR_HEIGHT}, - {&s_button_G, 'G', 0, ((CHAR_WIDTH / 2) + POS_X(4)), POS_Y(1), CHAR_WIDTH, CHAR_HEIGHT}, - {&s_button_H, 'H', 0, ((CHAR_WIDTH / 2) + POS_X(5)), POS_Y(1), CHAR_WIDTH, CHAR_HEIGHT}, - {&s_button_J, 'J', 0, ((CHAR_WIDTH / 2) + POS_X(6)), POS_Y(1), CHAR_WIDTH, CHAR_HEIGHT}, - {&s_button_K, 'K', 0, ((CHAR_WIDTH / 2) + POS_X(7)), POS_Y(1), CHAR_WIDTH, CHAR_HEIGHT}, - {&s_button_L, 'L', 0, ((CHAR_WIDTH / 2) + POS_X(8)), POS_Y(1), CHAR_WIDTH, CHAR_HEIGHT}, + {&s_button_A, 'A', 0, ((KEY_WIDTH / 2) + POS_X(0)), POS_Y(1), KEY_WIDTH, KEY_HEIGHT}, + {&s_button_S, 'S', 0, ((KEY_WIDTH / 2) + POS_X(1)), POS_Y(1), KEY_WIDTH, KEY_HEIGHT}, + {&s_button_D, 'D', 0, ((KEY_WIDTH / 2) + POS_X(2)), POS_Y(1), KEY_WIDTH, KEY_HEIGHT}, + {&s_button_F, 'F', 0, ((KEY_WIDTH / 2) + POS_X(3)), POS_Y(1), KEY_WIDTH, KEY_HEIGHT}, + {&s_button_G, 'G', 0, ((KEY_WIDTH / 2) + POS_X(4)), POS_Y(1), KEY_WIDTH, KEY_HEIGHT}, + {&s_button_H, 'H', 0, ((KEY_WIDTH / 2) + POS_X(5)), POS_Y(1), KEY_WIDTH, KEY_HEIGHT}, + {&s_button_J, 'J', 0, ((KEY_WIDTH / 2) + POS_X(6)), POS_Y(1), KEY_WIDTH, KEY_HEIGHT}, + {&s_button_K, 'K', 0, ((KEY_WIDTH / 2) + POS_X(7)), POS_Y(1), KEY_WIDTH, KEY_HEIGHT}, + {&s_button_L, 'L', 0, ((KEY_WIDTH / 2) + POS_X(8)), POS_Y(1), KEY_WIDTH, KEY_HEIGHT}, //Row 3 - {&s_button_caps, 0x14, 0, POS_X(0), POS_Y(2), CAPS_WIDTH, CHAR_HEIGHT}, - {&s_button_Z, 'Z', 0, ((CHAR_WIDTH / 2) + POS_X(1)), POS_Y(2), CHAR_WIDTH, CHAR_HEIGHT}, - {&s_button_X, 'X', 0, ((CHAR_WIDTH / 2) + POS_X(2)), POS_Y(2), CHAR_WIDTH, CHAR_HEIGHT}, - {&s_button_C, 'C', 0, ((CHAR_WIDTH / 2) + POS_X(3)), POS_Y(2), CHAR_WIDTH, CHAR_HEIGHT}, - {&s_button_V, 'V', 0, ((CHAR_WIDTH / 2) + POS_X(4)), POS_Y(2), CHAR_WIDTH, CHAR_HEIGHT}, - {&s_button_B, 'B', 0, ((CHAR_WIDTH / 2) + POS_X(5)), POS_Y(2), CHAR_WIDTH, CHAR_HEIGHT}, - {&s_button_N, 'N', 0, ((CHAR_WIDTH / 2) + POS_X(6)), POS_Y(2), CHAR_WIDTH, CHAR_HEIGHT}, - {&s_button_M, 'M', 0, ((CHAR_WIDTH / 2) + POS_X(7)), POS_Y(2), CHAR_WIDTH, CHAR_HEIGHT}, - {&s_button_del, 0x7F, 0, ((CHAR_WIDTH / 2) + POS_X(8)), POS_Y(2), DEL_WIDTH, CHAR_HEIGHT}, + {&s_button_caps, 0x14, 0, POS_X(0), POS_Y(2), CAPS_WIDTH, KEY_HEIGHT}, + {&s_button_Z, 'Z', 0, ((KEY_WIDTH / 2) + POS_X(1)), POS_Y(2), KEY_WIDTH, KEY_HEIGHT}, + {&s_button_X, 'X', 0, ((KEY_WIDTH / 2) + POS_X(2)), POS_Y(2), KEY_WIDTH, KEY_HEIGHT}, + {&s_button_C, 'C', 0, ((KEY_WIDTH / 2) + POS_X(3)), POS_Y(2), KEY_WIDTH, KEY_HEIGHT}, + {&s_button_V, 'V', 0, ((KEY_WIDTH / 2) + POS_X(4)), POS_Y(2), KEY_WIDTH, KEY_HEIGHT}, + {&s_button_B, 'B', 0, ((KEY_WIDTH / 2) + POS_X(5)), POS_Y(2), KEY_WIDTH, KEY_HEIGHT}, + {&s_button_N, 'N', 0, ((KEY_WIDTH / 2) + POS_X(6)), POS_Y(2), KEY_WIDTH, KEY_HEIGHT}, + {&s_button_M, 'M', 0, ((KEY_WIDTH / 2) + POS_X(7)), POS_Y(2), KEY_WIDTH, KEY_HEIGHT}, + {&s_button_del, 0x7F, 0, ((KEY_WIDTH / 2) + POS_X(8)), POS_Y(2), DEL_WIDTH, KEY_HEIGHT}, //Row 4 - {&s_button_esc, 0x1B, 0, POS_X(0), POS_Y(3), ESC_WIDTH, CHAR_HEIGHT}, - {&s_button_num_switch, 0x90, 0, POS_X(2), POS_Y(3), SWITCH_WIDTH, CHAR_HEIGHT}, - {&s_button_space, ' ', 0, ((CHAR_WIDTH / 2) + POS_X(3)), POS_Y(3), SPACE_WIDTH, CHAR_HEIGHT}, - {&s_button_dot, '.', 0, ((CHAR_WIDTH / 2) + POS_X(6)), POS_Y(3), DOT_WIDTH, CHAR_HEIGHT}, - {&s_button_enter, '\n', 0, POS_X(8), POS_Y(3), ENTER_WIDTH, CHAR_HEIGHT}, + {&s_button_esc, 0x1B, 0, POS_X(0), POS_Y(3), ESC_WIDTH, KEY_HEIGHT}, + {&s_button_num_switch, 0x90, 0, POS_X(2), POS_Y(3), SWITCH_WIDTH, KEY_HEIGHT}, + {&s_button_space, ' ', 0, ((KEY_WIDTH / 2) + POS_X(3)), POS_Y(3), SPACE_WIDTH, KEY_HEIGHT}, + {&s_button_dot, '.', 0, ((KEY_WIDTH / 2) + POS_X(6)), POS_Y(3), DOT_WIDTH, KEY_HEIGHT}, + {&s_button_enter, '\n', 0, POS_X(8), POS_Y(3), ENTER_WIDTH, KEY_HEIGHT}, {NULL,0,0,0,0,0,0} }; WND_TREE g_number_board_children[] = { - {&s_button_1, '1', 0, POS_X(0), POS_Y(0), CHAR_WIDTH, CHAR_HEIGHT}, - {&s_button_2, '2', 0, POS_X(1), POS_Y(0), CHAR_WIDTH, CHAR_HEIGHT}, - {&s_button_3, '3', 0, POS_X(2), POS_Y(0), CHAR_WIDTH, CHAR_HEIGHT}, - {&s_button_del, 0x7F, 0, POS_X(3), POS_Y(0), CHAR_WIDTH, CHAR_HEIGHT * 2 + 2}, + {&s_button_1, '1', 0, POS_X(0), POS_Y(0), KEY_WIDTH, KEY_HEIGHT}, + {&s_button_2, '2', 0, POS_X(1), POS_Y(0), KEY_WIDTH, KEY_HEIGHT}, + {&s_button_3, '3', 0, POS_X(2), POS_Y(0), KEY_WIDTH, KEY_HEIGHT}, + {&s_button_del, 0x7F, 0, POS_X(3), POS_Y(0), KEY_WIDTH, KEY_HEIGHT * 2 + 2}, - {&s_button_4, '4', 0, POS_X(0), POS_Y(1), CHAR_WIDTH, CHAR_HEIGHT}, - {&s_button_5, '5', 0, POS_X(1), POS_Y(1), CHAR_WIDTH, CHAR_HEIGHT}, - {&s_button_6, '6', 0, POS_X(2), POS_Y(1), CHAR_WIDTH, CHAR_HEIGHT}, + {&s_button_4, '4', 0, POS_X(0), POS_Y(1), KEY_WIDTH, KEY_HEIGHT}, + {&s_button_5, '5', 0, POS_X(1), POS_Y(1), KEY_WIDTH, KEY_HEIGHT}, + {&s_button_6, '6', 0, POS_X(2), POS_Y(1), KEY_WIDTH, KEY_HEIGHT}, - {&s_button_7, '7', 0, POS_X(0), POS_Y(2), CHAR_WIDTH, CHAR_HEIGHT}, - {&s_button_8, '8', 0, POS_X(1), POS_Y(2), CHAR_WIDTH, CHAR_HEIGHT}, - {&s_button_9, '9', 0, POS_X(2), POS_Y(2), CHAR_WIDTH, CHAR_HEIGHT}, - {&s_button_enter,'\n', 0, POS_X(3), POS_Y(2), CHAR_WIDTH, CHAR_HEIGHT * 2 + 2}, + {&s_button_7, '7', 0, POS_X(0), POS_Y(2), KEY_WIDTH, KEY_HEIGHT}, + {&s_button_8, '8', 0, POS_X(1), POS_Y(2), KEY_WIDTH, KEY_HEIGHT}, + {&s_button_9, '9', 0, POS_X(2), POS_Y(2), KEY_WIDTH, KEY_HEIGHT}, + {&s_button_enter,'\n', 0, POS_X(3), POS_Y(2), KEY_WIDTH, KEY_HEIGHT * 2 + 2}, - {&s_button_esc, 0x1B, 0, POS_X(0), POS_Y(3), CHAR_WIDTH, CHAR_HEIGHT}, - {&s_button_0, '0', 0, POS_X(1), POS_Y(3), CHAR_WIDTH, CHAR_HEIGHT}, - {&s_button_dot, '.', 0, POS_X(2), POS_Y(3), CHAR_WIDTH, CHAR_HEIGHT}, + {&s_button_esc, 0x1B, 0, POS_X(0), POS_Y(3), KEY_WIDTH, KEY_HEIGHT}, + {&s_button_0, '0', 0, POS_X(1), POS_Y(3), KEY_WIDTH, KEY_HEIGHT}, + {&s_button_dot, '.', 0, POS_X(2), POS_Y(3), KEY_WIDTH, KEY_HEIGHT}, {NULL,0,0,0,0,0,0} }; @@ -145,17 +146,17 @@ ON_GL_BN_CLICKED('\n', c_keyboard::on_enter_clicked) ON_GL_BN_CLICKED(0x1B, c_keyboard::on_esc_clicked) GL_END_MESSAGE_MAP() -int c_keyboard::connect(c_wnd *user, unsigned short resource_id) +int c_keyboard::connect(c_wnd *user, unsigned short resource_id, KEYBOARD_STYLE style) { c_rect user_rect; user->get_wnd_rect(user_rect); - if (m_style == STYLE_ALL_BOARD) + if (style == STYLE_ALL_BOARD) {//Place keyboard at the bottom of user's parent window. c_rect user_parent_rect; user->get_parent()->get_wnd_rect(user_parent_rect); return c_wnd::connect(user, resource_id, NULL, (0 - user_rect.m_left), (user_parent_rect.Height() - user_rect.m_top - KEYBOARD_HEIGHT), KEYBOARD_WIDTH, KEYBOARD_HEIGHT, g_key_board_children); } - else if(m_style == STYLE_NUM_BOARD) + else if(style == STYLE_NUM_BOARD) {//Place keyboard below the user window. return c_wnd::connect(user, resource_id, NULL, 0, user_rect.Height(), NUM_BOARD_WIDTH, NUM_BOARD_HEIGHT, g_number_board_children); } @@ -227,6 +228,13 @@ InputChar: notify_parent(KEYBORAD_CLICK, get_id(), CLICK_CHAR); } +void c_keyboard::on_paint() +{ + c_rect rect; + get_screen_rect(rect); + m_surface->fill_rect(rect, GL_RGB(0, 0, 0), m_z_order); +} + void c_keyboard_button::on_paint() { c_rect rect; diff --git a/widgets_include/edit.h b/widgets_include/edit.h index 5c0caad..9e8a847 100644 --- a/widgets_include/edit.h +++ b/widgets_include/edit.h @@ -1,8 +1,6 @@ #ifndef EDIT_H #define EDIT_H -#define KEY_BOARD_STYLE 0x00001000L -#define NUM_BOARD_STYLE 0x00002000L #define MAX_EDIT_STRLEN 32 class c_edit : public c_wnd @@ -12,6 +10,7 @@ public: virtual c_wnd* clone(){return new c_edit();} const char* get_text(){return m_str;} void set_text(const char* str); + void set_keyboard_style(KEYBOARD_STYLE kb_sytle) { m_kb_style = kb_sytle; } protected: virtual void pre_create_wnd(); @@ -27,6 +26,7 @@ private: void on_touch_down(int x, int y); void on_touch_up(int x, int y); + KEYBOARD_STYLE m_kb_style; char m_str_input[MAX_EDIT_STRLEN]; char m_str[MAX_EDIT_STRLEN]; }; diff --git a/widgets_include/keyboard.h b/widgets_include/keyboard.h index a09fd33..86991d1 100644 --- a/widgets_include/keyboard.h +++ b/widgets_include/keyboard.h @@ -27,13 +27,13 @@ typedef enum class c_keyboard: public c_wnd { public: - virtual int connect(c_wnd *user, unsigned short resource_id); + virtual int connect(c_wnd *user, unsigned short resource_id, KEYBOARD_STYLE style); KEYBOARD_STATUS get_cap_status(){return m_cap_status;} - void set_style(KEYBOARD_STYLE style) { m_style = style; } char* get_str() { return m_str; } protected: virtual void pre_create_wnd(); virtual c_wnd* clone(){return new c_keyboard();} + virtual void on_paint(); void on_char_clicked(unsigned int ctrl_id); void on_del_clicked(unsigned int ctrl_id); @@ -46,7 +46,6 @@ private: char m_str[32]; int m_str_len; KEYBOARD_STATUS m_cap_status; - KEYBOARD_STYLE m_stlyle; }; class c_keyboard_button : public c_button