From 1f128b379c3ec5c40621087d1132fb486b888a34 Mon Sep 17 00:00:00 2001 From: idea4good Date: Wed, 17 Apr 2019 15:00:47 +0800 Subject: [PATCH] !17 Support UI navigation by hardware button --- README.md | 7 +- core/core_include/wnd.h | 40 ++++--- core/src/wnd.cpp | 185 +++++++++++++---------------- doc/HelloNavigation.gif | Bin 0 -> 76796 bytes widgets/src/button.cpp | 27 +++-- widgets/src/dialog.cpp | 29 +---- widgets/src/edit.cpp | 12 +- widgets/src/gesture.cpp | 4 +- widgets/src/label.cpp | 2 +- widgets/src/list_box.cpp | 12 +- widgets/src/slide_group.cpp | 1 - widgets/src/spinbox.cpp | 12 +- widgets/widgets_include/button.h | 5 +- widgets/widgets_include/dialog.h | 3 +- widgets/widgets_include/edit.h | 5 +- widgets/widgets_include/list_box.h | 5 +- widgets/widgets_include/spinbox.h | 11 +- 17 files changed, 182 insertions(+), 178 deletions(-) create mode 100644 doc/HelloNavigation.gif diff --git a/README.md b/README.md index 2af1d1f..1b09c6e 100644 --- a/README.md +++ b/README.md @@ -16,8 +16,10 @@ - ⚙️希望GuiLite小到足够帮助大家掌握UI工作原理,从而摆脱UI框架的束缚,构建自己独一无二的UI - 👑任何UI框架都不为你我而生,你才是自己真正的主人 -## 🔥新功能:Golang + GuiLite -为了演示GuiLite与Golang协同开发,我们为[HostMonitor](https://gitee.com/idea4good/GuiLiteSamples/tree/master/HostMonitor)增加了[Golang版本](https://gitee.com/idea4good/GuiLiteSamples/tree/master/HostMonitor/BuildGo) +## 🔥新功能:硬按键“导航” +![HelloNavigation](doc/HelloNavigation.gif) + +Hello Navigation 仅有[100+行代码](https://gitee.com/idea4good/GuiLiteSamples/tree/master/HelloNavigation/UIcode/UIcode.cpp),用于向开发者展示:如何使用硬按键进行:“移动焦点”和“点击”操作。 ## 功能介绍 ### 卓越的跨平台能力 @@ -60,6 +62,7 @@ GuiLite只是一个框架,本身并不能生成UI。为了能够展示如何 | HelloParticle | Windows, Linux, STM32F103, STM32F429 | 粒子效果的应用 | [编译/运行](https://gitee.com/idea4good/GuiLiteSamples/blob/master/HelloParticle/README.md) | ★| | HelloGuiLite | Windows, Linux | 初始化GuiLite,加载资源,布局界面元素,按钮响应 | [编译/运行](https://gitee.com/idea4good/GuiLiteSamples/blob/master/HelloGuiLite/README.md) | ★★| | HelloMario | Windows, Linux, STM32F103, STM32F429 | 多图层的UI系统 | [编译/运行](https://gitee.com/idea4good/GuiLiteSamples/blob/master/HelloMario/README.md) | ★★| +| HelloNavigation | Windows, Linux, STM32F103, STM32F429 | 通过硬按键进行UI“导航” | [编译/运行](https://gitee.com/idea4good/GuiLiteSamples/blob/master/HelloNavigation/README.md) | ★★| | HelloFont | Windows, Linux | 显示多种语言(不限:中、英文) | [编译/运行](https://gitee.com/idea4good/GuiLiteSamples/blob/master/HelloFont/README.md) | ★★| | HelloAnimation | Windows, Linux | 动画的应用 | [编译/运行](https://gitee.com/idea4good/GuiLiteSamples/blob/master/HelloAnimation/README.md) | ★★| | HelloSlide | Windows, Linux | 滑屏界面的应用 | [编译/运行](https://gitee.com/idea4good/GuiLiteSamples/blob/master/HelloSlide/README.md) | ★★★| diff --git a/core/core_include/wnd.h b/core/core_include/wnd.h index 7a46a24..d7da42b 100644 --- a/core/core_include/wnd.h +++ b/core/core_include/wnd.h @@ -1,10 +1,10 @@ -#ifndef GUI_WND_H -#define GUI_WND_H +#ifndef WND_H +#define WND_H //Window attribution #define GL_ATTR_VISIBLE 0x80000000L -#define GL_ATTR_DISABLED 0x40000000L -#define GL_ATTR_FOCUS 0x20000000L +#define GL_ATTR_DISABLED 0x40000000L +#define GL_ATTR_FOCUS 0x20000000L typedef struct struct_font_info FONT_INFO; typedef struct struct_color_rect COLOR_RECT; @@ -20,6 +20,19 @@ typedef enum STATUS_DISABLED }WND_STATUS; +typedef enum +{ + KEY_FORWARD, + KEY_BACKWARD, + KEY_ENTER +}KEY_TYPE; + +typedef enum +{ + TOUCH_DOWN, + TOUCH_UP +}TOUCH_ACTION; + typedef struct struct_wnd_tree { c_wnd* p_wnd; @@ -69,7 +82,7 @@ public: void get_wnd_rect(c_rect &rect) const; void get_screen_rect(c_rect &rect) const; - c_wnd* set_focus(c_wnd *new_active_child); + c_wnd* set_child_focus(c_wnd *focus_child); c_wnd* get_parent() const { return m_parent; } c_wnd* get_last_child() const; @@ -80,16 +93,13 @@ public: void notify_parent(unsigned short msg_id, unsigned int w_param, long l_param); virtual int on_notify(unsigned short notify_code, unsigned short ctrl_id, long l_param); - virtual void on_touch_up(int x, int y); - virtual void on_touch_down(int x, int y); - - c_wnd* get_active_child() const { return m_active_child; } + virtual bool on_touch(int x, int y, TOUCH_ACTION action); + virtual bool on_key(KEY_TYPE key); c_surface* get_surface() { return m_surface; } void set_surface(c_surface* surface) { m_surface = surface; } protected: - virtual void pre_create_wnd(); - void add_child_2_head(c_wnd *child); + virtual void pre_create_wnd() {}; void add_child_2_tail(c_wnd *child); void wnd2screen(int &x, int &y) const; @@ -99,10 +109,10 @@ protected: int load_child_wnd(WND_TREE *p_child_tree); int load_clone_child_wnd(WND_TREE *p_child_tree); - void set_active_child(c_wnd* child) { m_active_child = child; } + void set_active_child(c_wnd* child) { m_focus_child = child; } - virtual void on_focus(); - virtual void on_kill_focus(); + virtual void on_focus() {}; + virtual void on_kill_focus() {}; protected: WND_STATUS m_status; unsigned int m_style; @@ -120,7 +130,7 @@ protected: unsigned short m_resource_id; int m_z_order; - c_wnd* m_active_child; + c_wnd* m_focus_child;//current focused wnd c_surface* m_surface; private: c_wnd(const c_wnd &win); diff --git a/core/src/wnd.cpp b/core/src/wnd.cpp index 62b8ca9..07d573a 100644 --- a/core/src/wnd.cpp +++ b/core/src/wnd.cpp @@ -7,12 +7,7 @@ #include "../core_include/wnd.h" c_wnd::c_wnd(): m_status(STATUS_NORMAL), m_style(GL_ATTR_VISIBLE), m_parent(NULL), m_top_child(NULL), m_prev_sibling(NULL), m_next_sibling(NULL), - m_str(0), m_font_color(0), m_bg_color(0), m_resource_id(0), m_z_order(Z_ORDER_LEVEL_0), m_active_child(NULL), m_surface(NULL) -{ - m_wnd_rect.Empty(); -} - -void c_wnd::pre_create_wnd() + m_str(0), m_font_color(0), m_bg_color(0), m_resource_id(0), m_z_order(Z_ORDER_LEVEL_0), m_focus_child(NULL), m_surface(NULL) { m_style = GL_ATTR_VISIBLE | GL_ATTR_FOCUS; } @@ -192,7 +187,7 @@ void c_wnd::disconnect() { m_parent->unlink_child(this); } - m_active_child = 0; + m_focus_child = 0; m_resource_id = 0; } @@ -278,21 +273,18 @@ void c_wnd::wnd2screen(int &x, int &y) const x += rect.m_left; y += rect.m_top; - parent = parent->get_parent(); + parent = parent->m_parent; } } void c_wnd::wnd2screen(c_rect &rect) const { - int l, t, r, b; - - l = rect.m_left; - t = rect.m_top; + int l = rect.m_left; + int t = rect.m_top; wnd2screen(l, t); - r = (l + rect.Width() - 1); - b = (t + rect.Height() - 1); - + int r = (l + rect.Width() - 1); + int b = (t + rect.Height() - 1); rect.SetRect(l, t, r, b); } @@ -309,65 +301,45 @@ void c_wnd::screen2wnd(short &x, short &y) const parent->get_wnd_rect(rect); x -= rect.m_left; y -= rect.m_top; - parent = parent->get_parent(); + parent = parent->m_parent; } } void c_wnd::screen2wnd(c_rect &rect) const { - short l, t, r, b; - - l = rect.m_left; - t = rect.m_top; + short l = rect.m_left; + short t = rect.m_top; screen2wnd(l, t); - r = l + rect.Width() - 1; - b = t + rect.Height() - 1; - + short r = l + rect.Width() - 1; + short b = t + rect.Height() - 1; rect.SetRect(l, t, r, b); } -void c_wnd::on_focus() -{ - if (m_active_child) - { - m_active_child->on_focus(); - } -} - -void c_wnd::on_kill_focus() -{ - if (m_active_child) - { - m_active_child->on_kill_focus(); - m_active_child = 0; - } -} - -c_wnd* c_wnd::set_focus(c_wnd * new_active_child) +c_wnd* c_wnd::set_child_focus(c_wnd * focus_child) { - ASSERT(NULL != new_active_child); - ASSERT(new_active_child->get_parent() == this); + ASSERT(NULL != focus_child); + ASSERT(focus_child->m_parent == this); - c_wnd *old_focus_child = m_active_child; - if (new_active_child->is_focus_wnd()) + c_wnd *old_focus_child = m_focus_child; + if (focus_child->is_focus_wnd()) { - if ( new_active_child != old_focus_child ) + if (focus_child != old_focus_child ) { - if (0 != old_focus_child) + if (old_focus_child) { old_focus_child->on_kill_focus(); } - m_active_child = new_active_child; + m_focus_child = focus_child; - if (get_parent()) + if (m_parent) { - get_parent()->set_focus(this); + m_parent->set_child_focus(this); } - m_active_child->on_focus(); + m_focus_child->on_focus(); } } - return m_active_child; + return m_focus_child; } int c_wnd::on_notify(unsigned short notify_code, unsigned short ctrl_id, long l_param) @@ -401,26 +373,6 @@ int c_wnd::on_notify(unsigned short notify_code, unsigned short ctrl_id, long l_ return FALSE; } -void c_wnd::add_child_2_head(c_wnd *child) -{ - if( NULL == child )return; - if(child == get_wnd_ptr(child->m_resource_id))return; - - if ( NULL == m_top_child ) - { - m_top_child = child; - child->m_prev_sibling = NULL; - child->m_next_sibling = NULL; - } - else - { - child->m_next_sibling = m_top_child; - child->m_prev_sibling = NULL; - m_top_child->m_prev_sibling = child; - m_top_child = child; - } -} - void c_wnd::add_child_2_tail(c_wnd *child) { if( NULL == child )return; @@ -465,7 +417,7 @@ c_wnd* c_wnd::get_last_child() const int c_wnd::unlink_child(c_wnd *child) { if ((NULL == child) - || (this != child->get_parent())) + || (this != child->m_parent)) { return -1; } @@ -510,9 +462,9 @@ int c_wnd::unlink_child(c_wnd *child) if (TRUE == find) { - if (m_active_child == child) + if (m_focus_child == child) { - m_active_child = NULL; + m_focus_child = NULL; } child->m_next_sibling = NULL; @@ -542,58 +494,91 @@ void c_wnd::show_window() } } -void c_wnd::on_touch_down(int x, int y) +bool c_wnd::on_touch(int x, int y, TOUCH_ACTION action) { c_rect rect; x -= m_wnd_rect.m_left; y -= m_wnd_rect.m_top; c_wnd *pChild = m_top_child; - if ( pChild != NULL ) + while ( pChild ) { - while ( pChild ) + if (GL_ATTR_VISIBLE == (pChild->m_style & GL_ATTR_VISIBLE)) { - if (GL_ATTR_VISIBLE == (pChild->m_style & GL_ATTR_VISIBLE)) + pChild->get_wnd_rect(rect); + if ( TRUE == rect.PtInRect(x, y) ) { - pChild->get_wnd_rect(rect); - if ( TRUE == rect.PtInRect(x, y) ) + if ( TRUE == pChild->is_focus_wnd() ) { - if ( TRUE == pChild->is_focus_wnd() ) - { - pChild->on_touch_down(x, y); - } + pChild->on_touch(x, y, action); } } - pChild = pChild->get_next_sibling(); } + pChild = pChild->m_next_sibling; } + return true; } -void c_wnd::on_touch_up(int x, int y) +bool c_wnd::on_key(KEY_TYPE key) { - c_rect rect; - x -= m_wnd_rect.m_left; - y -= m_wnd_rect.m_top; - c_wnd *pChild = m_top_child; + ASSERT(key == KEY_FORWARD || key == KEY_BACKWARD || key == KEY_ENTER); - if ( pChild != NULL ) + // Find current focus wnd. + c_wnd* old_focus_wnd = m_focus_child; + while (m_focus_child && m_focus_child->m_focus_child) { - while ( pChild ) + old_focus_wnd = m_focus_child->m_focus_child; + } + if (old_focus_wnd && !old_focus_wnd->on_key(key)) + { + return true; + } + + // Default moving focus(Default handle KEY_FOWARD/KEY_BACKWARD) + if (key == KEY_ENTER) + { + return true; + } + if (!old_focus_wnd) + {// No current focus wnd, new one. + c_wnd *pChild = m_top_child; + c_wnd *new_focus_wnd = NULL; + while (pChild) { if (GL_ATTR_VISIBLE == (pChild->m_style & GL_ATTR_VISIBLE)) { - pChild->get_wnd_rect(rect); - if ( TRUE == rect.PtInRect(x, y) ) + if (TRUE == pChild->is_focus_wnd()) { - if ( TRUE == pChild->is_focus_wnd() ) - { - pChild->on_touch_up(x, y); - } + new_focus_wnd = pChild; + new_focus_wnd->m_parent->set_child_focus(new_focus_wnd); + pChild = pChild->m_top_child; + continue; } } - pChild = pChild->get_next_sibling(); + pChild = pChild->m_next_sibling; + } + return true; + } + + // Move focus from old wnd to next wnd + c_wnd* next_focus_wnd = (key == KEY_FORWARD) ? old_focus_wnd->m_next_sibling : old_focus_wnd->m_prev_sibling; + while (next_focus_wnd && (!next_focus_wnd->is_focus_wnd())) + {// Search neighbor of old focus wnd + next_focus_wnd = (key == KEY_FORWARD) ? next_focus_wnd->m_next_sibling : next_focus_wnd->m_prev_sibling; + } + if (!next_focus_wnd) + {// Search whole brother wnd + next_focus_wnd = (key == KEY_FORWARD) ? old_focus_wnd->m_parent->m_top_child : old_focus_wnd->m_parent->get_last_child(); + while (next_focus_wnd && (!next_focus_wnd->is_focus_wnd())) + { + next_focus_wnd = (key == KEY_FORWARD) ? next_focus_wnd->m_next_sibling : next_focus_wnd->m_prev_sibling; } } + if (next_focus_wnd) + { + next_focus_wnd->m_parent->set_child_focus(next_focus_wnd); + } + return true; } void c_wnd::notify_parent(unsigned short msg_id, unsigned int w_param, long l_param) diff --git a/doc/HelloNavigation.gif b/doc/HelloNavigation.gif new file mode 100644 index 0000000000000000000000000000000000000000..6f474b8925b4f420441ff305ac13a3d52d1a9c13 GIT binary patch literal 76796 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 z%0D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 literal 0 HcmV?d00001 diff --git a/widgets/src/button.cpp b/widgets/src/button.cpp index d54d31e..6ef9ea8 100644 --- a/widgets/src/button.cpp +++ b/widgets/src/button.cpp @@ -28,22 +28,31 @@ void c_button::on_kill_focus() on_paint(); } -void c_button::on_touch_down(int x, int y) +bool c_button::on_touch(int x, int y, TOUCH_ACTION action) { - get_parent()->set_focus(this); - m_status = STATUS_PUSHED; - on_paint(); -} - -void c_button::on_touch_up(int x, int y) -{ - if (STATUS_PUSHED == m_status) + if (action == TOUCH_DOWN) + { + m_parent->set_child_focus(this); + m_status = STATUS_PUSHED; + on_paint(); + } + else { m_status = STATUS_FOCUSED; on_paint(); + notify_parent(GL_BN_CLICKED, get_id(), 0); + } + return false;// Do not handle TOUCH_ACTION by other wnd. +} +bool c_button::on_key(KEY_TYPE key) +{ + if (key == KEY_ENTER) + { notify_parent(GL_BN_CLICKED, get_id(), 0); + return false;// Do not handle KEY_ENTER by other wnd. } + return true;// Handle KEY_FOWARD/KEY_BACKWARD by parent wnd. } void c_button::on_paint() diff --git a/widgets/src/dialog.cpp b/widgets/src/dialog.cpp index df4b206..416a3b1 100644 --- a/widgets/src/dialog.cpp +++ b/widgets/src/dialog.cpp @@ -100,7 +100,7 @@ int c_dialog::close_dialog(c_surface* surface) return -1; } -void c_dialog::on_touch_down(int x, int y) +bool c_dialog::on_touch(int x, int y, TOUCH_ACTION action) { c_wnd *child = m_top_child; c_rect rect; @@ -114,34 +114,13 @@ void c_dialog::on_touch_down(int x, int y) { x -= rect.m_left; y -= rect.m_top; - child->on_touch_down(x, y); - return; + child->on_touch(x, y, action); + return true; } child = child->m_next_sibling; } } - c_wnd::on_touch_down(x, y); -} - -void c_dialog::on_touch_up(int x, int y) -{ - c_wnd *child = m_top_child; - c_rect rect; - get_wnd_rect(rect); - if ( NULL != child ) - { - while ( child ) - { - if (child->m_z_order > m_z_order) - { - x -= rect.m_left; - y -= rect.m_top; - return child->on_touch_up(x, y); - } - child = child->m_next_sibling; - } - } - c_wnd::on_touch_up(x, y); + return c_wnd::on_touch(x, y, action); } int c_dialog::set_me_the_dialog() diff --git a/widgets/src/edit.cpp b/widgets/src/edit.cpp index 1fb3047..61d2795 100644 --- a/widgets/src/edit.cpp +++ b/widgets/src/edit.cpp @@ -40,6 +40,12 @@ void c_edit::set_text(const char* str) } } +bool c_edit::on_touch(int x, int y, TOUCH_ACTION action) +{ + (action == TOUCH_DOWN) ? on_touch_down(x, y) : on_touch_up(x, y); + return true; +} + void c_edit::on_touch_down(int x, int y) { c_rect kb_rect_relate_2_edit_parent; @@ -53,12 +59,12 @@ void c_edit::on_touch_down(int x, int y) {//click edit box if (STATUS_NORMAL == m_status) { - get_parent()->set_focus(this); + m_parent->set_child_focus(this); } } else if (kb_rect_relate_2_edit_parent.PtInRect(x,y)) {//click key board - c_wnd::on_touch_down(x, y); + c_wnd::on_touch(x, y, TOUCH_DOWN); } else { @@ -86,7 +92,7 @@ void c_edit::on_touch_up(int x, int y) } else { - c_wnd::on_touch_up(x, y); + c_wnd::on_touch(x, y, TOUCH_UP); } } } diff --git a/widgets/src/gesture.cpp b/widgets/src/gesture.cpp index edd1070..96ad2c4 100644 --- a/widgets/src/gesture.cpp +++ b/widgets/src/gesture.cpp @@ -243,10 +243,10 @@ void c_gesture::handle_hid_msg(MSG_INFO &msg) switch(msg.dwMsgId) { case 0x4700://MOUSE_LBUTTONDOWN - m_root->on_touch_down(msg.dwParam1, msg.dwParam2); + m_root->on_touch(msg.dwParam1, msg.dwParam2, TOUCH_DOWN); break; case 0x4600://MOUSE_LBUTTONUP - m_root->on_touch_up(msg.dwParam1, msg.dwParam2); + m_root->on_touch(msg.dwParam1, msg.dwParam2, TOUCH_UP); break; } } diff --git a/widgets/src/label.cpp b/widgets/src/label.cpp index af31d65..6d16f7a 100644 --- a/widgets/src/label.cpp +++ b/widgets/src/label.cpp @@ -24,7 +24,7 @@ void c_label::on_paint() if (m_str) { - m_surface->fill_rect(rect.m_left, rect.m_top, rect.m_right, rect.m_bottom, get_parent()->get_bg_color(), m_z_order); + m_surface->fill_rect(rect.m_left, rect.m_top, rect.m_right, rect.m_bottom, m_parent->get_bg_color(), m_z_order); c_word::draw_string_in_rect(m_surface, m_z_order, m_str, rect, m_font_type, m_font_color, GL_ARGB(0, 0, 0, 0), m_style); } } diff --git a/widgets/src/list_box.cpp b/widgets/src/list_box.cpp index b679138..008d202 100644 --- a/widgets/src/list_box.cpp +++ b/widgets/src/list_box.cpp @@ -88,18 +88,24 @@ void c_list_box::on_paint() } } +bool c_list_box::on_touch(int x, int y, TOUCH_ACTION action) +{ + (action == TOUCH_DOWN) ? on_touch_down(x, y) : on_touch_up(x, y); + return true; +} + void c_list_box::on_touch_down(int x, int y) { if (m_wnd_rect.PtInRect(x, y) ) {//click base if (STATUS_NORMAL == m_status) { - get_parent()->set_focus(this); + m_parent->set_child_focus(this); } } else if (m_list_wnd_rect.PtInRect(x, y)) {//click extend list - c_wnd::on_touch_down(x, y); + c_wnd::on_touch(x, y, TOUCH_DOWN); } else { @@ -136,7 +142,7 @@ void c_list_box::on_touch_up(int x, int y) } else { - c_wnd::on_touch_up(x, y); + c_wnd::on_touch(x, y, TOUCH_UP); } } } diff --git a/widgets/src/slide_group.cpp b/widgets/src/slide_group.cpp index a09596f..399f327 100644 --- a/widgets/src/slide_group.cpp +++ b/widgets/src/slide_group.cpp @@ -151,5 +151,4 @@ void c_slide_group::disabel_all_slide() m_slides[i]->get_surface()->set_active(false); } } - m_active_child = NULL; } diff --git a/widgets/src/spinbox.cpp b/widgets/src/spinbox.cpp index 7553631..d237b04 100644 --- a/widgets/src/spinbox.cpp +++ b/widgets/src/spinbox.cpp @@ -44,6 +44,12 @@ void c_spin_box::pre_create_wnd() m_bt_down_rect.m_bottom = m_bt_down_rect.m_top + ARROW_BT_HEIGHT; } +bool c_spin_box::on_touch(int x, int y, TOUCH_ACTION action) +{ + (action == TOUCH_DOWN) ? on_touch_down(x, y) : on_touch_up(x, y); + return true; +} + void c_spin_box::on_touch_down(int x, int y) { c_rect arrow_rect = m_wnd_rect; @@ -54,12 +60,12 @@ void c_spin_box::on_touch_down(int x, int y) {//click spin box if (STATUS_NORMAL == m_status) { - get_parent()->set_focus(this); + m_parent->set_child_focus(this); } } else if (TRUE == arrow_rect.PtInRect(x, y)) {//click arrow button - c_wnd::on_touch_down(x, y); + c_wnd::on_touch(x, y, TOUCH_DOWN); } else {//click invalid place. @@ -98,7 +104,7 @@ void c_spin_box::on_touch_up(int x, int y) } else {//click arrow button. - c_wnd::on_touch_up(x, y); + c_wnd::on_touch(x, y, TOUCH_UP); } } } diff --git a/widgets/widgets_include/button.h b/widgets/widgets_include/button.h index b9a4c39..b1a511a 100644 --- a/widgets/widgets_include/button.h +++ b/widgets/widgets_include/button.h @@ -20,10 +20,11 @@ protected: virtual void on_paint(); virtual void on_focus(); virtual void on_kill_focus(); - virtual void on_touch_down(int x, int y); - virtual void on_touch_up(int x, int y); virtual void pre_create_wnd(); + virtual bool on_touch(int x, int y, TOUCH_ACTION action); + virtual bool on_key(KEY_TYPE key); + const BITMAP_INFO* m_bitmap_normal; const BITMAP_INFO* m_bitmap_focus; const BITMAP_INFO* m_bitmap_pushed; diff --git a/widgets/widgets_include/dialog.h b/widgets/widgets_include/dialog.h index 9753ba8..c3d99de 100644 --- a/widgets/widgets_include/dialog.h +++ b/widgets/widgets_include/dialog.h @@ -16,8 +16,7 @@ public: static int open_dialog(c_dialog* p_dlg); static int close_dialog(c_surface* surface); static c_dialog* get_the_dialog(c_surface* surface); - virtual void on_touch_down(int x, int y); - virtual void on_touch_up(int x, int y); + virtual bool on_touch(int x, int y, TOUCH_ACTION action); protected: virtual const char* get_class_name(void) const {return "c_dialog";} virtual void pre_create_wnd(); diff --git a/widgets/widgets_include/edit.h b/widgets/widgets_include/edit.h index 91904a7..d32a116 100644 --- a/widgets/widgets_include/edit.h +++ b/widgets/widgets_include/edit.h @@ -19,13 +19,14 @@ protected: virtual void on_paint(); virtual void on_focus(); virtual void on_kill_focus(); - virtual void on_touch_down(int x, int y); - virtual void on_touch_up(int x, int y); + virtual bool on_touch(int x, int y, TOUCH_ACTION action); void on_key_board_click(unsigned int ctrl_id, long param); GL_DECLARE_MESSAGE_MAP() private: void show_keyboard(); + void on_touch_down(int x, int y); + void on_touch_up(int x, int y); char m_str_input[MAX_EDIT_STRLEN]; char m_str[MAX_EDIT_STRLEN]; diff --git a/widgets/widgets_include/list_box.h b/widgets/widgets_include/list_box.h index eb4bccc..d225d00 100644 --- a/widgets/widgets_include/list_box.h +++ b/widgets/widgets_include/list_box.h @@ -30,12 +30,13 @@ protected: virtual void on_paint(); virtual void on_focus(); virtual void on_kill_focus(); - virtual void on_touch_down(int x, int y); - virtual void on_touch_up(int x, int y); + virtual bool on_touch(int x, int y, TOUCH_ACTION action); private: void update_list_size(); void show_list(); + void on_touch_down(int x, int y); + void on_touch_up(int x, int y); short m_selected_item; short m_item_total; diff --git a/widgets/widgets_include/spinbox.h b/widgets/widgets_include/spinbox.h index 176a9e8..edc6af7 100644 --- a/widgets/widgets_include/spinbox.h +++ b/widgets/widgets_include/spinbox.h @@ -1,9 +1,9 @@ #ifndef SPIN_BOX_H #define SPIN_BOX_H -#define GL_SPIN_SELECT 0x2222 +#define GL_SPIN_SELECT 0x2222 #define GL_SPIN_CONFIRM 0x3333 -#define GL_SPIN_ROTATION 0x4444 +#define GL_SPIN_ROTATION 0x4444 #define ON_SPIN_SELECT(ctrlId, func) \ {MSG_TYPE_WND, GL_SPIN_SELECT, (c_cmd_target*)ctrlId, MSG_CALLBACK_VWV, (MsgFuncVV)(static_cast(&func))}, @@ -35,12 +35,9 @@ protected: virtual void on_paint(); virtual void on_focus(); virtual void on_kill_focus(); - - virtual void on_touch_down(int x, int y); - virtual void on_touch_up(int x, int y); virtual void pre_create_wnd(); + virtual bool on_touch(int x, int y, TOUCH_ACTION action); -protected: void on_arrow_up_bt_click(unsigned int ctr_id); void on_arrow_down_bt_click(unsigned int ctr_id); @@ -49,6 +46,8 @@ protected: private: void show_arrow_button(); void hide_arrow_button(); + void on_touch_down(int x, int y); + void on_touch_up(int x, int y); protected: short m_cur_value; -- Gitee