From db0646020812efc16ff0beebe35f9049dcc2bfed Mon Sep 17 00:00:00 2001 From: "chaos.proton@gmail.com" Date: Wed, 18 Apr 2012 15:06:12 +0000 Subject: merge new RTGUI in to trunk The full log is at https://github.com/RTGUI/RTGUI/commits/merge_1 and it's difficult to merge the new tree commit by commit. I also converted all the file into unix eol so there are many fake diff. Big changes are noted in rtgui/doc/road_map.txt and rtgui/doc/attention.txt. Keep an eye on them if you want to migrate your old code. Note that the work is still in progress and the bsp is not prepared in trunk so far. git-svn-id: https://rt-thread.googlecode.com/svn/trunk@2092 bbd45198-f89e-11dd-88c7-29a3b14d5316 --- examples/gui/SConscript | 86 ++-- examples/gui/demo_application.c | 147 +++++++ examples/gui/demo_fnview.c | 180 ++++---- examples/gui/demo_listview.c | 222 +++++----- examples/gui/demo_listview_icon.c | 704 +++++++++++++++--------------- examples/gui/demo_panel.c | 54 +-- examples/gui/demo_panel_single.c | 38 +- examples/gui/demo_simple_workbench.c | 120 ++--- examples/gui/demo_view.c | 322 +++++++------- examples/gui/demo_view.h | 78 ++-- examples/gui/demo_view_animation.c | 245 ++++++----- examples/gui/demo_view_benchmark.c | 222 +++++----- examples/gui/demo_view_box.c | 30 +- examples/gui/demo_view_buffer_animation.c | 268 ++++++------ examples/gui/demo_view_button.c | 164 ++++--- examples/gui/demo_view_checkbox.c | 164 ++++--- examples/gui/demo_view_combobox.c | 80 ++-- examples/gui/demo_view_dc.c | 382 ++++++++-------- examples/gui/demo_view_dc_buffer.c | 167 +++---- examples/gui/demo_view_image.c | 257 ++++++----- examples/gui/demo_view_instrument_panel.c | 29 +- examples/gui/demo_view_label.c | 208 ++++----- examples/gui/demo_view_listbox.c | 382 ++++++++-------- examples/gui/demo_view_listctrl.c | 507 ++++++++++----------- examples/gui/demo_view_menu.c | 142 +++--- examples/gui/demo_view_module.c | 154 +++---- examples/gui/demo_view_mywidget.c | 84 ++-- examples/gui/demo_view_notebook.c | 106 ++--- examples/gui/demo_view_progressbar.c | 135 +++--- examples/gui/demo_view_radiobox.c | 138 +++--- examples/gui/demo_view_scrollbar.c | 86 ++-- examples/gui/demo_view_slider.c | 84 ++-- examples/gui/demo_view_textbox.c | 205 +++++---- examples/gui/demo_view_ttf.c | 194 ++++---- examples/gui/demo_view_window.c | 576 ++++++++++++------------ examples/gui/demo_workbench.c | 139 ------ examples/gui/demo_xml.c | 52 +-- examples/gui/gui_init.c | 38 +- examples/gui/mywidget.c | 272 ++++++------ examples/gui/mywidget.h | 92 ++-- examples/gui/play.hdh | 214 ++++----- examples/gui/stop.hdh | 214 ++++----- 42 files changed, 4015 insertions(+), 3966 deletions(-) create mode 100644 examples/gui/demo_application.c delete mode 100644 examples/gui/demo_workbench.c (limited to 'examples/gui') diff --git a/examples/gui/SConscript b/examples/gui/SConscript index 55ad49d8a6..73d0f6731f 100644 --- a/examples/gui/SConscript +++ b/examples/gui/SConscript @@ -1,40 +1,46 @@ -from building import * - -src = Split(""" -demo_view_dc_buffer.c -demo_view_instrument_panel.c -demo_fnview.c -demo_listview.c -demo_listview_icon.c -demo_panel_single.c -demo_view.c -demo_view_animation.c -demo_view_buffer_animation.c -demo_view_box.c -demo_view_button.c -demo_view_checkbox.c -demo_view_dc.c -demo_view_image.c -demo_view_module.c -demo_view_label.c -demo_view_mywidget.c -demo_view_progressbar.c -demo_view_radiobox.c -demo_view_listbox.c -demo_view_slider.c -demo_view_notebook.c -demo_view_combobox.c -demo_view_listctrl.c -demo_view_menu.c -demo_view_scrollbar.c -demo_view_textbox.c -demo_view_window.c -demo_view_benchmark.c -demo_workbench.c -gui_init.c -mywidget.c -""") - -group = DefineGroup('gui_examples', src, depend = ['RT_USING_RTGUI']) - -Return('group') +from building import * + +''' +demo_view_dc_buffer.c +demo_fnview.c +demo_listview.c +demo_listview_icon.c +demo_panel_single.c +demo_view_box.c +demo_view_image.c +demo_view_module.c +''' + +src = Split(""" +demo_application.c +demo_view.c +demo_view_benchmark.c +demo_view_dc.c +demo_view_ttf.c +demo_view_dc_buffer.c +demo_view_animation.c +demo_view_buffer_animation.c +demo_view_instrument_panel.c +demo_view_window.c +demo_view_label.c +demo_view_button.c +demo_view_checkbox.c +demo_view_progressbar.c +demo_view_scrollbar.c +demo_view_radiobox.c +demo_view_textbox.c +demo_view_listbox.c +demo_view_menu.c +demo_view_listctrl.c +demo_view_combobox.c +demo_view_slider.c +demo_view_notebook.c +demo_view_mywidget.c +mywidget.c +""") + + + +group = DefineGroup('gui_examples', src, depend = ['RT_USING_RTGUI']) + +Return('group') diff --git a/examples/gui/demo_application.c b/examples/gui/demo_application.c new file mode 100644 index 0000000000..00ffce982a --- /dev/null +++ b/examples/gui/demo_application.c @@ -0,0 +1,147 @@ +#include +#include +#include + +#include +#include + +struct rtgui_notebook *the_notebook; + +static rt_bool_t demo_handle_key(struct rtgui_object* object, struct rtgui_event* event) +{ + struct rtgui_event_kbd* ekbd = (struct rtgui_event_kbd*)event; + + if (ekbd->type == RTGUI_KEYDOWN) + { + if (ekbd->key == RTGUIK_RIGHT) + { + demo_view_next(RT_NULL, RT_NULL); + return RT_TRUE; + } + else if (ekbd->key == RTGUIK_LEFT) + { + demo_view_prev(RT_NULL, RT_NULL); + return RT_TRUE; + } + } + return RT_TRUE; +} + +struct rtgui_win *main_win; +static void application_entry(void* parameter) +{ + struct rtgui_application *app; + struct rtgui_rect rect; + + app = rtgui_application_create(rt_thread_self(), "gui_demo"); + if (app == RT_NULL) + return; + + /* create a full screen window */ + rtgui_graphic_driver_get_rect(rtgui_graphic_driver_get_default(), &rect); + + main_win = rtgui_win_create(RT_NULL, "demo_win", &rect, + /*RTGUI_WIN_STYLE_DESKTOP_DEFAULT);*/ + RTGUI_WIN_STYLE_NO_BORDER | RTGUI_WIN_STYLE_NO_TITLE); + if (main_win == RT_NULL) + { + rtgui_application_destroy(app); + return; + } + + rtgui_win_set_onkey(main_win, demo_handle_key); + + /* create a no title notebook that we can switch demo on it easily. */ + the_notebook = rtgui_notebook_create(&rect, RTGUI_NOTEBOOK_NOTAB); + if (the_notebook == RT_NULL) + { + rtgui_win_destroy(main_win); + rtgui_application_destroy(app); + return; + } + + rtgui_container_add_child(RTGUI_CONTAINER(main_win), RTGUI_WIDGET(the_notebook)); + + /* 初始化各个例子的视图 */ + demo_view_benchmark(); + + demo_view_dc(); +#ifdef RTGUI_USING_TTF + demo_view_ttf(); +#endif + +#ifndef RTGUI_USING_SMALL_SIZE + demo_view_dc_buffer(); +#endif + demo_view_animation(); +#ifndef RTGUI_USING_SMALL_SIZE + demo_view_buffer_animation(); + demo_view_instrument_panel(); +#endif + demo_view_window(); + demo_view_label(); + demo_view_button(); + demo_view_checkbox(); + demo_view_progressbar(); + demo_view_scrollbar(); + demo_view_radiobox(); + demo_view_textbox(); + demo_view_listbox(); + demo_view_menu(); + demo_view_listctrl(); + demo_view_combobox(); + demo_view_slider(); + demo_view_notebook(); + demo_view_mywidget(); +#if 0 +#if defined(RTGUI_USING_DFS_FILERW) || defined(RTGUI_USING_STDIO_FILERW) + demo_view_image(); +#endif +#ifdef RT_USING_MODULE +#if defined(RTGUI_USING_DFS_FILERW) || defined(RTGUI_USING_STDIO_FILERW) + demo_view_module(); +#endif +#endif + demo_listview_view(); + demo_listview_icon_view(); +#if defined(RTGUI_USING_DFS_FILERW) || defined(RTGUI_USING_STDIO_FILERW) + demo_fn_view(); +#endif +#endif + + rtgui_win_show(main_win, RT_FALSE); + + /* 执行工作台事件循环 */ + rtgui_application_run(app); + + rtgui_application_destroy(app); +} + +void application_init() +{ + static rt_bool_t inited = RT_FALSE; + + if (inited == RT_FALSE) /* 避免重复初始化而做的保护 */ + { + rt_thread_t tid; + + tid = rt_thread_create("wb", + application_entry, RT_NULL, + 2048 * 2, 25, 10); + + if (tid != RT_NULL) + rt_thread_startup(tid); + + inited = RT_TRUE; + } +} + +#ifdef RT_USING_FINSH +#include +void application() +{ + application_init(); +} +/* finsh的命令输出,可以直接执行application()函数以执行上面的函数 */ +FINSH_FUNCTION_EXPORT(application, application demo) +#endif diff --git a/examples/gui/demo_fnview.c b/examples/gui/demo_fnview.c index d20fc99ee4..f7148659c0 100644 --- a/examples/gui/demo_fnview.c +++ b/examples/gui/demo_fnview.c @@ -1,90 +1,90 @@ -/* - * 程序清单:文件列表视图演示 - * - * 这个例子会先创建出一个演示用的view,当点击上面的按钮时会按照模式显示的形式显示 - * 新的文件列表视图。 - */ -#include "demo_view.h" -#include -#include -#include - -#if defined(RTGUI_USING_DFS_FILERW) || defined(RTGUI_USING_STDIO_FILERW) -/* 用于显示选择文件名的文本标签 */ -static rtgui_label_t* label; -/* 触发文件列表视图的按钮回调函数 */ -static void open_btn_onbutton(rtgui_widget_t* widget, struct rtgui_event* event) -{ - rtgui_filelist_view_t *view; - rtgui_workbench_t *workbench; - rtgui_rect_t rect; - - /* 获得顶层的workbench对象 */ - workbench = RTGUI_WORKBENCH(rtgui_widget_get_toplevel(widget)); - rtgui_widget_get_rect(RTGUI_WIDGET(workbench), &rect); - - /* 针对Win32平台和其他平台做的不同的其实目录位置 */ -#ifdef _WIN32 - view = rtgui_filelist_view_create(workbench, "d:\\", "*.*", &rect); -#else - view = rtgui_filelist_view_create(workbench, "/", "*.*", &rect); -#endif - - /* 采用模式形式显示文件列表视图 */ - if (rtgui_view_show(RTGUI_VIEW(view), RT_TRUE) == RTGUI_MODAL_OK) - { - char path[32]; - - /* 在文件列表视图中成功选择文件,这里获得相应的路径名 */ - rtgui_filelist_view_get_fullpath(view, path, sizeof(path)); - - /* 设置文件路径到文本标签 */ - rtgui_label_set_text(label, path); - } - - /* 删除 文件列表 视图 */ - rtgui_view_destroy(RTGUI_VIEW(view)); -} - -/* 创建用于演示文件列表视图的视图 */ -rtgui_view_t* demo_fn_view(rtgui_workbench_t* workbench) -{ - rtgui_rect_t rect; - rtgui_view_t* view; - rtgui_button_t* open_btn; - rtgui_font_t* font; - - /* 默认采用12字体的显示 */ - font = rtgui_font_refer("asc", 12); - - /* 创建演示用的视图 */ - view = demo_view(workbench, "FileList View"); - /* 获得演示视图的位置信息 */ - demo_view_get_rect(view, &rect); - - rect.x1 += 5; - rect.x2 -= 5; - rect.y1 += 5; - rect.y2 = rect.y1 + 20; - /* 创建显示文件路径用的文本标签 */ - label = rtgui_label_create("fn: "); - rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(label)); - rtgui_widget_set_rect(RTGUI_WIDGET(label), &rect); - RTGUI_WIDGET_FONT(RTGUI_WIDGET(label)) = font; - - /* 获得演示视图的位置信息 */ - demo_view_get_rect(view, &rect); - rect.x1 += 5; - rect.x2 = rect.x1 + 80; - rect.y1 += 30; - rect.y2 = rect.y1 + 20; - /* 创建按钮以触发一个新的文件列表视图 */ - open_btn = rtgui_button_create("Open File"); - rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(open_btn)); - rtgui_widget_set_rect(RTGUI_WIDGET(open_btn), &rect); - RTGUI_WIDGET_FONT(RTGUI_WIDGET(open_btn)) = font; - rtgui_button_set_onbutton(open_btn, open_btn_onbutton); - - return view; -} -#endif +/* + * 程序清单:文件列表视图演示 + * + * 这个例子会先创建出一个演示用的view,当点击上面的按钮时会按照模式显示的形式显示 + * 新的文件列表视图。 + */ +#include "demo_view.h" +#include +#include +#include + +#if defined(RTGUI_USING_DFS_FILERW) || defined(RTGUI_USING_STDIO_FILERW) +/* 用于显示选择文件名的文本标签 */ +static rtgui_label_t* label; +/* 触发文件列表视图的按钮回调函数 */ +static void open_btn_onbutton(rtgui_widget_t* widget, struct rtgui_event* event) +{ + rtgui_filelist_view_t *view; + rtgui_workbench_t *workbench; + rtgui_rect_t rect; + + /* 获得顶层的workbench对象 */ + workbench = RTGUI_APPLICATION(rtgui_widget_get_toplevel(widget)); + rtgui_widget_get_rect(RTGUI_WIDGET(workbench), &rect); + + /* 针对Win32平台和其他平台做的不同的其实目录位置 */ +#ifdef _WIN32 + view = rtgui_filelist_view_create(workbench, "d:\\", "*.*", &rect); +#else + view = rtgui_filelist_view_create(workbench, "/", "*.*", &rect); +#endif + + /* 采用模式形式显示文件列表视图 */ + if (rtgui_container_show(RTGUI_CONTAINER(view), RT_TRUE) == RTGUI_MODAL_OK) + { + char path[32]; + + /* 在文件列表视图中成功选择文件,这里获得相应的路径名 */ + rtgui_filelist_view_get_fullpath(view, path, sizeof(path)); + + /* 设置文件路径到文本标签 */ + rtgui_label_set_text(label, path); + } + + /* 删除 文件列表 视图 */ + rtgui_container_destroy(RTGUI_CONTAINER(view)); +} + +/* 创建用于演示文件列表视图的视图 */ +rtgui_container_t* demo_fn_view(rtgui_workbench_t* workbench) +{ + rtgui_rect_t rect; + rtgui_container_t* view; + rtgui_button_t* open_btn; + rtgui_font_t* font; + + /* 默认采用12字体的显示 */ + font = rtgui_font_refer("asc", 12); + + /* 创建演示用的视图 */ + view = demo_view(workbench, "FileList View"); + /* 获得演示视图的位置信息 */ + demo_view_get_rect(view, &rect); + + rect.x1 += 5; + rect.x2 -= 5; + rect.y1 += 5; + rect.y2 = rect.y1 + 20; + /* 创建显示文件路径用的文本标签 */ + label = rtgui_label_create("fn: "); + rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(label)); + rtgui_widget_set_rect(RTGUI_WIDGET(label), &rect); + RTGUI_WIDGET_FONT(RTGUI_WIDGET(label)) = font; + + /* 获得演示视图的位置信息 */ + demo_view_get_rect(view, &rect); + rect.x1 += 5; + rect.x2 = rect.x1 + 80; + rect.y1 += 30; + rect.y2 = rect.y1 + 20; + /* 创建按钮以触发一个新的文件列表视图 */ + open_btn = rtgui_button_create("Open File"); + rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(open_btn)); + rtgui_widget_set_rect(RTGUI_WIDGET(open_btn), &rect); + RTGUI_WIDGET_FONT(RTGUI_WIDGET(open_btn)) = font; + rtgui_button_set_onbutton(open_btn, open_btn_onbutton); + + return view; +} +#endif diff --git a/examples/gui/demo_listview.c b/examples/gui/demo_listview.c index 07f2814815..d1c00b1edb 100644 --- a/examples/gui/demo_listview.c +++ b/examples/gui/demo_listview.c @@ -1,115 +1,107 @@ -/* - * 程序清单:列表视图演示 - * - * 这个例子会先创建出一个演示用的view,当点击上面的按钮时会按照模式显示的形式显示 - * 新的列表视图 - */ -#include "demo_view.h" -#include -#include -#include -#include - -static rtgui_workbench_t* workbench = RT_NULL; -static rtgui_list_view_t* _view = RT_NULL; -// static rtgui_image_t* return_image = RT_NULL; - -/* 列表项的动作函数 */ -#if RTTHREAD_VERSION >= 10000 -static void listitem_action(rtgui_widget_t *widget, void* parameter) -#else -static void listitem_action(void* parameter) -#endif -{ - char label_text[32]; - rtgui_win_t *win; - rtgui_label_t *label; - rtgui_rect_t rect = {0, 0, 150, 80}; - int no = (int)parameter; - - rtgui_rect_moveto(&rect, 20, 50); - - /* 显示消息窗口 */ - win = rtgui_win_create(RTGUI_TOPLEVEL(workbench), - "窗口", &rect, RTGUI_WIN_STYLE_DEFAULT); - - rect.x1 += 20; - rect.x2 -= 5; - rect.y1 += 5; - rect.y2 = rect.y1 + 20; - - /* 添加相应的标签 */ - rt_sprintf(label_text, "动作 %d", no); - label = rtgui_label_create(label_text); - - rtgui_widget_set_rect(RTGUI_WIDGET(label), &rect); - rtgui_container_add_child(RTGUI_CONTAINER(win), RTGUI_WIDGET(label)); - - /* 非模态显示窗口 */ - rtgui_win_show(win, RT_FALSE); -} - -/* 返回功能的动作函数 */ -#if RTTHREAD_VERSION >= 10000 -static void return_action(rtgui_widget_t* widget, void* parameter) -#else -static void return_action(void* parameter) -#endif -{ - rtgui_view_end_modal(RTGUI_VIEW(_view), RTGUI_MODAL_OK); -} - -/* 各个列表项定义 */ -static struct rtgui_list_item items[] = -{ - {"列表项1", RT_NULL, listitem_action, (void*)1}, - {"列表项2", RT_NULL, listitem_action, (void*)2}, - {"列表项3", RT_NULL, listitem_action, (void*)3}, - {"列表项4", RT_NULL, listitem_action, (void*)4}, - {"列表项5", RT_NULL, listitem_action, (void*)5}, - {"返回", RT_NULL, return_action, RT_NULL}, -}; - -/* 打开列表视图用的按钮触发函数 */ -static void open_btn_onbutton(rtgui_widget_t* widget, struct rtgui_event* event) -{ - rtgui_rect_t rect; - - /* 获得顶层的workbench */ - workbench = RTGUI_WORKBENCH(rtgui_widget_get_toplevel(widget)); - rtgui_widget_get_rect(RTGUI_WIDGET(workbench), &rect); - - /* 创建一个列表视图, 项指定为items */ - _view = rtgui_list_view_create(items, sizeof(items)/sizeof(struct rtgui_list_item), - &rect, RTGUI_LIST_VIEW_LIST); - /* 在workbench中添加相应的视图 */ - rtgui_workbench_add_view(workbench, RTGUI_VIEW(_view)); - - /* 模式显示视图 */ - rtgui_view_show(RTGUI_VIEW(_view), RT_TRUE); - rtgui_view_destroy(RTGUI_VIEW(_view)); - _view = RT_NULL; -} - -/* 创建用于演示列表视图的视图 */ -rtgui_view_t* demo_listview_view(rtgui_workbench_t* workbench) -{ - rtgui_rect_t rect; - rtgui_view_t *view; - rtgui_button_t* open_btn; - - view = demo_view(workbench, "列表视图演示"); - - /* 添加动作按钮 */ - demo_view_get_rect(view, &rect); - rect.x1 += 5; - rect.x2 = rect.x1 + 80; - rect.y1 += 30; - rect.y2 = rect.y1 + 20; - open_btn = rtgui_button_create("打开列表"); - rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(open_btn)); - rtgui_widget_set_rect(RTGUI_WIDGET(open_btn), &rect); - rtgui_button_set_onbutton(open_btn, open_btn_onbutton); - - return view; -} +/* + * 程序清单:列表视图演示 + * + * 这个例子会先创建出一个演示用的container,当点击上面的按钮时会按照模式显示的形式显示 + * 新的列表视图 + */ +#include "demo_view.h" +#include +#include +#include +#include + +static struct rtgui_application *application = RT_NULL; +static rtgui_list_view_t* _view = RT_NULL; +// static rtgui_image_t* return_image = RT_NULL; + +/* 列表项的动作函数 */ +static void listitem_action(rtgui_widget_t *widget, void* parameter) +{ + char label_text[32]; + rtgui_win_t *win; + rtgui_label_t *label; + rtgui_rect_t rect = {0, 0, 150, 80}; + int no = (int)parameter; + + rtgui_rect_moveto(&rect, 20, 50); + + /* 显示消息窗口 */ + win = rtgui_win_create(RTGUI_TOPLEVEL(application), + "窗口", &rect, RTGUI_WIN_STYLE_DEFAULT); + + rect.x1 += 20; + rect.x2 -= 5; + rect.y1 += 5; + rect.y2 = rect.y1 + 20; + + /* 添加相应的标签 */ + rt_sprintf(label_text, "动作 %d", no); + label = rtgui_label_create(label_text); + + rtgui_widget_set_rect(RTGUI_WIDGET(label), &rect); + rtgui_container_add_child(win, RTGUI_WIDGET(label)); + + /* 非模态显示窗口 */ + rtgui_win_show(win, RT_FALSE); +} + +/* 返回功能的动作函数 */ +static void return_action(rtgui_widget_t* widget, void* parameter) +{ + rtgui_container_end_modal(RTGUI_CONTAINER(_view), RTGUI_MODAL_OK); +} + +/* 各个列表项定义 */ +static struct rtgui_list_item items[] = +{ + {"列表项1", RT_NULL, listitem_action, (void*)1}, + {"列表项2", RT_NULL, listitem_action, (void*)2}, + {"列表项3", RT_NULL, listitem_action, (void*)3}, + {"列表项4", RT_NULL, listitem_action, (void*)4}, + {"列表项5", RT_NULL, listitem_action, (void*)5}, + {"返回", RT_NULL, return_action, RT_NULL}, +}; + +/* 打开列表视图用的按钮触发函数 */ +static void open_btn_onbutton(rtgui_widget_t* widget, struct rtgui_event* event) +{ + rtgui_rect_t rect; + + /* 获得顶层的application */ + application = RTGUI_APPLICATION(rtgui_widget_get_toplevel(widget)); + rtgui_widget_get_rect(RTGUI_WIDGET(application), &rect); + + /* 创建一个列表视图, 项指定为items */ + _view = rtgui_list_view_create(items, sizeof(items)/sizeof(struct rtgui_list_item), + &rect, RTGUI_LIST_VIEW_LIST); + + rtgui_application_add_container(application, RTGUI_CONTAINER(_view)); + + /* 模式显示视图 */ + rtgui_container_show(RTGUI_CONTAINER(_view), RT_TRUE); + rtgui_container_destroy(RTGUI_CONTAINER(_view)); + _view = RT_NULL; +} + +/* 创建用于演示列表视图的视图 */ +rtgui_container_t* demo_listview_view(void) +{ + rtgui_rect_t rect; + rtgui_container_t *container; + rtgui_button_t* open_btn; + + container = demo_view("列表视图演示"); + + /* 添加动作按钮 */ + demo_view_get_rect(container, &rect); + rect.x1 += 5; + rect.x2 = rect.x1 + 80; + rect.y1 += 30; + rect.y2 = rect.y1 + 20; + open_btn = rtgui_button_create("打开列表"); + rtgui_container_add_child(container, RTGUI_WIDGET(open_btn)); + rtgui_widget_set_rect(RTGUI_WIDGET(open_btn), &rect); + rtgui_button_set_onbutton(open_btn, open_btn_onbutton); + + return container; +} diff --git a/examples/gui/demo_listview_icon.c b/examples/gui/demo_listview_icon.c index f95640401b..a5f6e20b4b 100644 --- a/examples/gui/demo_listview_icon.c +++ b/examples/gui/demo_listview_icon.c @@ -1,354 +1,350 @@ -/* - * 程序清单:列表视图演示 - * - * 这个例子会先创建出一个演示用的view,当点击上面的按钮时会按照模式显示的形式显示 - * 新的列表视图 - */ -#include "demo_view.h" -#include -#include -#include -#include - -static rtgui_workbench_t* workbench = RT_NULL; -static rtgui_list_view_t* _view = RT_NULL; - -/* 列表项的动作函数 */ -#if RTTHREAD_VERSION >= 10000 -static void listitem_action(rtgui_widget_t* widget, void* parameter) -#else -static void listitem_action(void* parameter) -#endif -{ - char label_text[32]; - rtgui_win_t *win; - rtgui_label_t *label; - rtgui_rect_t rect = {0, 0, 150, 80}; - int no = (int)parameter; - - rtgui_rect_moveto(&rect, 20, 50); - - /* 显示消息窗口 */ - win = rtgui_win_create(RTGUI_TOPLEVEL(workbench), - "窗口", &rect, RTGUI_WIN_STYLE_DEFAULT); - - rect.x1 += 20; - rect.x2 -= 5; - rect.y1 += 5; - rect.y2 = rect.y1 + 20; - - /* 添加相应的标签 */ - rt_sprintf(label_text, "动作 %d", no); - label = rtgui_label_create(label_text); - - rtgui_widget_set_rect(RTGUI_WIDGET(label), &rect); - rtgui_container_add_child(RTGUI_CONTAINER(win), RTGUI_WIDGET(label)); - - /* 非模态显示窗口 */ - rtgui_win_show(win, RT_FALSE); -} - -/* 返回功能的动作函数 */ -#if RTTHREAD_VERSION >= 10000 -static void return_action(rtgui_widget_t* widget, void* parameter) -#else -static void return_action(void* parameter) -#endif -{ - /* 退出模态显示 */ - rtgui_view_end_modal(RTGUI_VIEW(_view), RTGUI_MODAL_OK); -} - -/* 列表项 */ -#define ITEM_MAX 50 -static struct rtgui_list_item *items = RT_NULL; -static rtgui_image_t* item_icon = RT_NULL; -static rtgui_image_t* exit_icon = RT_NULL; - -static const char * image_xpm[] = { - "16 16 106 2", - " c None", - ". c #D0C83F", - "+ c #D0C840", - "@ c #D0C030", - "# c #D0B820", - "$ c #D0B020", - "% c #D0B01F", - "& c #5F571F", - "* c #F0F0C0", - "= c #FFF8D0", - "- c #FFF8C0", - "; c #FFF8B0", - "> c #FFF8A0", - ", c #F0E870", - "' c #707030", - ") c #4F87EF", - "! c #4F78C0", - "~ c #5088E0", - "{ c #5078C0", - "] c #C0D0F0", - "^ c #FFF8E0", - "/ c #FFF090", - "( c #F0E070", - "_ c #6F97D0", - ": c #C0D8FE", - "< c #80A8F0", - "[ c #7088D0", - "} c #B0D0FF", - "| c #90B0F0", - "1 c #1040A0", - "2 c #F0F080", - "3 c #707040", - "4 c #7098F0", - "5 c #3068E0", - "6 c #A0B8F0", - "7 c #4070C0", - "8 c #002880", - "9 c #404040", - "0 c #505050", - "a c #F0F090", - "b c #F0E860", - "c c #F0D860", - "d c #807840", - "e c #2F5FC0", - "f c #1050D0", - "g c #1048B0", - "h c #002870", - "i c #C0C080", - "j c #C0C070", - "k c #F0F070", - "l c #F0E060", - "m c #E0D050", - "n c #00277F", - "o c #00287F", - "p c #1F3F6F", - "q c #1048C0", - "r c #0040B0", - "s c #204080", - "t c #FFF890", - "u c #F0D850", - "v c #E0C840", - "w c #807040", - "x c #A0B06F", - "y c #204880", - "z c #2048A0", - "A c #90A8C0", - "B c #FFF080", - "C c #F0D050", - "D c #C0A830", - "E c #6F682F", - "F c #F0F0A0", - "G c #E0D060", - "H c #B0A040", - "I c #D0B840", - "J c #E0C040", - "K c #D0B030", - "L c #706820", - "M c #5F581F", - "N c #CFBF3F", - "O c #FFF0A0", - "P c #A09830", - "Q c #A08820", - "R c #908030", - "S c #807830", - "T c #707020", - "U c #605820", - "V c #6F672F", - "W c #D0C040", - "X c #F0E880", - "Y c #907820", - "Z c #B09820", - "` c #B09010", - " . c #B08820", - ".. c #806820", - "+. c #5F5F1F", - "@. c #F0E080", - "#. c #B09020", - "$. c #C0B040", - "%. c #A09030", - "&. c #908020", - "*. c #606020", - "=. c #6F5F1F", - "-. c #9F982F", - ";. c #A0872F", - ">. c #6F681F", - ",. c #706020", - " ", - " . + + + @ @ # # $ % & ", - " + * = = = = - ; > , ' ", - " ) ! ~ { ] ^ = - - > / ( ' ", - "_ : < { [ } | 1 - ; > > / 2 ( 3 ", - "{ 4 5 1 6 7 5 8 9 0 a / , b c d ", - "e f g h 8 8 g h i j / k l c m d ", - " n o p q r s t 2 , l c u v w ", - " x y z A B , l u C v D E ", - " @ F > t k G H I J K L M ", - " N @ O / 2 l P Q R S T U V ", - " W m 2 X l I Y Z ` ...+. ", - " W @.l u I R #.Z Y U M ", - " $.G I $.%.R &.Y *.& =. ", - " -.;.>.,.L L ,.& M ", - " "}; - -static const char * exit_xpm[] = { - "16 16 71 1", - " c None", - ". c #CF673F", - "+ c #D0673F", - "@ c #C05F3F", - "# c #BF5F3F", - "$ c #D0674F", - "% c #E07050", - "& c #F07850", - "* c #FF7040", - "= c #F06830", - "- c #E05830", - "; c #D05030", - "> c #B04F2F", - ", c #D06F4F", - "' c #F08060", - ") c #FF9070", - "! c #FF8860", - "~ c #FF8050", - "{ c #FF5820", - "] c #FF4810", - "^ c #D04810", - "/ c #B0482F", - "( c #FF9880", - "_ c #FF6030", - ": c #F04000", - "< c #C04010", - "[ c #A03F2F", - "} c #E06840", - "| c #FF9870", - "1 c #FF7850", - "2 c #FF6840", - "3 c #F04010", - "4 c #E03800", - "5 c #A03820", - "6 c #8F372F", - "7 c #F06840", - "8 c #FF8060", - "9 c #FFFFFF", - "0 c #FFF8F0", - "a c #FFF0F0", - "b c #FFE8E0", - "c c #FFD0C0", - "d c #E04010", - "e c #B03010", - "f c #7F2F1F", - "g c #FFD8D0", - "h c #FFC8C0", - "i c #C03000", - "j c #6F281F", - "k c #F04810", - "l c #FF6830", - "m c #FFE0D0", - "n c #F0C0B0", - "o c #D04010", - "p c #5F1F1F", - "q c #E04820", - "r c #FF4000", - "s c #FF5020", - "t c #FF5010", - "u c #D03800", - "v c #D03000", - "w c #B02800", - "x c #5F170F", - "y c #C05020", - "z c #F03800", - "A c #802010", - "B c #4F0F0F", - "C c #A02800", - "D c #C03810", - "E c #5F0F00", - "F c #A03810", - " ", - " .+@@@# ", - " $%&*=-;> ", - " ,')!~*{]^/ ", - " +&)()~*_]:<[ ", - " .}~!||!12{3456 ", - " +7899990abcdef ", - " @{19990bgchdij ", - " @kl0abmchcnoip ", - " @qr]stt]3duvwx ", - " #yz:::z44uvvAB ", - " >o4444uvvvCB ", - " /DvvvvvvCE ", - " [FeiiwAB ", - " 6fjpxB ", - " "}; - -/* 打开列表视图用的按钮触发函数 */ -static void open_btn_onbutton(rtgui_widget_t* widget, struct rtgui_event* event) -{ - rtgui_rect_t rect; - rt_uint32_t index; - - /* 获得顶层的workbench */ - workbench = RTGUI_WORKBENCH(rtgui_widget_get_toplevel(widget)); - rtgui_widget_get_rect(RTGUI_WIDGET(workbench), &rect); - - /* 初始化图标列表 */ - if (items == RT_NULL) - { - char item_name[32]; - - items = (struct rtgui_list_item *) rtgui_malloc((ITEM_MAX + 1) * sizeof(struct rtgui_list_item)); - for (index = 0; index < ITEM_MAX; index ++) - { - rt_snprintf(item_name, sizeof(item_name), "图标%d", index); - items[index].action = listitem_action; - items[index].image = item_icon; - items[index].name = rt_strdup(item_name); - items[index].parameter = (void*) index; - } - - items[ITEM_MAX].action = return_action; - items[ITEM_MAX].image = exit_icon; - items[ITEM_MAX].name = "退出"; - items[ITEM_MAX].parameter = RT_NULL; - } - - /* 创建一个列表视图, 项指定为items */ - _view = rtgui_list_view_create(items, ITEM_MAX + 1, &rect, RTGUI_LIST_VIEW_ICON); - /* 在workbench中添加相应的视图 */ - rtgui_workbench_add_view(workbench, RTGUI_VIEW(_view)); - - /* 模式显示视图 */ - rtgui_view_show(RTGUI_VIEW(_view), RT_TRUE); - rtgui_view_destroy(RTGUI_VIEW(_view)); - - _view = RT_NULL; -} - -/* 创建用于演示列表视图的视图 */ -rtgui_view_t* demo_listview_icon_view(rtgui_workbench_t* workbench) -{ - rtgui_rect_t rect; - rtgui_view_t *view; - rtgui_button_t* open_btn; - - view = demo_view(workbench, "图标视图演示"); - - if (item_icon == RT_NULL) - item_icon = rtgui_image_create_from_mem("xpm", - (const rt_uint8_t*)image_xpm, sizeof(image_xpm), RT_TRUE); - if (exit_icon == RT_NULL) - exit_icon = rtgui_image_create_from_mem("xpm", - (const rt_uint8_t*)exit_xpm, sizeof(exit_xpm), RT_TRUE); - - /* 添加动作按钮 */ - demo_view_get_rect(view, &rect); - rect.x1 += 5; - rect.x2 = rect.x1 + 80; - rect.y1 += 30; - rect.y2 = rect.y1 + 20; - open_btn = rtgui_button_create("打开图标列表"); - rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(open_btn)); - rtgui_widget_set_rect(RTGUI_WIDGET(open_btn), &rect); - rtgui_button_set_onbutton(open_btn, open_btn_onbutton); - - return view; -} +/* + * 程序清单:列表视图演示 + * + * 这个例子会先创建出一个演示用的view,当点击上面的按钮时会按照模式显示的形式显示 + * 新的列表视图 + */ +#include "demo_view.h" +#include +#include +#include +#include + +static struct rtgui_application *application = RT_NULL; +static rtgui_list_view_t* _view = RT_NULL; + +/* 列表项的动作函数 */ +static void listitem_action(rtgui_widget_t* widget, void* parameter) +{ + char label_text[32]; + rtgui_win_t *win; + rtgui_label_t *label; + rtgui_rect_t rect = {0, 0, 150, 80}; + int no = (int)parameter; + + rtgui_rect_moveto(&rect, 20, 50); + + /* 显示消息窗口 */ + win = rtgui_win_create(RTGUI_TOPLEVEL(application), + "窗口", &rect, RTGUI_WIN_STYLE_DEFAULT); + + rect.x1 += 20; + rect.x2 -= 5; + rect.y1 += 5; + rect.y2 = rect.y1 + 20; + + /* 添加相应的标签 */ + rt_sprintf(label_text, "动作 %d", no); + label = rtgui_label_create(label_text); + + rtgui_widget_set_rect(RTGUI_WIDGET(label), &rect); + rtgui_container_add_child(RTGUI_CONTAINER(win), RTGUI_WIDGET(label)); + + /* 非模态显示窗口 */ + rtgui_win_show(win, RT_FALSE); +} + +/* 返回功能的动作函数 */ +#if RT_VERSION == 4 +static void return_action(rtgui_widget_t* widget, void* parameter) +#else +static void return_action(void* parameter) +#endif +{ + /* 退出模态显示 */ + rtgui_container_end_modal(RTGUI_CONTAINER(_view), RTGUI_MODAL_OK); +} + +/* 列表项 */ +#define ITEM_MAX 50 +static struct rtgui_list_item *items = RT_NULL; +static rtgui_image_t* item_icon = RT_NULL; +static rtgui_image_t* exit_icon = RT_NULL; + +static const char * image_xpm[] = { + "16 16 106 2", + " c None", + ". c #D0C83F", + "+ c #D0C840", + "@ c #D0C030", + "# c #D0B820", + "$ c #D0B020", + "% c #D0B01F", + "& c #5F571F", + "* c #F0F0C0", + "= c #FFF8D0", + "- c #FFF8C0", + "; c #FFF8B0", + "> c #FFF8A0", + ", c #F0E870", + "' c #707030", + ") c #4F87EF", + "! c #4F78C0", + "~ c #5088E0", + "{ c #5078C0", + "] c #C0D0F0", + "^ c #FFF8E0", + "/ c #FFF090", + "( c #F0E070", + "_ c #6F97D0", + ": c #C0D8FE", + "< c #80A8F0", + "[ c #7088D0", + "} c #B0D0FF", + "| c #90B0F0", + "1 c #1040A0", + "2 c #F0F080", + "3 c #707040", + "4 c #7098F0", + "5 c #3068E0", + "6 c #A0B8F0", + "7 c #4070C0", + "8 c #002880", + "9 c #404040", + "0 c #505050", + "a c #F0F090", + "b c #F0E860", + "c c #F0D860", + "d c #807840", + "e c #2F5FC0", + "f c #1050D0", + "g c #1048B0", + "h c #002870", + "i c #C0C080", + "j c #C0C070", + "k c #F0F070", + "l c #F0E060", + "m c #E0D050", + "n c #00277F", + "o c #00287F", + "p c #1F3F6F", + "q c #1048C0", + "r c #0040B0", + "s c #204080", + "t c #FFF890", + "u c #F0D850", + "v c #E0C840", + "w c #807040", + "x c #A0B06F", + "y c #204880", + "z c #2048A0", + "A c #90A8C0", + "B c #FFF080", + "C c #F0D050", + "D c #C0A830", + "E c #6F682F", + "F c #F0F0A0", + "G c #E0D060", + "H c #B0A040", + "I c #D0B840", + "J c #E0C040", + "K c #D0B030", + "L c #706820", + "M c #5F581F", + "N c #CFBF3F", + "O c #FFF0A0", + "P c #A09830", + "Q c #A08820", + "R c #908030", + "S c #807830", + "T c #707020", + "U c #605820", + "V c #6F672F", + "W c #D0C040", + "X c #F0E880", + "Y c #907820", + "Z c #B09820", + "` c #B09010", + " . c #B08820", + ".. c #806820", + "+. c #5F5F1F", + "@. c #F0E080", + "#. c #B09020", + "$. c #C0B040", + "%. c #A09030", + "&. c #908020", + "*. c #606020", + "=. c #6F5F1F", + "-. c #9F982F", + ";. c #A0872F", + ">. c #6F681F", + ",. c #706020", + " ", + " . + + + @ @ # # $ % & ", + " + * = = = = - ; > , ' ", + " ) ! ~ { ] ^ = - - > / ( ' ", + "_ : < { [ } | 1 - ; > > / 2 ( 3 ", + "{ 4 5 1 6 7 5 8 9 0 a / , b c d ", + "e f g h 8 8 g h i j / k l c m d ", + " n o p q r s t 2 , l c u v w ", + " x y z A B , l u C v D E ", + " @ F > t k G H I J K L M ", + " N @ O / 2 l P Q R S T U V ", + " W m 2 X l I Y Z ` ...+. ", + " W @.l u I R #.Z Y U M ", + " $.G I $.%.R &.Y *.& =. ", + " -.;.>.,.L L ,.& M ", + " "}; + +static const char * exit_xpm[] = { + "16 16 71 1", + " c None", + ". c #CF673F", + "+ c #D0673F", + "@ c #C05F3F", + "# c #BF5F3F", + "$ c #D0674F", + "% c #E07050", + "& c #F07850", + "* c #FF7040", + "= c #F06830", + "- c #E05830", + "; c #D05030", + "> c #B04F2F", + ", c #D06F4F", + "' c #F08060", + ") c #FF9070", + "! c #FF8860", + "~ c #FF8050", + "{ c #FF5820", + "] c #FF4810", + "^ c #D04810", + "/ c #B0482F", + "( c #FF9880", + "_ c #FF6030", + ": c #F04000", + "< c #C04010", + "[ c #A03F2F", + "} c #E06840", + "| c #FF9870", + "1 c #FF7850", + "2 c #FF6840", + "3 c #F04010", + "4 c #E03800", + "5 c #A03820", + "6 c #8F372F", + "7 c #F06840", + "8 c #FF8060", + "9 c #FFFFFF", + "0 c #FFF8F0", + "a c #FFF0F0", + "b c #FFE8E0", + "c c #FFD0C0", + "d c #E04010", + "e c #B03010", + "f c #7F2F1F", + "g c #FFD8D0", + "h c #FFC8C0", + "i c #C03000", + "j c #6F281F", + "k c #F04810", + "l c #FF6830", + "m c #FFE0D0", + "n c #F0C0B0", + "o c #D04010", + "p c #5F1F1F", + "q c #E04820", + "r c #FF4000", + "s c #FF5020", + "t c #FF5010", + "u c #D03800", + "v c #D03000", + "w c #B02800", + "x c #5F170F", + "y c #C05020", + "z c #F03800", + "A c #802010", + "B c #4F0F0F", + "C c #A02800", + "D c #C03810", + "E c #5F0F00", + "F c #A03810", + " ", + " .+@@@# ", + " $%&*=-;> ", + " ,')!~*{]^/ ", + " +&)()~*_]:<[ ", + " .}~!||!12{3456 ", + " +7899990abcdef ", + " @{19990bgchdij ", + " @kl0abmchcnoip ", + " @qr]stt]3duvwx ", + " #yz:::z44uvvAB ", + " >o4444uvvvCB ", + " /DvvvvvvCE ", + " [FeiiwAB ", + " 6fjpxB ", + " "}; + +/* 打开列表视图用的按钮触发函数 */ +static void open_btn_onbutton(rtgui_widget_t* widget, struct rtgui_event* event) +{ + rtgui_rect_t rect; + rt_uint32_t index; + + /* 获得顶层的application */ + application = RTGUI_APPLICATION(rtgui_widget_get_toplevel(widget)); + rtgui_widget_get_rect(RTGUI_WIDGET(application), &rect); + + /* 初始化图标列表 */ + if (items == RT_NULL) + { + char item_name[32]; + + items = (struct rtgui_list_item *) rtgui_malloc((ITEM_MAX + 1) * sizeof(struct rtgui_list_item)); + for (index = 0; index < ITEM_MAX; index ++) + { + rt_snprintf(item_name, sizeof(item_name), "图标%d", index); + items[index].action = listitem_action; + items[index].image = item_icon; + items[index].name = rt_strdup(item_name); + items[index].parameter = (void*) index; + } + + items[ITEM_MAX].action = return_action; + items[ITEM_MAX].image = exit_icon; + items[ITEM_MAX].name = "退出"; + items[ITEM_MAX].parameter = RT_NULL; + } + + /* 创建一个列表视图, 项指定为items */ + _view = rtgui_list_view_create(items, ITEM_MAX + 1, &rect, RTGUI_LIST_VIEW_ICON); + /* 在application中添加相应的视图 */ + rtgui_application_add_container(application, RTGUI_CONTAINER(_view)); + + /* 模式显示视图 */ + rtgui_container_show(RTGUI_CONTAINER(_view), RT_TRUE); + rtgui_container_destroy(RTGUI_CONTAINER(_view)); + + _view = RT_NULL; +} + +/* 创建用于演示列表视图的视图 */ +rtgui_container_t* demo_listview_icon_view(struct rtgui_application *app) +{ + rtgui_rect_t rect; + rtgui_container_t *view; + rtgui_button_t* open_btn; + + view = demo_view(app, "图标视图演示"); + + if (item_icon == RT_NULL) + item_icon = rtgui_image_create_from_mem("xpm", + (const rt_uint8_t*)image_xpm, sizeof(image_xpm), RT_TRUE); + if (exit_icon == RT_NULL) + exit_icon = rtgui_image_create_from_mem("xpm", + (const rt_uint8_t*)exit_xpm, sizeof(exit_xpm), RT_TRUE); + + /* 添加动作按钮 */ + demo_view_get_rect(view, &rect); + rect.x1 += 5; + rect.x2 = rect.x1 + 80; + rect.y1 += 30; + rect.y2 = rect.y1 + 20; + open_btn = rtgui_button_create("打开图标列表"); + rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(open_btn)); + rtgui_widget_set_rect(RTGUI_WIDGET(open_btn), &rect); + rtgui_button_set_onbutton(open_btn, open_btn_onbutton); + + return view; +} diff --git a/examples/gui/demo_panel.c b/examples/gui/demo_panel.c index 27536eff46..339b67cc7d 100644 --- a/examples/gui/demo_panel.c +++ b/examples/gui/demo_panel.c @@ -1,27 +1,27 @@ -#include -#include - -/* - * Panel demo for 240x320 - * info panel: (0, 0) - (240, 25) - * main panel: (0, 25) - (240, 320) - */ -void panel_init(void) -{ - rtgui_rect_t rect; - - /* register dock panel */ - rect.x1 = 0; - rect.y1 = 0; - rect.x2 = 240; - rect.y2 = 25; - rtgui_panel_register("info", &rect); - - /* register main panel */ - rect.x1 = 0; - rect.y1 = 25; - rect.x2 = 240; - rect.y2 = 320; - rtgui_panel_register("main", &rect); - rtgui_panel_set_default_focused("main"); -} +#include +#include + +/* + * Panel demo for 240x320 + * info panel: (0, 0) - (240, 25) + * main panel: (0, 25) - (240, 320) + */ +void panel_init(void) +{ + rtgui_rect_t rect; + + /* register dock panel */ + rect.x1 = 0; + rect.y1 = 0; + rect.x2 = 240; + rect.y2 = 25; + rtgui_panel_register("info", &rect); + + /* register main panel */ + rect.x1 = 0; + rect.y1 = 25; + rect.x2 = 240; + rect.y2 = 320; + rtgui_panel_register("main", &rect); + rtgui_panel_set_default_focused("main"); +} diff --git a/examples/gui/demo_panel_single.c b/examples/gui/demo_panel_single.c index 2e56de4fd4..c31e878f4a 100644 --- a/examples/gui/demo_panel_single.c +++ b/examples/gui/demo_panel_single.c @@ -1,19 +1,19 @@ -#include -#include -#include - -/* - * a single panel - */ -void panel_init(void) -{ - rtgui_rect_t rect; - - /* register main panel */ - rect.x1 = 0; - rect.y1 = 0; - rect.x2 = rtgui_graphic_driver_get_default()->width; - rect.y2 = rtgui_graphic_driver_get_default()->height; - rtgui_panel_register("main", &rect); - rtgui_panel_set_default_focused("main"); -} +#include +#include +#include + +/* + * a single panel + */ +void panel_init(void) +{ + rtgui_rect_t rect; + + /* register main panel */ + rect.x1 = 0; + rect.y1 = 0; + rect.x2 = rtgui_graphic_driver_get_default()->width; + rect.y2 = rtgui_graphic_driver_get_default()->height; + rtgui_panel_register("main", &rect); + rtgui_panel_set_default_focused("main"); +} diff --git a/examples/gui/demo_simple_workbench.c b/examples/gui/demo_simple_workbench.c index d0432428c7..1f24ac72e5 100644 --- a/examples/gui/demo_simple_workbench.c +++ b/examples/gui/demo_simple_workbench.c @@ -1,60 +1,60 @@ -/* - * A simple workbench - */ -#include -#include -#include -#include -#include - -static void workbench_entry(void* parameter) -{ - rt_mq_t mq; - rtgui_view_t* view; - rtgui_label_t* label; - struct rtgui_workbench* workbench; - rtgui_rect_t rect; - - mq = rt_mq_create("wmq", 256, 8, RT_IPC_FLAG_FIFO); - /* 注册当前线程为GUI线程 */ - rtgui_thread_register(rt_thread_self(), mq); - /* 创建一个工作台 */ - workbench = rtgui_workbench_create("main", "workbench #1"); - if (workbench == RT_NULL) return; - - view = rtgui_view_create("view"); - if (view == RT_NULL) return; - /* 指定视图的背景色 */ - RTGUI_WIDGET_BACKGROUND(RTGUI_WIDGET(view)) = white; - - /* 添加一个label */ - label = rtgui_label_create("你好!RT-Thread!"); - rect.x1 = 10; rect.y1 = 10; - rect.x2 = 210; rect.y2 = 30; - /* 设置label的位置 */ - rtgui_widget_set_rect(RTGUI_WIDGET(label), &rect); - rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(label)); - - /* 添加到父workbench中 */ - rtgui_workbench_add_view(workbench, view); - /* 非模式方式显示视图 */ - rtgui_view_show(view, RT_FALSE); - - /* 执行工作台事件循环 */ - rtgui_workbench_event_loop(workbench); - - /* 去注册GUI线程 */ - rtgui_thread_deregister(rt_thread_self()); - - /* delete message queue */ - rt_mq_delete(mq); -} - -/* 初始化workbench */ -void wb_init() -{ - rt_thread_t tid; - - tid = rt_thread_create("wb1", workbench_entry, RT_NULL, 2048, 20, 5); - if (tid != RT_NULL) rt_thread_startup(tid); -} +/* + * A simple workbench + */ +#include +#include +#include +#include +#include + +static void workbench_entry(void* parameter) +{ + rt_mq_t mq; + rtgui_container_t* view; + rtgui_label_t* label; + struct rtgui_workbench* workbench; + rtgui_rect_t rect; + + mq = rt_mq_create("wmq", 256, 8, RT_IPC_FLAG_FIFO); + /* 注册当前线程为GUI线程 */ + rtgui_thread_register(rt_thread_self(), mq); + /* 创建一个工作台 */ + workbench = rtgui_workbench_create("main", "workbench #1"); + if (workbench == RT_NULL) return; + + view = rtgui_container_create("view"); + if (view == RT_NULL) return; + /* 指定视图的背景色 */ + RTGUI_WIDGET_BACKGROUND(RTGUI_WIDGET(view)) = white; + + /* 添加一个label */ + label = rtgui_label_create("你好!RT-Thread!"); + rect.x1 = 10; rect.y1 = 10; + rect.x2 = 210; rect.y2 = 30; + /* 设置label的位置 */ + rtgui_widget_set_rect(RTGUI_WIDGET(label), &rect); + rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(label)); + + /* 添加到父workbench中 */ + rtgui_workbench_add_view(workbench, view); + /* 非模式方式显示视图 */ + rtgui_container_show(view, RT_FALSE); + + /* 执行工作台事件循环 */ + rtgui_workbench_event_loop(workbench); + + /* 去注册GUI线程 */ + rtgui_thread_deregister(rt_thread_self()); + + /* delete message queue */ + rt_mq_delete(mq); +} + +/* 初始化workbench */ +void wb_init() +{ + rt_thread_t tid; + + tid = rt_thread_create("wb1", workbench_entry, RT_NULL, 2048, 20, 5); + if (tid != RT_NULL) rt_thread_startup(tid); +} diff --git a/examples/gui/demo_view.c b/examples/gui/demo_view.c index f7b5e1594a..d19ee9ac3d 100644 --- a/examples/gui/demo_view.c +++ b/examples/gui/demo_view.c @@ -1,172 +1,150 @@ -#include -#include -#include -#include -#include - -/* 用于存放演示视图的数组,最多可创建32个演示视图 */ -static rtgui_view_t* demo_view_list[32]; -/* 当前演示视图索引 */ -static rt_uint16_t demo_view_current = 0; -/* 总共包括的演示视图数目 */ -static rt_uint16_t demo_view_number = 0; - -/* 显示下一个演示视图 */ -void demo_view_next(struct rtgui_widget* widget, rtgui_event_t *event) -{ - if (demo_view_current + 1< demo_view_number) - { - demo_view_current ++; - rtgui_view_show(demo_view_list[demo_view_current], RT_FALSE); - } -} - -/* 显示前一个演示视图 */ -void demo_view_prev(struct rtgui_widget* widget, rtgui_event_t *event) -{ - if (demo_view_current != 0) - { - demo_view_current --; - rtgui_view_show(demo_view_list[demo_view_current], RT_FALSE); - } -} - -/* 创建一个演示视图,需提供父workbench和演示用的标题 */ -rtgui_view_t* demo_view(rtgui_workbench_t* workbench, const char* title) -{ - struct rtgui_view* view; - - /* 设置视图的名称 */ - view = rtgui_view_create(title); - if (view == RT_NULL) return RT_NULL; - - /* 创建成功后,添加到数组中 */ - demo_view_list[demo_view_number] = view; - demo_view_number ++; - - /* 添加到父workbench中 */ - rtgui_workbench_add_view(workbench, view); - - /* 添加下一个视图和前一个视图按钮 */ - { - struct rtgui_rect rect; - struct rtgui_button *next_btn, *prev_btn; - struct rtgui_label *label; - struct rtgui_staticline *line; - - /* 获得视图的位置信息(在加入到workbench中时,workbench会自动调整视图的大小) */ - rtgui_widget_get_rect(RTGUI_WIDGET(view), &rect); - rtgui_widget_rect_to_device(RTGUI_WIDGET(view), &rect); - rect.x1 += 5; - rect.y1 += 5; - rect.x2 -= 5; - rect.y2 = rect.y1 + 20; - - /* 创建标题用的标签 */ - label = rtgui_label_create(title); - /* 设置标签位置信息 */ - rtgui_widget_set_rect(RTGUI_WIDGET(label), &rect); - /* 添加标签到视图中 */ - rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(label)); - - rect.y1 += 20; - rect.y2 += 20; - /* 创建一个水平的staticline线 */ - line = rtgui_staticline_create(RTGUI_HORIZONTAL); - /* 设置静态线的位置信息 */ - rtgui_widget_set_rect(RTGUI_WIDGET(line), &rect); - /* 添加静态线到视图中 */ - rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(line)); - - /* 获得视图的位置信息 */ - rtgui_widget_get_rect(RTGUI_WIDGET(view), &rect); - rtgui_widget_rect_to_device(RTGUI_WIDGET(view), &rect); - rect.x2 -= 5; - rect.y2 -= 5; - rect.x1 = rect.x2 - 100; - rect.y1 = rect.y2 - 25; - - /* 创建"下一个"按钮 */ - next_btn = rtgui_button_create("下一个"); - /* 设置onbutton动作到demo_view_next函数 */ - rtgui_button_set_onbutton(next_btn, demo_view_next); - /* 设置按钮的位置信息 */ - rtgui_widget_set_rect(RTGUI_WIDGET(next_btn), &rect); - /* 添加按钮到视图中 */ - rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(next_btn)); - - /* 获得视图的位置信息 */ - rtgui_widget_get_rect(RTGUI_WIDGET(view), &rect); - rtgui_widget_rect_to_device(RTGUI_WIDGET(view), &rect); - rect.x1 += 5; - rect.y2 -= 5; - rect.x2 = rect.x1 + 100; - rect.y1 = rect.y2 - 25; - - /* 创建"上一个"按钮 */ - prev_btn = rtgui_button_create("上一个"); - /* 设置onbutton动作到demo_view_prev函数 */ - rtgui_button_set_onbutton(prev_btn, demo_view_prev); - /* 设置按钮的位置信息 */ - rtgui_widget_set_rect(RTGUI_WIDGET(prev_btn), &rect); - /* 添加按钮到视图中 */ - rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(prev_btn)); - } - - /* 返回创建的视图 */ - return view; -} - -/* 这个函数用于返回演示视图的对外可用区域 */ -void demo_view_get_rect(rtgui_view_t* view, rtgui_rect_t *rect) -{ - RT_ASSERT(view != RT_NULL); - RT_ASSERT(rect != RT_NULL); - - rtgui_widget_get_rect(RTGUI_WIDGET(view), rect); - rtgui_widget_rect_to_device(RTGUI_WIDGET(view), rect); - /* 去除演示标题和下方按钮的区域 */ - rect->y1 += 45; - rect->y2 -= 35; -} - -void demo_view_get_logic_rect(rtgui_view_t* view, rtgui_rect_t *rect) -{ - RT_ASSERT(view != RT_NULL); - RT_ASSERT(rect != RT_NULL); - - rtgui_widget_get_rect(RTGUI_WIDGET(view), rect); - /* 去除演示标题和下方按钮的区域 */ - rect->y1 += 45; - rect->y2 -= 35; -} - -/* 当是标准版本时,这个函数用于返回自动布局引擎box控件 */ -#ifndef RTGUI_USING_SMALL_SIZE -rtgui_box_t* demo_view_create_box(rtgui_view_t* view, int orient) -{ - rtgui_rect_t rect; - rtgui_box_t* box; - - /* 获得视图的位置信息 */ - rtgui_widget_get_rect(RTGUI_WIDGET(view), &rect); - rect.y1 += 45; - rect.y2 -= 25; - - /* 创建一个自动布局引擎 */ - box = rtgui_box_create(orient, &rect); - /* 添加box控件到视图中 */ - rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(box)); - - return box; -} -#endif - -/* 这个函数用于显示当前的视图 */ -void demo_view_show() -{ - if (demo_view_number != 0) - { - rtgui_view_show(demo_view_list[demo_view_current], RT_FALSE); - } -} +#include +#include + +#include +#include +#include +#include + +extern struct rtgui_notebook *the_notebook; + +void demo_view_next(struct rtgui_object *object, struct rtgui_event *event) +{ + rtgui_notebook_set_current_by_index(the_notebook, + (rtgui_notebook_get_current_index(the_notebook) + 1) % + rtgui_notebook_get_count(the_notebook)); +} + +void demo_view_prev(struct rtgui_object *object, struct rtgui_event *event) +{ + rt_int16_t cur_idx = rtgui_notebook_get_current_index(the_notebook); + + if (cur_idx == 0) + rtgui_notebook_set_current_by_index(the_notebook, + rtgui_notebook_get_count(the_notebook) - 1); + else + rtgui_notebook_set_current_by_index(the_notebook, + --cur_idx); +} + +rtgui_container_t* demo_view(const char *title) +{ + struct rtgui_container *container; + struct rtgui_label *label; + struct rtgui_staticline *line; + struct rtgui_button *next_btn, *prev_btn; + struct rtgui_rect rect; + + container = rtgui_container_create(); + if (container == RT_NULL) + return RT_NULL; + + rtgui_notebook_add(the_notebook, title, RTGUI_WIDGET(container)); + + /* 获得视图的位置信息(在加入到 notebook 中时,notebook 会自动调整 container + * 的大小) */ + rtgui_widget_get_rect(RTGUI_WIDGET(container), &rect); + rtgui_widget_rect_to_device(RTGUI_WIDGET(container), &rect); + rect.x1 += 5; + rect.y1 += 5; + rect.x2 -= 5; + rect.y2 = rect.y1 + 20; + + /* 创建标题用的标签 */ + label = rtgui_label_create(title); + /* 设置标签位置信息 */ + rtgui_widget_set_rect(RTGUI_WIDGET(label), &rect); + /* 添加标签到视图中 */ + rtgui_container_add_child(container, RTGUI_WIDGET(label)); + + rect.y1 += 20; + rect.y2 += 20; + /* 创建一个水平的 staticline 线 */ + line = rtgui_staticline_create(RTGUI_HORIZONTAL); + /* 设置静态线的位置信息 */ + rtgui_widget_set_rect(RTGUI_WIDGET(line), &rect); + /* 添加静态线到视图中 */ + rtgui_container_add_child(container, RTGUI_WIDGET(line)); + + /* 获得视图的位置信息 */ + rtgui_widget_get_rect(RTGUI_WIDGET(container), &rect); + rtgui_widget_rect_to_device(RTGUI_WIDGET(container), &rect); + rect.x2 -= 5; + rect.y2 -= 5; + rect.x1 = rect.x2 - 100; + rect.y1 = rect.y2 - 25; + + /* 创建"下一个"按钮 */ + next_btn = rtgui_button_create("下一个"); + /* 设置onbutton动作到demo_view_next函数 */ + rtgui_button_set_onbutton(next_btn, demo_view_next); + /* 设置按钮的位置信息 */ + rtgui_widget_set_rect(RTGUI_WIDGET(next_btn), &rect); + /* 添加按钮到视图中 */ + rtgui_container_add_child(container, RTGUI_WIDGET(next_btn)); + + /* 获得视图的位置信息 */ + rtgui_widget_get_rect(RTGUI_WIDGET(container), &rect); + rtgui_widget_rect_to_device(RTGUI_WIDGET(container), &rect); + rect.x1 += 5; + rect.y2 -= 5; + rect.x2 = rect.x1 + 100; + rect.y1 = rect.y2 - 25; + + /* 创建"上一个"按钮 */ + prev_btn = rtgui_button_create("上一个"); + /* 设置onbutton动作到demo_view_prev函数 */ + rtgui_button_set_onbutton(prev_btn, demo_view_prev); + /* 设置按钮的位置信息 */ + rtgui_widget_set_rect(RTGUI_WIDGET(prev_btn), &rect); + /* 添加按钮到视图中 */ + rtgui_container_add_child(container, RTGUI_WIDGET(prev_btn)); + + /* 返回创建的视图 */ + return container; +} + +/* 这个函数用于返回演示视图的对外可用区域 */ +void demo_view_get_rect(rtgui_container_t* container, rtgui_rect_t *rect) +{ + RT_ASSERT(container != RT_NULL); + RT_ASSERT(rect != RT_NULL); + + rtgui_widget_get_rect(RTGUI_WIDGET(container), rect); + rtgui_widget_rect_to_device(RTGUI_WIDGET(container), rect); + /* 去除演示标题和下方按钮的区域 */ + rect->y1 += 45; + rect->y2 -= 35; +} + +void demo_view_get_logic_rect(rtgui_container_t* container, rtgui_rect_t *rect) +{ + RT_ASSERT(container != RT_NULL); + RT_ASSERT(rect != RT_NULL); + + rtgui_widget_get_rect(RTGUI_WIDGET(container), rect); + /* 去除演示标题和下方按钮的区域 */ + rect->y1 += 45; + rect->y2 -= 35; +} + +/* 当是标准版本时,这个函数用于返回自动布局引擎box控件 */ +#ifndef RTGUI_USING_SMALL_SIZE +struct rtgui_box* demo_view_create_box(struct rtgui_container *container, int orient) +{ + rtgui_rect_t rect; + struct rtgui_box* box; + + /* 获得视图的位置信息 */ + rtgui_widget_get_rect(RTGUI_WIDGET(container), &rect); + rect.y1 += 45; + rect.y2 -= 25; + + /* 创建一个自动布局引擎 */ + box = rtgui_box_create(orient, &rect); + /* 添加box控件到视图中 */ + rtgui_container_add_child(container, RTGUI_WIDGET(box)); + + return box; +} +#endif diff --git a/examples/gui/demo_view.h b/examples/gui/demo_view.h index e1c7729275..e1c93a53b3 100644 --- a/examples/gui/demo_view.h +++ b/examples/gui/demo_view.h @@ -1,39 +1,39 @@ -/* - * 绋嬪簭娓呭崟锛歷iew婕旂ず - * - * 杩欐槸涓�涓鍥剧殑婕旂ず锛屼篃鏄负浜嗛厤鍚堟暣涓狦UI婕旂ず鑰屽埗浣滅殑瑙嗗浘锛屾垨鑰呰锛屽叾浠栧ぇ澶氭暟鎺т欢鐨勬紨绀� - * 閮芥槸閲囩敤锛屽厛鍒涘缓涓�涓猟emo_view锛堟紨绀鸿鍥撅級锛岀劧鍚庡啀鍦ㄨ繖涓紨绀鸿鍥句笂娣诲姞鐩稿簲鐨勬帶浠躲�� - * - * 杩欎釜婕旂ず瑙嗗浘榛樿涓婃柟甯︿竴涓紨绀烘爣棰橈紝涓嬫柟甯︿袱涓寜閽紝鐐瑰嚮瀹冨垏鎹㈠埌鍓嶄竴涓鍥炬垨鍚庝竴涓鍥俱�� - * 閽堝鎺т欢婕旂ず鑰岃█锛岃繖涓紨绀鸿鍥炬渶閲嶈鐨勬槸鎻愪緵浜嗕竴涓彲鏄剧ず鐨勫尯鍩燂紝鍙渶瑕佸湪杩欏潡鍖哄煙涓婃坊鍔� - * 鎺т欢鍗冲彲杈惧埌婕旂ず鐨勭洰鐨勩�� - * - * 鑾峰緱杩欎釜鏄剧ず鍖哄煙鐨勫嚱鏁版槸锛� - * demo_view_get_rect鍑芥暟銆� - */ -#ifndef __DEMO_VIEW_H__ -#define __DEMO_VIEW_H__ - -#include -#include -#include - -/* 濡傛灉鏄爣鍑嗙増鏈紝鍙互鍚敤box鑷姩甯冨眬寮曟搸 */ -#ifndef RTGUI_USING_SMALL_SIZE -#include -#endif - -/* 鍒涘缓涓�涓紨绀鸿鍥撅紝闇�瑕佺粰鍑鸿繖涓鍥炬墍鍦ㄧ殑workbench鍜屾紨绀烘爣棰� */ -rtgui_view_t* demo_view(rtgui_workbench_t* workbench, const char* title); -/* 鑾峰緱婕旂ず瑙嗗浘鎻愪緵缁欐紨绀烘帶浠剁敤鐨勫尯鍩熶俊鎭� */ -void demo_view_get_rect(rtgui_view_t* view, rtgui_rect_t *rect); -void demo_view_get_logic_rect(rtgui_view_t* view, rtgui_rect_t *rect); -void demo_view_show(void); - -/* 濡傛灉鏄爣鍑嗙増锛屽彲浠ヨ皟鐢ㄨ繖涓嚱鏁拌幏寰椾竴涓嚜鍔ㄥ竷灞�寮曟搸 */ -#ifndef RTGUI_USING_SMALL_SIZE -rtgui_box_t* demo_view_create_box(rtgui_view_t* view, int orient); -#endif - -#endif - +/* + * 绋嬪簭娓呭崟锛歷iew婕旂ず + * + * 杩欐槸涓�涓鍥剧殑婕旂ず锛屼篃鏄负浜嗛厤鍚堟暣涓狦UI婕旂ず鑰屽埗浣滅殑瑙嗗浘锛屾垨鑰呰锛屽叾浠栧ぇ澶氭暟鎺т欢鐨勬紨绀� + * 閮芥槸閲囩敤锛屽厛鍒涘缓涓�涓猟emo_view锛堟紨绀鸿鍥撅級锛岀劧鍚庡啀鍦ㄨ繖涓紨绀鸿鍥句笂娣诲姞鐩稿簲鐨勬帶浠躲�� + * + * 杩欎釜婕旂ず瑙嗗浘榛樿涓婃柟甯︿竴涓紨绀烘爣棰橈紝涓嬫柟甯︿袱涓寜閽紝鐐瑰嚮瀹冨垏鎹㈠埌鍓嶄竴涓鍥炬垨鍚庝竴涓鍥俱�� + * 閽堝鎺т欢婕旂ず鑰岃█锛岃繖涓紨绀鸿鍥炬渶閲嶈鐨勬槸鎻愪緵浜嗕竴涓彲鏄剧ず鐨勫尯鍩燂紝鍙渶瑕佸湪杩欏潡鍖哄煙涓婃坊鍔� + * 鎺т欢鍗冲彲杈惧埌婕旂ず鐨勭洰鐨勩�� + * + * 鑾峰緱杩欎釜鏄剧ず鍖哄煙鐨勫嚱鏁版槸锛� + * demo_view_get_rect鍑芥暟銆� + */ +#ifndef __DEMO_VIEW_H__ +#define __DEMO_VIEW_H__ + +#include +#include +#include + +/* 濡傛灉鏄爣鍑嗙増鏈紝鍙互鍚敤box鑷姩甯冨眬寮曟搸 */ +#ifndef RTGUI_USING_SMALL_SIZE +#include +#endif + +/* 鍒涘缓涓�涓紨绀鸿鍥撅紝闇�瑕佺粰鍑鸿繖涓鍥剧殑婕旂ず鏍囬 */ +rtgui_container_t* demo_view(const char* title); +/* 鑾峰緱婕旂ず瑙嗗浘鎻愪緵缁欐紨绀烘帶浠剁敤鐨勫尯鍩熶俊鎭� */ +void demo_view_get_rect(rtgui_container_t* view, rtgui_rect_t *rect); +void demo_view_get_logic_rect(rtgui_container_t* view, rtgui_rect_t *rect); +void demo_view_show(void); + +/* 濡傛灉鏄爣鍑嗙増锛屽彲浠ヨ皟鐢ㄨ繖涓嚱鏁拌幏寰椾竴涓嚜鍔ㄥ竷灞�寮曟搸 */ +#ifndef RTGUI_USING_SMALL_SIZE +rtgui_box_t* demo_view_create_box(rtgui_container_t* view, int orient); +#endif + +#endif + diff --git a/examples/gui/demo_view_animation.c b/examples/gui/demo_view_animation.c index fccc7bbea1..cc3bfb902f 100644 --- a/examples/gui/demo_view_animation.c +++ b/examples/gui/demo_view_animation.c @@ -1,113 +1,132 @@ -#include -#include -#include -#include "demo_view.h" - -/* - * 直接在DC上绘图以实现动画效果 - * - * 动画是依赖于定时器驱动的,会上下翻滚显示文字 - * "飞线乱飞" - */ -static rt_int8_t dx = 1, dy = 1; -static rtgui_rect_t text_rect; -static rtgui_timer_t *timer; - -void timeout(struct rtgui_timer* timer, void* parameter) -{ - struct rtgui_dc* dc; - rtgui_rect_t rect; - rtgui_widget_t *widget; - - /* 控件(view)通过parameter参数传递给定时器 */ - widget = (rtgui_widget_t*)parameter; - - /* 获得控件所属的DC */ - dc = rtgui_dc_begin_drawing(widget); - if (dc == RT_NULL) /* 如果不能正常获得DC,返回(如果控件或父控件是隐藏状态,DC是获取不成功的) */ - return ; - - /* 获得demo view允许绘图的区域,主要用于判断边界 */ - demo_view_get_rect(RTGUI_VIEW(widget), &rect); - rect.y2 -= 5; - - /* 判断是否是第一次绘图 */ - if ((text_rect.x1 == 0) && (text_rect.y1 == 0)) - { - rtgui_rect_moveto(&text_rect, rect.x1, rect.y1); - } - else - { - /* 擦除老的文字 */ - rtgui_dc_fill_rect(dc, &text_rect); - } - - /* 设置dx和dy */ - if (text_rect.x2 >= rect.x2) dx = -1; - if (text_rect.x1 < rect.x1) dx = 1; - if (text_rect.y2 >= rect.y2) dy = -1; - if (text_rect.y1 < rect.y1) dy = 1; - - /* 移动文本框的位置 */ - text_rect.x1 += dx; text_rect.x2 += dx; - text_rect.y1 += dy; text_rect.y2 += dy; - - /* 绘图 */ - rtgui_dc_draw_text(dc, "飞线乱飞", &text_rect); - - /* 绘图完成 */ - rtgui_dc_end_drawing(dc); -} - -rt_bool_t animation_event_handler(rtgui_widget_t* widget, rtgui_event_t *event) -{ - if (event->type == RTGUI_EVENT_PAINT) - { - struct rtgui_dc* dc; - rtgui_rect_t rect; - - /* 因为用的是demo view,上面本身有一部分控件,所以在绘图时先要让demo view先绘图 */ - rtgui_view_event_handler(widget, event); - - /* 获得控件所属的DC */ - dc = rtgui_dc_begin_drawing(widget); - if (dc == RT_NULL) /* 如果不能正常获得DC,返回(如果控件或父控件是隐藏状态,DC是获取不成功的) */ - return RT_FALSE; - - /* 获得demo view允许绘图的区域 */ - demo_view_get_rect(RTGUI_VIEW(widget), &rect); - - /* 擦除所有 */ - rtgui_dc_fill_rect(dc, &rect); - - /* 绘图 */ - rtgui_dc_draw_text(dc, "飞线乱飞", &text_rect); - - /* 绘图完成 */ - rtgui_dc_end_drawing(dc); - } - else - { - /* 调用默认的事件处理函数 */ - return rtgui_view_event_handler(widget, event); - } - - return RT_FALSE; -} - -rtgui_view_t *demo_view_animation(rtgui_workbench_t* workbench) -{ - rtgui_view_t *view; - - view = demo_view(workbench, "DC 动画"); - if (view != RT_NULL) - rtgui_widget_set_event_handler(RTGUI_WIDGET(view), animation_event_handler); - - rtgui_font_get_metrics(RTGUI_WIDGET_FONT(RTGUI_WIDGET(view)), "飞线乱飞", &text_rect); - rtgui_rect_moveto(&text_rect, 0, 45); - /* 启动定时器以触发动画 */ - timer = rtgui_timer_create(2, RT_TIMER_FLAG_PERIODIC, timeout, (void*)view); - rtgui_timer_start(timer); - - return view; -} +#include +#include +#include +#include "demo_view.h" + +/* + * 直接在DC上绘图以实现动画效果 + * + * 动画是依赖于定时器驱动的,会上下翻滚显示文字 + * "飞线乱飞" + */ +static rt_int8_t dx = 1, dy = 1; +static rtgui_rect_t text_rect; +static rtgui_timer_t *timer; + +void timeout(struct rtgui_timer* timer, void* parameter) +{ + struct rtgui_dc* dc; + struct rtgui_rect rect; + struct rtgui_widget *widget; + + /* 控件(container)通过parameter参数传递给定时器 */ + widget = RTGUI_WIDGET(parameter); + + /* 获得控件所属的DC */ + dc = rtgui_dc_begin_drawing(widget); + if (dc == RT_NULL) /* 如果不能正常获得DC,返回(如果控件或父控件是隐藏状态,DC是获取不成功的) */ + return ; + + /* 获得demo container允许绘图的区域,主要用于判断边界 */ + demo_view_get_rect(RTGUI_CONTAINER(widget), &rect); + rect.y2 -= 5; + + /* 判断是否是第一次绘图 */ + if ((text_rect.x1 == 0) && (text_rect.y1 == 0)) + { + rtgui_rect_moveto(&text_rect, rect.x1, rect.y1); + } + else + { + /* 擦除老的文字 */ + rtgui_dc_fill_rect(dc, &text_rect); + } + + /* 设置dx和dy */ + if (text_rect.x2 >= rect.x2) dx = -1; + if (text_rect.x1 < rect.x1) dx = 1; + if (text_rect.y2 >= rect.y2) dy = -1; + if (text_rect.y1 < rect.y1) dy = 1; + + /* 移动文本框的位置 */ + text_rect.x1 += dx; text_rect.x2 += dx; + text_rect.y1 += dy; text_rect.y2 += dy; + + /* 绘图 */ + rtgui_dc_draw_text(dc, "飞线乱飞", &text_rect); + + /* 绘图完成 */ + rtgui_dc_end_drawing(dc); +} + +rt_bool_t animation_event_handler(struct rtgui_object* object, rtgui_event_t *event) +{ + struct rtgui_widget *widget = RTGUI_WIDGET(object); + + if (event->type == RTGUI_EVENT_PAINT) + { + struct rtgui_dc* dc; + rtgui_rect_t rect; + + /* 因为用的是demo container,上面本身有一部分控件,所以在绘图时先要让demo container先绘图 */ + rtgui_container_event_handler(object, event); + + /* 获得控件所属的DC */ + dc = rtgui_dc_begin_drawing(widget); + if (dc == RT_NULL) /* 如果不能正常获得DC,返回(如果控件或父控件是隐藏状态,DC是获取不成功的) */ + return RT_FALSE; + + /* 获得demo container允许绘图的区域 */ + demo_view_get_rect(RTGUI_CONTAINER(widget), &rect); + + /* 擦除所有 */ + rtgui_dc_fill_rect(dc, &rect); + + /* 绘图 */ + rtgui_dc_draw_text(dc, "飞线乱飞", &text_rect); + + /* 绘图完成 */ + rtgui_dc_end_drawing(dc); + } + else + { + /* 调用默认的事件处理函数 */ + return rtgui_container_event_handler(object, event); + } + + return RT_FALSE; +} + +static rt_bool_t animation_on_show(struct rtgui_object *object, struct rtgui_event *event) +{ + rt_kprintf("animation on show\n"); + if (timer != RT_NULL) + rtgui_timer_start(timer); + return RT_TRUE; +} + +static rt_bool_t animation_on_hide(struct rtgui_object *object, struct rtgui_event *event) +{ + rt_kprintf("animation on hide\n"); + if (timer != RT_NULL) + rtgui_timer_stop(timer); + return RT_TRUE; +} + +rtgui_container_t *demo_view_animation() +{ + rtgui_container_t *container; + + container = demo_view("DC 动画"); + if (container != RT_NULL) + rtgui_object_set_event_handler(RTGUI_OBJECT(container), animation_event_handler); + + rtgui_font_get_metrics(RTGUI_WIDGET_FONT(RTGUI_WIDGET(container)), "飞线乱飞", &text_rect); + rtgui_rect_moveto(&text_rect, 0, 45); + timer = rtgui_timer_create(2, RT_TIMER_FLAG_PERIODIC, timeout, (void*)container); + + rtgui_widget_set_onshow(RTGUI_WIDGET(container), animation_on_show); + rtgui_widget_set_onhide(RTGUI_WIDGET(container), animation_on_hide); + + return container; +} diff --git a/examples/gui/demo_view_benchmark.c b/examples/gui/demo_view_benchmark.c index 181e542d0e..cd24824c62 100644 --- a/examples/gui/demo_view_benchmark.c +++ b/examples/gui/demo_view_benchmark.c @@ -1,111 +1,111 @@ -#include -#include -#include -#include -#include "demo_view.h" - -#if RTTHREAD_VERSION >= 10000 -#define RAND(x1, x2) ((rand() % (x2 - x1)) + x1) - -static rtgui_view_t* view = RT_NULL; -static int running = 0; - -void _onidle(rtgui_widget_t* widget, rtgui_event_t *event) -{ - rtgui_color_t color; - rtgui_rect_t rect, draw_rect; - struct rtgui_dc *dc; - - /* 获得控件所属的DC */ - // dc = rtgui_dc_hw_create(RTGUI_WIDGET(view)); - dc = rtgui_dc_begin_drawing(RTGUI_WIDGET(view)); - if (dc == RT_NULL) return ; - - demo_view_get_logic_rect(RTGUI_VIEW(view), &rect); - draw_rect.x1 = RAND(rect.x1, rect.x2); - draw_rect.y1 = RAND(rect.y1, rect.y2); - draw_rect.x2 = RAND(draw_rect.x1, rect.x2); - draw_rect.y2 = RAND(draw_rect.y1, rect.y2); - - color = RTGUI_RGB(rand() % 255, rand() % 255, rand() % 255); - RTGUI_WIDGET_BACKGROUND(RTGUI_WIDGET(view)) = color; - - rtgui_dc_fill_rect(dc, &draw_rect); - - /* 绘图完成 */ - rtgui_dc_end_drawing(dc); -} - -void _draw_default(rtgui_widget_t* widget, rtgui_event_t* event) -{ - struct rtgui_dc* dc; - rtgui_rect_t rect; - - /* 因为用的是demo view,上面本身有一部分控件,所以在绘图时先要让demo view先绘图 */ - rtgui_view_event_handler(widget, event); - - /* 获得控件所属的DC */ - dc = rtgui_dc_begin_drawing(widget); - if (dc == RT_NULL) /* 如果不能正常获得DC,返回(如果控件或父控件是隐藏状态,DC是获取不成功的) */ - return ; - - /* 获得demo view允许绘图的区域 */ - demo_view_get_logic_rect(RTGUI_VIEW(widget), &rect); - - /* 擦除所有 */ - RTGUI_WIDGET_BACKGROUND(widget) = default_background; - rtgui_dc_fill_rect(dc, &rect); - - /* 显示提示 */ - rtgui_dc_draw_text(dc, "按任意键开始/停止测试...", &rect); - - /* 绘图完成 */ - rtgui_dc_end_drawing(dc); -} - -rt_bool_t benchmark_event_handler(rtgui_widget_t* widget, rtgui_event_t *event) -{ - if (event->type == RTGUI_EVENT_PAINT) - { - _draw_default(widget, event); - } - else if (event->type == RTGUI_EVENT_KBD) - { - struct rtgui_event_kbd *kbd = (struct rtgui_event_kbd*)event; - - if (RTGUI_KBD_IS_UP(kbd)) - { - if (running) - { - /* stop */ - rtgui_thread_set_onidle(RT_NULL); - _draw_default(widget, event); - } - else - { - /* run */ - rtgui_thread_set_onidle(_onidle); - } - - running = !running; - } - return RT_TRUE; - } - else - { - /* 调用默认的事件处理函数 */ - return rtgui_view_event_handler(widget, event); - } - - return RT_FALSE; -} - -rtgui_view_t *demo_view_benchmark(rtgui_workbench_t* workbench) -{ - srand(100); - view = demo_view(workbench, "绘图测试"); - rtgui_widget_set_event_handler(RTGUI_WIDGET(view), benchmark_event_handler); - - return view; -} -#endif +#include +#include +#include +#include +#include "demo_view.h" + +#define RAND(x1, x2) ((rand() % (x2 - x1)) + x1) + +static struct rtgui_container *container = RT_NULL; +static int running = 0; + +void _onidle(struct rtgui_object *object, rtgui_event_t *event) +{ + rtgui_color_t color; + rtgui_rect_t rect, draw_rect; + struct rtgui_dc *dc; + + /* 获得控件所属的DC */ + // dc = rtgui_dc_hw_create(RTGUI_WIDGET(container)); + dc = rtgui_dc_begin_drawing(RTGUI_WIDGET(container)); + if (dc == RT_NULL) + return; + + demo_view_get_logic_rect(RTGUI_CONTAINER(container), &rect); + draw_rect.x1 = RAND(rect.x1, rect.x2); + draw_rect.y1 = RAND(rect.y1, rect.y2); + draw_rect.x2 = RAND(draw_rect.x1, rect.x2); + draw_rect.y2 = RAND(draw_rect.y1, rect.y2); + + color = RTGUI_RGB(rand() % 255, rand() % 255, rand() % 255); + RTGUI_WIDGET_BACKGROUND(RTGUI_WIDGET(container)) = color; + + rtgui_dc_fill_rect(dc, &draw_rect); + + /* 绘图完成 */ + rtgui_dc_end_drawing(dc); +} + +void _draw_default(struct rtgui_object *object, rtgui_event_t* event) +{ + struct rtgui_widget *widget = RTGUI_WIDGET(object); + struct rtgui_dc* dc; + rtgui_rect_t rect; + + /* 因为用的是demo container,上面本身有一部分控件,所以在绘图时先要让demo container先绘图 */ + rtgui_container_event_handler(object, event); + + /* 获得控件所属的DC */ + dc = rtgui_dc_begin_drawing(widget); + if (dc == RT_NULL) /* 如果不能正常获得DC,返回(如果控件或父控件是隐藏状态,DC是获取不成功的) */ + return; + + /* 获得demo container允许绘图的区域 */ + demo_view_get_logic_rect(RTGUI_CONTAINER(widget), &rect); + + /* 擦除所有 */ + RTGUI_WIDGET_BACKGROUND(widget) = default_background; + rtgui_dc_fill_rect(dc, &rect); + + /* 显示提示 */ + rtgui_dc_draw_text(dc, "按任意键开始/停止测试...", &rect); + + /* 绘图完成 */ + rtgui_dc_end_drawing(dc); +} + +rt_bool_t benchmark_event_handler(struct rtgui_object *object, rtgui_event_t *event) +{ + if (event->type == RTGUI_EVENT_PAINT) + { + _draw_default(object, event); + } + else if (event->type == RTGUI_EVENT_KBD) + { + struct rtgui_event_kbd *kbd = (struct rtgui_event_kbd*)event; + + if (RTGUI_KBD_IS_UP(kbd)) + { + if (running) + { + /* stop */ + rtgui_application_set_onidle(RT_NULL); + _draw_default(object, event); + } + else + { + /* run */ + rtgui_application_set_onidle(_onidle); + } + + running = !running; + } + return RT_TRUE; + } + else + { + /* 调用默认的事件处理函数 */ + return rtgui_container_event_handler(object, event); + } + + return RT_FALSE; +} + +rtgui_container_t *demo_view_benchmark(void) +{ + srand(100); + container = demo_view("绘图测试"); + rtgui_object_set_event_handler(RTGUI_OBJECT(container), benchmark_event_handler); + + return container; +} diff --git a/examples/gui/demo_view_box.c b/examples/gui/demo_view_box.c index eb7043e52a..41f1338c44 100644 --- a/examples/gui/demo_view_box.c +++ b/examples/gui/demo_view_box.c @@ -1,15 +1,15 @@ -#include "demo_view.h" -#ifndef RTGUI_USING_SMALL_SIZE -#include - -rtgui_view_t* demo_view_box(rtgui_workbench_t* workbench) -{ - rtgui_rect_t rect; - rtgui_view_t* view; - - view = demo_view(workbench, "Box View"); - demo_view_get_rect(view, &rect); - - return view; -} -#endif +#include "demo_view.h" +#ifndef RTGUI_USING_SMALL_SIZE +#include + +rtgui_container_t* demo_view_box(rtgui_workbench_t* workbench) +{ + rtgui_rect_t rect; + rtgui_container_t* view; + + view = demo_view(workbench, "Box View"); + demo_view_get_rect(view, &rect); + + return view; +} +#endif diff --git a/examples/gui/demo_view_buffer_animation.c b/examples/gui/demo_view_buffer_animation.c index cadc2430e7..d435c787b2 100644 --- a/examples/gui/demo_view_buffer_animation.c +++ b/examples/gui/demo_view_buffer_animation.c @@ -1,124 +1,144 @@ -#include -#include -#include -#include "demo_view.h" - -/* - * 直接在DC上绘图以实现动画效果 - * - * 动画是依赖于定时器驱动的,会上下翻滚显示文字 - * "飞线乱飞" - */ -static rt_int8_t dx = 1, dy = 1; -static rtgui_rect_t text_rect; -static rtgui_timer_t *timer; -static struct rtgui_dc *dc_buffer; -static void timeout(struct rtgui_timer* timer, void* parameter) -{ - struct rtgui_dc* dc; - rtgui_rect_t rect; - rtgui_widget_t *widget; - - /* 控件(view)通过parameter参数传递给定时器 */ - widget = (rtgui_widget_t*)parameter; - - /* 获得控件所属的DC */ - dc = rtgui_dc_begin_drawing(widget); - if (dc == RT_NULL) /* 如果不能正常获得DC,返回(如果控件或父控件是隐藏状态,DC是获取不成功的) */ - return ; - - /* 获得demo view允许绘图的区域,主要用于判断边界 */ - demo_view_get_logic_rect(RTGUI_VIEW(widget), &rect); - rect.y2 -= 5; - - /* 判断是否是第一次绘图 */ - if ((text_rect.x1 == 0) && (text_rect.y1 == 0)) - { - rtgui_rect_moveto(&text_rect, rect.x1, rect.y1); - } - - /* 设置dx和dy */ - if (text_rect.x2 >= rect.x2) dx = -1; - if (text_rect.x1 < rect.x1) dx = 1; - if (text_rect.y2 >= rect.y2) dy = -1; - if (text_rect.y1 < rect.y1) dy = 1; - - /* 移动文本框的位置 */ - text_rect.x1 += dx; text_rect.x2 += dx; - text_rect.y1 += dy; text_rect.y2 += dy; - - /* 绘图 */ - rect = text_rect; - rect.x2 += 2; rect.y2 += 2; - rtgui_dc_blit(dc_buffer, NULL, dc, &rect); - - /* 绘图完成 */ - rtgui_dc_end_drawing(dc); -} - -static rt_bool_t animation_event_handler(rtgui_widget_t* widget, rtgui_event_t *event) -{ - if (event->type == RTGUI_EVENT_PAINT) - { - struct rtgui_dc* dc; - rtgui_rect_t rect; - - /* 因为用的是demo view,上面本身有一部分控件,所以在绘图时先要让demo view先绘图 */ - rtgui_view_event_handler(widget, event); - - /* 获得控件所属的DC */ - dc = rtgui_dc_begin_drawing(widget); - if (dc == RT_NULL) /* 如果不能正常获得DC,返回(如果控件或父控件是隐藏状态,DC是获取不成功的) */ - return RT_FALSE; - - /* 获得demo view允许绘图的区域 */ - demo_view_get_logic_rect(RTGUI_VIEW(widget), &rect); - - /* 绘图 */ - rect = text_rect; - rtgui_rect_inflate(&rect, +1); - rtgui_dc_blit(dc_buffer, NULL, dc, &rect); - - /* 绘图完成 */ - rtgui_dc_end_drawing(dc); - } - else - { - /* 调用默认的事件处理函数 */ - return rtgui_view_event_handler(widget, event); - } - - return RT_FALSE; -} - -rtgui_view_t *demo_view_buffer_animation(rtgui_workbench_t* workbench) -{ - rtgui_view_t *view; - - view = demo_view(workbench, "DC 缓冲区动画"); - if (view != RT_NULL) - rtgui_widget_set_event_handler(RTGUI_WIDGET(view), animation_event_handler); - - rtgui_font_get_metrics(RTGUI_WIDGET_FONT(RTGUI_WIDGET(view)), "缓冲动画", &text_rect); - if (dc_buffer == RT_NULL) - { - rtgui_rect_t rect; - - rect.x1 = 0; rect.x2 = rtgui_rect_width(text_rect) + 2; - rect.y1 = 0; rect.y2 = rtgui_rect_height(text_rect) + 2; - - /* 创建 DC Buffer,长 50,宽 50 */ - dc_buffer = rtgui_dc_buffer_create(rtgui_rect_width(rect), rtgui_rect_height(rect)); - RTGUI_DC_FC(dc_buffer) = RTGUI_WIDGET_BACKGROUND(RTGUI_WIDGET(view)); - rtgui_dc_fill_rect(dc_buffer, &rect); - RTGUI_DC_FC(dc_buffer) = black; - rect.x1 = 1; rect.y1 = 1; - rtgui_dc_draw_text(dc_buffer, "缓冲动画", &rect); - } - - /* 启动定时器以触发动画 */ - timer = rtgui_timer_create(1, RT_TIMER_FLAG_PERIODIC, timeout, (void*)view); - rtgui_timer_start(timer); - - return view; -} +#include +#include +#include +#include "demo_view.h" + +/* + * 直接在DC上绘图以实现动画效果 + * + * 动画是依赖于定时器驱动的,会上下翻滚显示文字 + * "飞线乱飞" + */ +static rt_int8_t dx = 1, dy = 1; +static rtgui_rect_t text_rect; +static rtgui_timer_t *timer; +static struct rtgui_dc *dc_buffer; +static void timeout(struct rtgui_timer* timer, void* parameter) +{ + struct rtgui_dc* dc; + rtgui_rect_t rect; + rtgui_widget_t *widget; + + /* 控件(view)通过parameter参数传递给定时器 */ + widget = (rtgui_widget_t*)parameter; + + /* 获得控件所属的DC */ + dc = rtgui_dc_begin_drawing(widget); + if (dc == RT_NULL) /* 如果不能正常获得DC,返回(如果控件或父控件是隐藏状态,DC是获取不成功的) */ + return ; + + /* 获得demo view允许绘图的区域,主要用于判断边界 */ + demo_view_get_logic_rect(RTGUI_CONTAINER(widget), &rect); + rect.y2 -= 5; + + /* 判断是否是第一次绘图 */ + if ((text_rect.x1 == 0) && (text_rect.y1 == 0)) + { + rtgui_rect_moveto(&text_rect, rect.x1, rect.y1); + } + + /* 设置dx和dy */ + if (text_rect.x2 >= rect.x2) dx = -1; + if (text_rect.x1 < rect.x1) dx = 1; + if (text_rect.y2 >= rect.y2) dy = -1; + if (text_rect.y1 < rect.y1) dy = 1; + + /* 移动文本框的位置 */ + text_rect.x1 += dx; text_rect.x2 += dx; + text_rect.y1 += dy; text_rect.y2 += dy; + + /* 绘图 */ + rect = text_rect; + rect.x2 += 2; rect.y2 += 2; + rtgui_dc_blit(dc_buffer, NULL, dc, &rect); + + /* 绘图完成 */ + rtgui_dc_end_drawing(dc); +} + +static rt_bool_t animation_event_handler(struct rtgui_object *object, rtgui_event_t *event) +{ + struct rtgui_widget *widget = RTGUI_WIDGET(object); + + if (event->type == RTGUI_EVENT_PAINT) + { + struct rtgui_dc* dc; + rtgui_rect_t rect; + + /* 因为用的是demo view,上面本身有一部分控件,所以在绘图时先要让demo view先绘图 */ + rtgui_container_event_handler(object, event); + + /* 获得控件所属的DC */ + dc = rtgui_dc_begin_drawing(widget); + if (dc == RT_NULL) /* 如果不能正常获得DC,返回(如果控件或父控件是隐藏状态,DC是获取不成功的) */ + return RT_FALSE; + + /* 获得demo view允许绘图的区域 */ + demo_view_get_logic_rect(RTGUI_CONTAINER(widget), &rect); + + /* 绘图 */ + rect = text_rect; + rtgui_rect_inflate(&rect, +1); + rtgui_dc_blit(dc_buffer, NULL, dc, &rect); + + /* 绘图完成 */ + rtgui_dc_end_drawing(dc); + } + else + { + /* 调用默认的事件处理函数 */ + return rtgui_container_event_handler(object, event); + } + + return RT_FALSE; +} + +static rt_bool_t animation_on_show(struct rtgui_object *object, struct rtgui_event *event) +{ + rt_kprintf("buffer animation on show\n"); + rtgui_timer_start(timer); + + return RT_TRUE; +} + +static rt_bool_t animation_on_hide(struct rtgui_object *object, struct rtgui_event *event) +{ + rt_kprintf("buffer animation on hide\n"); + rtgui_timer_stop(timer); + + return RT_TRUE; +} + +struct rtgui_container *demo_view_buffer_animation(void) +{ + struct rtgui_container *container; + + container= demo_view("DC 缓冲区动画"); + if (container!= RT_NULL) + rtgui_object_set_event_handler(RTGUI_OBJECT(container), animation_event_handler); + + rtgui_font_get_metrics(RTGUI_WIDGET_FONT(RTGUI_WIDGET(container)), "缓冲动画", &text_rect); + if (dc_buffer == RT_NULL) + { + rtgui_rect_t rect; + + rect.x1 = 0; rect.x2 = rtgui_rect_width(text_rect) + 2; + rect.y1 = 0; rect.y2 = rtgui_rect_height(text_rect) + 2; + + /* 创建 DC Buffer,长 50,宽 50 */ + dc_buffer = rtgui_dc_buffer_create(rtgui_rect_width(rect), rtgui_rect_height(rect)); + RTGUI_DC_FC(dc_buffer) = RTGUI_WIDGET_BACKGROUND(RTGUI_WIDGET(container)); + rtgui_dc_fill_rect(dc_buffer, &rect); + RTGUI_DC_FC(dc_buffer) = black; + rect.x1 = 1; rect.y1 = 1; + rtgui_dc_draw_text(dc_buffer, "缓冲动画", &rect); + } + + /* 启动定时器以触发动画 */ + timer = rtgui_timer_create(1, RT_TIMER_FLAG_PERIODIC, timeout, (void*)container); + + rtgui_widget_set_onshow(RTGUI_WIDGET(container), animation_on_show); + rtgui_widget_set_onhide(RTGUI_WIDGET(container), animation_on_hide); + + return container; +} diff --git a/examples/gui/demo_view_button.c b/examples/gui/demo_view_button.c index d54a7bc065..70465384b0 100644 --- a/examples/gui/demo_view_button.c +++ b/examples/gui/demo_view_button.c @@ -1,84 +1,80 @@ -/* - * 绋嬪簭娓呭崟锛歜utton鎺т欢婕旂ず - * - * 杩欎釜渚嬪瓙浼氬湪鍒涘缓鍑虹殑view涓婃坊鍔犲嚑涓笉鍚岀被鍨嬬殑button鎺т欢 - */ - -#include "demo_view.h" -#include - -/* 鍒涘缓鐢ㄤ簬婕旂ずbutton鎺т欢鐨勮鍥� */ -rtgui_view_t* demo_view_button(rtgui_workbench_t* workbench) -{ - rtgui_rect_t rect; - rtgui_view_t* view; - rtgui_button_t* button; - rtgui_font_t* font; - - /* 鍏堝垱寤轰竴涓紨绀虹敤鐨勮鍥� */ - view = demo_view(workbench, "Button View"); - - /* 鑾峰緱瑙嗗浘鐨勪綅缃俊鎭� */ - demo_view_get_rect(view, &rect); - rect.x1 += 5; - rect.x2 = rect.x1 + 100; - rect.y1 += 5; - rect.y2 = rect.y1 + 20; - /* 鍒涘缓涓�涓猙utton鎺т欢 */ - button = rtgui_button_create("Red"); - /* 璁剧疆label鎺т欢鐨勫墠鏅壊涓虹孩鑹� */ - RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(button)) = red; - /* 璁剧疆button鐨勪綅缃� */ - rtgui_widget_set_rect(RTGUI_WIDGET(button), &rect); - /* view鏄竴涓猚ontainer鎺т欢锛岃皟鐢╝dd_child鏂规硶娣诲姞杩欎釜button鎺т欢 */ - rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(button)); - - /* 鑾峰緱瑙嗗浘鐨勪綅缃俊鎭� */ - demo_view_get_rect(view, &rect); - rect.x1 += 5; - rect.x2 = rect.x1 + 100; - rect.y1 += 5 + 25; - rect.y2 = rect.y1 + 20; - /* 鍒涘缓涓�涓猙utton鎺т欢 */ - button = rtgui_button_create("Blue"); - /* 璁剧疆label鎺т欢鐨勫墠鏅壊涓鸿摑鑹� */ - RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(button)) = blue; - /* 璁剧疆button鐨勪綅缃� */ - rtgui_widget_set_rect(RTGUI_WIDGET(button), &rect); - /* view鏄竴涓猚ontainer鎺т欢锛岃皟鐢╝dd_child鏂规硶娣诲姞杩欎釜button鎺т欢 */ - rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(button)); - - /* 鑾峰緱瑙嗗浘鐨勪綅缃俊鎭� */ - demo_view_get_rect(view, &rect); - rect.x1 += 5; - rect.x2 = rect.x1 + 100; - rect.y1 += 5 + 25 + 25; - rect.y2 = rect.y1 + 20; - /* 鍒涘缓涓�涓猙utton鎺т欢 */ - button = rtgui_button_create("12 font"); - /* 璁剧疆瀛椾綋涓�12鐐归樀鐨刟sc瀛椾綋 */ - font = rtgui_font_refer("asc", 12); - RTGUI_WIDGET_FONT(RTGUI_WIDGET(button)) = font; - /* 璁剧疆button鐨勪綅缃� */ - rtgui_widget_set_rect(RTGUI_WIDGET(button), &rect); - /* view鏄竴涓猚ontainer鎺т欢锛岃皟鐢╝dd_child鏂规硶娣诲姞杩欎釜button鎺т欢 */ - rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(button)); - - /* 鑾峰緱瑙嗗浘鐨勪綅缃俊鎭� */ - demo_view_get_rect(view, &rect); - rect.x1 += 5; - rect.x2 = rect.x1 + 100; - rect.y1 += 5 + 25 + 25 + 25; - rect.y2 = rect.y1 + 20; - /* 鍒涘缓涓�涓猙utton鎺т欢 */ - button = rtgui_button_create("16 font"); - /* 璁剧疆瀛椾綋涓�16鐐归樀鐨刟sc瀛椾綋 */ - font = rtgui_font_refer("asc", 16); - RTGUI_WIDGET_FONT(RTGUI_WIDGET(button)) = font; - /* 璁剧疆button鐨勪綅缃� */ - rtgui_widget_set_rect(RTGUI_WIDGET(button), &rect); - /* view鏄竴涓猚ontainer鎺т欢锛岃皟鐢╝dd_child鏂规硶娣诲姞杩欎釜button鎺т欢 */ - rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(button)); - - return view; -} +/* + * 绋嬪簭娓呭崟锛歜utton鎺т欢婕旂ず + * + * 杩欎釜渚嬪瓙浼氬湪鍒涘缓鍑虹殑container涓婃坊鍔犲嚑涓笉鍚岀被鍨嬬殑button鎺т欢 + */ + +#include "demo_view.h" +#include + +/* 鍒涘缓鐢ㄤ簬婕旂ずbutton鎺т欢鐨勮鍥� */ +rtgui_container_t* demo_view_button(void) +{ + rtgui_rect_t rect; + rtgui_container_t* container; + rtgui_button_t* button; + rtgui_font_t* font; + + /* 鍏堝垱寤轰竴涓紨绀虹敤鐨勮鍥� */ + container = demo_view("Button View"); + + /* 鑾峰緱瑙嗗浘鐨勪綅缃俊鎭� */ + demo_view_get_rect(container, &rect); + rect.x1 += 5; + rect.x2 = rect.x1 + 100; + rect.y1 += 5; + rect.y2 = rect.y1 + 20; + /* 鍒涘缓涓�涓猙utton鎺т欢 */ + button = rtgui_button_create("Red"); + /* 璁剧疆label鎺т欢鐨勫墠鏅壊涓虹孩鑹� */ + RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(button)) = red; + /* 璁剧疆button鐨勪綅缃� */ + rtgui_widget_set_rect(RTGUI_WIDGET(button), &rect); + rtgui_container_add_child(container, RTGUI_WIDGET(button)); + + /* 鑾峰緱瑙嗗浘鐨勪綅缃俊鎭� */ + demo_view_get_rect(container, &rect); + rect.x1 += 5; + rect.x2 = rect.x1 + 100; + rect.y1 += 5 + 25; + rect.y2 = rect.y1 + 20; + /* 鍒涘缓涓�涓猙utton鎺т欢 */ + button = rtgui_button_create("Blue"); + /* 璁剧疆label鎺т欢鐨勫墠鏅壊涓鸿摑鑹� */ + RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(button)) = blue; + /* 璁剧疆button鐨勪綅缃� */ + rtgui_widget_set_rect(RTGUI_WIDGET(button), &rect); + rtgui_container_add_child(container, RTGUI_WIDGET(button)); + + /* 鑾峰緱瑙嗗浘鐨勪綅缃俊鎭� */ + demo_view_get_rect(container, &rect); + rect.x1 += 5; + rect.x2 = rect.x1 + 100; + rect.y1 += 5 + 25 + 25; + rect.y2 = rect.y1 + 20; + /* 鍒涘缓涓�涓猙utton鎺т欢 */ + button = rtgui_button_create("12 font"); + /* 璁剧疆瀛椾綋涓�12鐐归樀鐨刟sc瀛椾綋 */ + font = rtgui_font_refer("asc", 12); + RTGUI_WIDGET_FONT(RTGUI_WIDGET(button)) = font; + /* 璁剧疆button鐨勪綅缃� */ + rtgui_widget_set_rect(RTGUI_WIDGET(button), &rect); + rtgui_container_add_child(container, RTGUI_WIDGET(button)); + + /* 鑾峰緱瑙嗗浘鐨勪綅缃俊鎭� */ + demo_view_get_rect(container, &rect); + rect.x1 += 5; + rect.x2 = rect.x1 + 100; + rect.y1 += 5 + 25 + 25 + 25; + rect.y2 = rect.y1 + 20; + /* 鍒涘缓涓�涓猙utton鎺т欢 */ + button = rtgui_button_create("16 font"); + /* 璁剧疆瀛椾綋涓�16鐐归樀鐨刟sc瀛椾綋 */ + font = rtgui_font_refer("asc", 16); + RTGUI_WIDGET_FONT(RTGUI_WIDGET(button)) = font; + /* 璁剧疆button鐨勪綅缃� */ + rtgui_widget_set_rect(RTGUI_WIDGET(button), &rect); + rtgui_container_add_child(container, RTGUI_WIDGET(button)); + + return container; +} diff --git a/examples/gui/demo_view_checkbox.c b/examples/gui/demo_view_checkbox.c index f5e4ddc85e..fa67cf6f4c 100644 --- a/examples/gui/demo_view_checkbox.c +++ b/examples/gui/demo_view_checkbox.c @@ -1,84 +1,80 @@ -/* - * 绋嬪簭娓呭崟锛歝heckbox鎺т欢婕旂ず - * - * 杩欎釜渚嬪瓙浼氬湪鍒涘缓鍑虹殑view涓婃坊鍔犲嚑涓猚heckbox鎺т欢 - */ - -#include "demo_view.h" -#include - -/* 鍒涘缓鐢ㄤ簬婕旂ずcheckbox鎺т欢鐨勮鍥� */ -rtgui_view_t* demo_view_checkbox(rtgui_workbench_t* workbench) -{ - rtgui_rect_t rect; - rtgui_view_t* view; - rtgui_checkbox_t* checkbox; - rtgui_font_t* font; - - /* 鍏堝垱寤轰竴涓紨绀虹敤鐨勮鍥� */ - view = demo_view(workbench, "CheckBox View"); - - /* 鑾峰緱瑙嗗浘鐨勪綅缃俊鎭� */ - demo_view_get_rect(view, &rect); - rect.x1 += 5; - rect.x2 = rect.x1 + 100; - rect.y1 += 5; - rect.y2 = rect.y1 + 20; - /* 鍒涘缓涓�涓猚heckbox鎺т欢 */ - checkbox = rtgui_checkbox_create("Red",RT_TRUE); - /* 璁剧疆鍓嶆櫙鑹蹭负绾㈣壊 */ - RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(checkbox)) = red; - /* 璁剧疆checkbox鐨勪綅缃� */ - rtgui_widget_set_rect(RTGUI_WIDGET(checkbox), &rect); - /* view鏄竴涓猚ontainer鎺т欢锛岃皟鐢╝dd_child鏂规硶娣诲姞杩欎釜checkbox鎺т欢 */ - rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(checkbox)); - - /* 鑾峰緱瑙嗗浘鐨勪綅缃俊鎭� */ - demo_view_get_rect(view, &rect); - rect.x1 += 5; - rect.x2 = rect.x1 + 100; - rect.y1 += 5 + 25; - rect.y2 = rect.y1 + 20; - /* 鍒涘缓涓�涓猚heckbox鎺т欢 */ - checkbox = rtgui_checkbox_create("Blue",RT_TRUE); - /* 璁剧疆鍓嶆櫙鑹蹭负钃濊壊 */ - RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(checkbox)) = blue; - /* 璁剧疆checkbox鐨勪綅缃� */ - rtgui_widget_set_rect(RTGUI_WIDGET(checkbox), &rect); - /* view鏄竴涓猚ontainer鎺т欢锛岃皟鐢╝dd_child鏂规硶娣诲姞杩欎釜checkbox鎺т欢 */ - rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(checkbox)); - - /* 鑾峰緱瑙嗗浘鐨勪綅缃俊鎭� */ - demo_view_get_rect(view, &rect); - rect.x1 += 5; - rect.x2 = rect.x1 + 100; - rect.y1 += 5 + 25 + 25; - rect.y2 = rect.y1 + 20; - /* 鍒涘缓涓�涓猚heckbox鎺т欢 */ - checkbox = rtgui_checkbox_create("12 font",RT_TRUE); - /* 璁剧疆瀛椾綋涓�12鐐归樀 */ - font = rtgui_font_refer("asc", 12); - RTGUI_WIDGET_FONT(RTGUI_WIDGET(checkbox)) = font; - /* 璁剧疆checkbox鐨勪綅缃� */ - rtgui_widget_set_rect(RTGUI_WIDGET(checkbox), &rect); - /* view鏄竴涓猚ontainer鎺т欢锛岃皟鐢╝dd_child鏂规硶娣诲姞杩欎釜checkbox鎺т欢 */ - rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(checkbox)); - - /* 鑾峰緱瑙嗗浘鐨勪綅缃俊鎭� */ - demo_view_get_rect(view, &rect); - rect.x1 += 5; - rect.x2 = rect.x1 + 100; - rect.y1 += 5 + 25 + 25 + 25; - rect.y2 = rect.y1 + 20; - /* 鍒涘缓涓�涓猚heckbox鎺т欢 */ - checkbox = rtgui_checkbox_create("16 font",RT_TRUE); - /* 璁剧疆瀛椾綋涓�16鐐归樀 */ - font = rtgui_font_refer("asc", 16); - RTGUI_WIDGET_FONT(RTGUI_WIDGET(checkbox)) = font; - /* 璁剧疆checkbox鐨勪綅缃� */ - rtgui_widget_set_rect(RTGUI_WIDGET(checkbox), &rect); - /* view鏄竴涓猚ontainer鎺т欢锛岃皟鐢╝dd_child鏂规硶娣诲姞杩欎釜checkbox鎺т欢 */ - rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(checkbox)); - - return view; -} +/* + * 绋嬪簭娓呭崟锛歝heckbox鎺т欢婕旂ず + * + * 杩欎釜渚嬪瓙浼氬湪鍒涘缓鍑虹殑container涓婃坊鍔犲嚑涓猚heckbox鎺т欢 + */ + +#include "demo_view.h" +#include + +/* 鍒涘缓鐢ㄤ簬婕旂ずcheckbox鎺т欢鐨勮鍥� */ +rtgui_container_t* demo_view_checkbox(void) +{ + rtgui_rect_t rect; + rtgui_container_t* container; + rtgui_checkbox_t* checkbox; + rtgui_font_t* font; + + /* 鍏堝垱寤轰竴涓紨绀虹敤鐨勮鍥� */ + container = demo_view("CheckBox View"); + + /* 鑾峰緱瑙嗗浘鐨勪綅缃俊鎭� */ + demo_view_get_rect(container, &rect); + rect.x1 += 5; + rect.x2 = rect.x1 + 100; + rect.y1 += 5; + rect.y2 = rect.y1 + 20; + /* 鍒涘缓涓�涓猚heckbox鎺т欢 */ + checkbox = rtgui_checkbox_create("Red",RT_TRUE); + /* 璁剧疆鍓嶆櫙鑹蹭负绾㈣壊 */ + RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(checkbox)) = red; + /* 璁剧疆checkbox鐨勪綅缃� */ + rtgui_widget_set_rect(RTGUI_WIDGET(checkbox), &rect); + rtgui_container_add_child(container, RTGUI_WIDGET(checkbox)); + + /* 鑾峰緱瑙嗗浘鐨勪綅缃俊鎭� */ + demo_view_get_rect(container, &rect); + rect.x1 += 5; + rect.x2 = rect.x1 + 100; + rect.y1 += 5 + 25; + rect.y2 = rect.y1 + 20; + /* 鍒涘缓涓�涓猚heckbox鎺т欢 */ + checkbox = rtgui_checkbox_create("Blue",RT_TRUE); + /* 璁剧疆鍓嶆櫙鑹蹭负钃濊壊 */ + RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(checkbox)) = blue; + /* 璁剧疆checkbox鐨勪綅缃� */ + rtgui_widget_set_rect(RTGUI_WIDGET(checkbox), &rect); + rtgui_container_add_child(container, RTGUI_WIDGET(checkbox)); + + /* 鑾峰緱瑙嗗浘鐨勪綅缃俊鎭� */ + demo_view_get_rect(container, &rect); + rect.x1 += 5; + rect.x2 = rect.x1 + 100; + rect.y1 += 5 + 25 + 25; + rect.y2 = rect.y1 + 20; + /* 鍒涘缓涓�涓猚heckbox鎺т欢 */ + checkbox = rtgui_checkbox_create("12 font",RT_TRUE); + /* 璁剧疆瀛椾綋涓�12鐐归樀 */ + font = rtgui_font_refer("asc", 12); + RTGUI_WIDGET_FONT(RTGUI_WIDGET(checkbox)) = font; + /* 璁剧疆checkbox鐨勪綅缃� */ + rtgui_widget_set_rect(RTGUI_WIDGET(checkbox), &rect); + rtgui_container_add_child(container, RTGUI_WIDGET(checkbox)); + + /* 鑾峰緱瑙嗗浘鐨勪綅缃俊鎭� */ + demo_view_get_rect(container, &rect); + rect.x1 += 5; + rect.x2 = rect.x1 + 100; + rect.y1 += 5 + 25 + 25 + 25; + rect.y2 = rect.y1 + 20; + /* 鍒涘缓涓�涓猚heckbox鎺т欢 */ + checkbox = rtgui_checkbox_create("16 font",RT_TRUE); + /* 璁剧疆瀛椾綋涓�16鐐归樀 */ + font = rtgui_font_refer("asc", 16); + RTGUI_WIDGET_FONT(RTGUI_WIDGET(checkbox)) = font; + /* 璁剧疆checkbox鐨勪綅缃� */ + rtgui_widget_set_rect(RTGUI_WIDGET(checkbox), &rect); + rtgui_container_add_child(container, RTGUI_WIDGET(checkbox)); + + return container; +} diff --git a/examples/gui/demo_view_combobox.c b/examples/gui/demo_view_combobox.c index a71a95069c..36fb4d1375 100644 --- a/examples/gui/demo_view_combobox.c +++ b/examples/gui/demo_view_combobox.c @@ -1,40 +1,40 @@ -/* - * 绋嬪簭娓呭崟锛歭abel鎺т欢婕旂ず - * - * 杩欎釜渚嬪瓙浼氬湪鍒涘缓鍑虹殑view涓婃坊鍔犲嚑涓笉鍚岀被鍨嬬殑label鎺т欢 - */ -#include "demo_view.h" -#include - -struct rtgui_listbox_item items[] = -{ - {"item 1", RT_NULL}, - {"item 2", RT_NULL}, - {"item 3", RT_NULL}, - {"item 4", RT_NULL}, - {"item 5", RT_NULL}, -}; - -/* 鍒涘缓鐢ㄤ簬婕旂ずcombobox鎺т欢鐨勮鍥� */ -rtgui_view_t* demo_view_combobox(rtgui_workbench_t* workbench) -{ - rtgui_rect_t rect; - rtgui_view_t* view; - rtgui_combobox_t* box; - - /* 鍏堝垱寤轰竴涓紨绀虹敤鐨勮鍥� */ - view = demo_view(workbench, "ComboBox View"); - - /* 鑾峰緱瑙嗗浘鐨勪綅缃俊鎭� */ - demo_view_get_rect(view, &rect); - rect.x1 += 5; - rect.x2 -= 5; - rect.y1 += 5; - rect.y2 = rect.y1 + 20; - /* 鍒涘缓涓�涓猯abel鎺т欢 */ - box = rtgui_combobox_create(items, sizeof(items)/sizeof(items[0]), &rect); - /* view鏄竴涓猚ontainer鎺т欢锛岃皟鐢╝dd_child鏂规硶娣诲姞杩欎釜box鎺т欢 */ - rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(box)); - - return view; -} +/* + * 绋嬪簭娓呭崟锛歭abel鎺т欢婕旂ず + * + * 杩欎釜渚嬪瓙浼氬湪鍒涘缓鍑虹殑container涓婃坊鍔犲嚑涓笉鍚岀被鍨嬬殑label鎺т欢 + */ +#include "demo_view.h" +#include + +struct rtgui_listbox_item items[] = +{ + {"item 1", RT_NULL}, + {"item 2", RT_NULL}, + {"item 3", RT_NULL}, + {"item 4", RT_NULL}, + {"item 5", RT_NULL}, +}; + +/* 鍒涘缓鐢ㄤ簬婕旂ずcombobox鎺т欢鐨勮鍥� */ +rtgui_container_t* demo_view_combobox(void) +{ + rtgui_rect_t rect; + rtgui_container_t* container; + rtgui_combobox_t* box; + + /* 鍏堝垱寤轰竴涓紨绀虹敤鐨勮鍥� */ + container = demo_view("ComboBox View"); + + /* 鑾峰緱瑙嗗浘鐨勪綅缃俊鎭� */ + demo_view_get_rect(container, &rect); + rect.x1 += 5; + rect.x2 -= 5; + rect.y1 += 5; + rect.y2 = rect.y1 + 20; + /* 鍒涘缓涓�涓猯abel鎺т欢 */ + box = rtgui_combobox_create(items, sizeof(items)/sizeof(items[0]), &rect); + /* container鏄竴涓猚ontainer鎺т欢锛岃皟鐢╝dd_child鏂规硶娣诲姞杩欎釜box鎺т欢 */ + rtgui_container_add_child(container, RTGUI_WIDGET(box)); + + return container; +} diff --git a/examples/gui/demo_view_dc.c b/examples/gui/demo_view_dc.c index 2ddfe4cd5b..f37d426e7b 100644 --- a/examples/gui/demo_view_dc.c +++ b/examples/gui/demo_view_dc.c @@ -1,190 +1,192 @@ -/* - * 程序清单:DC操作演示 - * - * 这个例子会在创建出的view上进行DC操作的演示 - */ - -#include "demo_view.h" -#include -#include -#include -#include -#include - -#include "play.hdh" -#include "stop.hdh" -struct rtgui_image_hdcmm play_image = RTGUI_IMAGE_HDC_DEF(2, 0x1c, 0x16, play_hdh); -struct rtgui_image_hdcmm stop_image = RTGUI_IMAGE_HDC_DEF(2, 0x1c, 0x16, stop_hdh); - -/* - * view的事件处理函数 - */ -rt_bool_t dc_event_handler(rtgui_widget_t* widget, rtgui_event_t *event) -{ - /* 仅对PAINT事件进行处理 */ - if (event->type == RTGUI_EVENT_PAINT) - { - struct rtgui_dc* dc; - rtgui_rect_t rect; - // const int vx[] = {20, 50, 60, 45, 60, 20}; - // const int vy[] = {150, 50, 90, 60, 45, 50}; - - /* - * 因为用的是demo view,上面本身有一部分控件,所以在绘图时先要让demo view - * 先绘图 - */ - rtgui_view_event_handler(widget, event); - - /************************************************************************/ - /* 下面的是DC的操作 */ - /************************************************************************/ - - /* 获得控件所属的DC */ - dc = rtgui_dc_begin_drawing(widget); - /* 如果不能正常获得DC,返回(如果控件或父控件是隐藏状态,DC是获取不成功的) */ - if (dc == RT_NULL) - return RT_FALSE; - - /* 获得demo view允许绘图的区域 */ - demo_view_get_logic_rect(RTGUI_VIEW(widget), &rect); - - RTGUI_DC_TEXTALIGN(dc) = RTGUI_ALIGN_BOTTOM | RTGUI_ALIGN_CENTER_HORIZONTAL; - /* 显示GUI的版本信息 */ -#ifdef RTGUI_USING_SMALL_SIZE - rtgui_dc_draw_text(dc, "RT-Thread/GUI小型版本", &rect); -#else - rtgui_dc_draw_text(dc, "RT-Thread/GUI标准版本", &rect); -#endif - - { - rtgui_rect_t rect = {0, 0, 0x1c, 0x16}; - rtgui_rect_moveto(&rect, 80, 80); - rtgui_image_blit((rtgui_image_t*)&play_image, dc, &rect); - - rect.x1 = 0; rect.y1 = 0; - rect.x2 = 0x1c; rect.y2 = 0x16; - rtgui_rect_moveto(&rect, 130, 80); - rtgui_image_blit((rtgui_image_t*)&stop_image, dc, &rect); - } - /* 绘制一个圆形 */ - RTGUI_DC_FC(dc) = red; - rtgui_dc_draw_circle(dc, rect.x1 + 10, rect.y1 + 10, 10); - - /* 填充一个圆形 */ - RTGUI_DC_FC(dc) = green; - rtgui_dc_fill_circle(dc, rect.x1 + 30, rect.y1 + 10, 10); -#if 0 - /* 画一个圆角矩形 */ - rect.x1 = 150; - rect.y1 = 180; - rect.x2 = 210; - rect.y2 = 260; - RTGUI_DC_FC(dc) = RTGUI_RGB(25, 70, 150); - rtgui_dc_draw_round_rect(dc, &rect, 10); - - rect.x1 = 160; - rect.y1 = 190; - rect.x2 = 200; - rect.y2 = 250; - RTGUI_DC_FC(dc) = RTGUI_RGB(170, 7, 80); - rtgui_dc_fill_round_rect(dc, &rect, 7); - - /* 画一个圆弧 */ - RTGUI_DC_FC(dc) = RTGUI_RGB(250, 120, 120); - rtgui_dc_draw_arc(dc, rect.x1 + 120, rect.y1 + 60, 30, 0, 120); - - /* 画一个扇形圆环 */ - RTGUI_DC_FC(dc) = RTGUI_RGB(150, 23, 100); - rtgui_dc_draw_annulus(dc, 180, 170, 30, 50, 210, 330); - - /* 多边形 */ - RTGUI_DC_FC(dc) = blue; - rtgui_dc_draw_polygon(dc, vx, vy, 6); - -#endif - RTGUI_DC_FC(dc) = blue; - - /* 绘制不同的边框 */ - { - rtgui_rect_t rect = {0, 0, 16, 16}; - rtgui_rect_moveto(&rect, 30, 120); - - rtgui_dc_draw_border(dc, &rect, RTGUI_BORDER_RAISE); - rect.x1 += 20; - rect.x2 += 20 + 50; - rtgui_dc_draw_text(dc, "raise", &rect); - rect.x1 -= 20; - rect.x2 -= 20 + 50; - rect.y1 += 20; - rect.y2 += 20; - - rtgui_dc_draw_border(dc, &rect, RTGUI_BORDER_SIMPLE); - rect.x1 += 20; - rect.x2 += 20 + 50; - rtgui_dc_draw_text(dc, "simple", &rect); - rect.x1 -= 20; - rect.x2 -= 20 + 50; - rect.y1 += 20; - rect.y2 += 20; - - rtgui_dc_draw_border(dc, &rect, RTGUI_BORDER_SUNKEN); - rect.x1 += 20; - rect.x2 += 20 + 50; - rtgui_dc_draw_text(dc, "sunken", &rect); - rect.x1 -= 20; - rect.x2 -= 20 + 50; - rect.y1 += 20; - rect.y2 += 20; - - rtgui_dc_draw_border(dc, &rect, RTGUI_BORDER_BOX); - rect.x1 += 20; - rect.x2 += 20 + 50; - rtgui_dc_draw_text(dc, "box", &rect); - rect.x1 -= 20; - rect.x2 -= 20 + 50; - rect.y1 += 20; - rect.y2 += 20; - - rtgui_dc_draw_border(dc, &rect, RTGUI_BORDER_STATIC); - rect.x1 += 20; - rect.x2 += 20 + 50; - rtgui_dc_draw_text(dc, "static", &rect); - rect.x1 -= 20; - rect.x2 -= 20 + 50; - rect.y1 += 20; - rect.y2 += 20; - - rtgui_dc_draw_border(dc, &rect, RTGUI_BORDER_EXTRA); - rect.x1 += 20; - rect.x2 += 20 + 50; - rtgui_dc_draw_text(dc, "extera", &rect); - rect.x1 -= 20; - rect.x2 -= 20 + 50; - rect.y1 += 20; - rect.y2 += 20; - } - - /* 绘图完成 */ - rtgui_dc_end_drawing(dc); - } - else - { - /* 其他事件,调用默认的事件处理函数 */ - return rtgui_view_event_handler(widget, event); - } - - return RT_FALSE; -} - -/* 创建用于DC操作演示用的视图 */ -rtgui_view_t *demo_view_dc(rtgui_workbench_t* workbench) -{ - rtgui_view_t *view; - - view = demo_view(workbench, "DC Demo"); - if (view != RT_NULL) - /* 设置成自己的事件处理函数 */ - rtgui_widget_set_event_handler(RTGUI_WIDGET(view), dc_event_handler); - - return view; -} +/* + * 程序清单:DC操作演示 + * + * 这个例子会在创建出的view上进行DC操作的演示 + */ + +#include "demo_view.h" +#include +#include +#include +#include +#include + +#include "play.hdh" +#include "stop.hdh" +struct rtgui_image_hdcmm play_image = RTGUI_IMAGE_HDC_DEF(2, 0x1c, 0x16, play_hdh); +struct rtgui_image_hdcmm stop_image = RTGUI_IMAGE_HDC_DEF(2, 0x1c, 0x16, stop_hdh); + +/* + * view的事件处理函数 + */ +rt_bool_t dc_event_handler(struct rtgui_object* object, rtgui_event_t *event) +{ + struct rtgui_widget *widget = RTGUI_WIDGET(object); + + /* 仅对PAINT事件进行处理 */ + if (event->type == RTGUI_EVENT_PAINT) + { + struct rtgui_dc* dc; + rtgui_rect_t rect; + const int vx[] = {20, 50, 60, 45, 60, 20}; + const int vy[] = {150, 50, 90, 60, 45, 50}; + + /* + * 因为用的是demo view,上面本身有一部分控件,所以在绘图时先要让demo view + * 先绘图 + */ + rtgui_container_event_handler(RTGUI_OBJECT(widget), event); + + /************************************************************************/ + /* 下面的是DC的操作 */ + /************************************************************************/ + + /* 获得控件所属的DC */ + dc = rtgui_dc_begin_drawing(widget); + /* 如果不能正常获得DC,返回(如果控件或父控件是隐藏状态,DC是获取不成功的) */ + if (dc == RT_NULL) + return RT_FALSE; + + /* 获得demo view允许绘图的区域 */ + demo_view_get_logic_rect(RTGUI_CONTAINER(widget), &rect); + + RTGUI_DC_TEXTALIGN(dc) = RTGUI_ALIGN_BOTTOM | RTGUI_ALIGN_CENTER_HORIZONTAL; + /* 显示GUI的版本信息 */ +#ifdef RTGUI_USING_SMALL_SIZE + rtgui_dc_draw_text(dc, "RT-Thread/GUI小型版本", &rect); +#else + rtgui_dc_draw_text(dc, "RT-Thread/GUI标准版本", &rect); +#endif + + { + rtgui_rect_t rect = {0, 0, 0x1c, 0x16}; + rtgui_rect_moveto(&rect, 80, 80); + rtgui_image_blit((rtgui_image_t*)&play_image, dc, &rect); + + rect.x1 = 0; rect.y1 = 0; + rect.x2 = 0x1c; rect.y2 = 0x16; + rtgui_rect_moveto(&rect, 130, 80); + rtgui_image_blit((rtgui_image_t*)&stop_image, dc, &rect); + } + /* 绘制一个圆形 */ + RTGUI_DC_FC(dc) = red; + rtgui_dc_draw_circle(dc, rect.x1 + 10, rect.y1 + 10, 10); + + /* 填充一个圆形 */ + RTGUI_DC_FC(dc) = green; + rtgui_dc_fill_circle(dc, rect.x1 + 30, rect.y1 + 10, 10); +#if 0 + /* 画一个圆角矩形 */ + rect.x1 = 150; + rect.y1 = 180; + rect.x2 = 210; + rect.y2 = 260; + RTGUI_DC_FC(dc) = RTGUI_RGB(25, 70, 150); + rtgui_dc_draw_round_rect(dc, &rect, 10); + + rect.x1 = 160; + rect.y1 = 190; + rect.x2 = 200; + rect.y2 = 250; + RTGUI_DC_FC(dc) = RTGUI_RGB(170, 7, 80); + rtgui_dc_fill_round_rect(dc, &rect, 7); + + /* 画一个圆弧 */ + RTGUI_DC_FC(dc) = RTGUI_RGB(250, 120, 120); + rtgui_dc_draw_arc(dc, rect.x1 + 120, rect.y1 + 60, 30, 0, 120); + + /* 画一个扇形圆环 */ + RTGUI_DC_FC(dc) = RTGUI_RGB(150, 23, 100); + rtgui_dc_draw_annulus(dc, 180, 170, 30, 50, 210, 330); + + /* 多边形 */ + RTGUI_DC_FC(dc) = blue; + rtgui_dc_draw_polygon(dc, vx, vy, 6); + +#endif + RTGUI_DC_FC(dc) = blue; + + /* 绘制不同的边框 */ + { + rtgui_rect_t rect = {0, 0, 16, 16}; + rtgui_rect_moveto(&rect, 30, 120); + + rtgui_dc_draw_border(dc, &rect, RTGUI_BORDER_RAISE); + rect.x1 += 20; + rect.x2 += 20 + 50; + rtgui_dc_draw_text(dc, "raise", &rect); + rect.x1 -= 20; + rect.x2 -= 20 + 50; + rect.y1 += 20; + rect.y2 += 20; + + rtgui_dc_draw_border(dc, &rect, RTGUI_BORDER_SIMPLE); + rect.x1 += 20; + rect.x2 += 20 + 50; + rtgui_dc_draw_text(dc, "simple", &rect); + rect.x1 -= 20; + rect.x2 -= 20 + 50; + rect.y1 += 20; + rect.y2 += 20; + + rtgui_dc_draw_border(dc, &rect, RTGUI_BORDER_SUNKEN); + rect.x1 += 20; + rect.x2 += 20 + 50; + rtgui_dc_draw_text(dc, "sunken", &rect); + rect.x1 -= 20; + rect.x2 -= 20 + 50; + rect.y1 += 20; + rect.y2 += 20; + + rtgui_dc_draw_border(dc, &rect, RTGUI_BORDER_BOX); + rect.x1 += 20; + rect.x2 += 20 + 50; + rtgui_dc_draw_text(dc, "box", &rect); + rect.x1 -= 20; + rect.x2 -= 20 + 50; + rect.y1 += 20; + rect.y2 += 20; + + rtgui_dc_draw_border(dc, &rect, RTGUI_BORDER_STATIC); + rect.x1 += 20; + rect.x2 += 20 + 50; + rtgui_dc_draw_text(dc, "static", &rect); + rect.x1 -= 20; + rect.x2 -= 20 + 50; + rect.y1 += 20; + rect.y2 += 20; + + rtgui_dc_draw_border(dc, &rect, RTGUI_BORDER_EXTRA); + rect.x1 += 20; + rect.x2 += 20 + 50; + rtgui_dc_draw_text(dc, "extera", &rect); + rect.x1 -= 20; + rect.x2 -= 20 + 50; + rect.y1 += 20; + rect.y2 += 20; + } + + /* 绘图完成 */ + rtgui_dc_end_drawing(dc); + } + else + { + /* 其他事件,调用默认的事件处理函数 */ + return rtgui_container_event_handler(object, event); + } + + return RT_FALSE; +} + +/* 创建用于DC操作演示用的视图 */ +rtgui_container_t *demo_view_dc(void) +{ + rtgui_container_t *view; + + view = demo_view("DC Demo"); + if (view != RT_NULL) + /* 设置成自己的事件处理函数 */ + rtgui_object_set_event_handler(RTGUI_OBJECT(view), dc_event_handler); + + return view; +} diff --git a/examples/gui/demo_view_dc_buffer.c b/examples/gui/demo_view_dc_buffer.c index 07ce99bcbc..11770dcedc 100644 --- a/examples/gui/demo_view_dc_buffer.c +++ b/examples/gui/demo_view_dc_buffer.c @@ -1,83 +1,84 @@ -/* - * 程序清单:DC Buffer演示 - * - * 这个例子会在创建出的view上进行DC Buffer的演示 - */ - -#include "demo_view.h" -#include -#include -#include -#include - -// static rtgui_image_t *background; -static struct rtgui_dc *dc_buffer; - -/* - * view的事件处理函数 - */ -static rt_bool_t dc_buffer_event_handler(rtgui_widget_t* widget, rtgui_event_t *event) -{ - - /* 仅对PAINT事件进行处理 */ - if (event->type == RTGUI_EVENT_PAINT) - { - struct rtgui_dc* dc; - rtgui_rect_t rect; - - /* - * 因为用的是demo view,上面本身有一部分控件,所以在绘图时先要让demo view - * 先绘图 - */ - rtgui_view_event_handler(widget, event); - - /* 获得控件所属的DC */ - dc = rtgui_dc_begin_drawing(widget); - /* 如果不能正常获得DC,返回(如果控件或父控件是隐藏状态,DC是获取不成功的) */ - if (dc == RT_NULL) - return RT_FALSE; - - /* 获得demo view允许绘图的区域 */ - demo_view_get_logic_rect(RTGUI_VIEW(widget), &rect); - - rect.x1 += 10; - rect.y1 += 10; - rtgui_dc_blit(dc_buffer, NULL, dc, &rect); - - /* 绘图完成 */ - rtgui_dc_end_drawing(dc); - } - else - { - /* 其他事件,调用默认的事件处理函数 */ - return rtgui_view_event_handler(widget, event); - } - - return RT_FALSE; -} - -/* 创建用于DC Buffer操作演示用的视图 */ -rtgui_view_t *demo_view_dc_buffer(rtgui_workbench_t* workbench) -{ - rtgui_view_t *view; - - if (dc_buffer == RT_NULL) - { - rtgui_rect_t rect = {0, 0, 50, 50}; - - /* 创建 DC Buffer,长 50,宽 50 */ - dc_buffer = rtgui_dc_buffer_create(50, 50); - RTGUI_DC_FC(dc_buffer) = blue; - rtgui_dc_fill_rect(dc_buffer, &rect); - - RTGUI_DC_FC(dc_buffer) = red; - rtgui_dc_draw_circle(dc_buffer, 25, 25, 10); - } - - view = demo_view(workbench, "缓冲DC演示"); - if (view != RT_NULL) - /* 设置成自己的事件处理函数 */ - rtgui_widget_set_event_handler(RTGUI_WIDGET(view), dc_buffer_event_handler); - - return view; -} +/* + * 程序清单:DC Buffer演示 + * + * 这个例子会在创建出的view上进行DC Buffer的演示 + */ + +#include "demo_view.h" +#include +#include +#include +#include + +static rtgui_image_t *background; +static struct rtgui_dc *dc_buffer; + +/* + * view的事件处理函数 + */ +static rt_bool_t dc_buffer_event_handler(struct rtgui_object* object, rtgui_event_t *event) +{ + struct rtgui_widget *widget = RTGUI_WIDGET(object); + + /* 仅对PAINT事件进行处理 */ + if (event->type == RTGUI_EVENT_PAINT) + { + struct rtgui_dc* dc; + rtgui_rect_t rect; + + /* + * 因为用的是demo view,上面本身有一部分控件,所以在绘图时先要让demo view + * 先绘图 + */ + rtgui_container_event_handler(object, event); + + /* 获得控件所属的DC */ + dc = rtgui_dc_begin_drawing(widget); + /* 如果不能正常获得DC,返回(如果控件或父控件是隐藏状态,DC是获取不成功的) */ + if (dc == RT_NULL) + return RT_FALSE; + + /* 获得demo view允许绘图的区域 */ + demo_view_get_logic_rect(RTGUI_CONTAINER(widget), &rect); + + rect.x1 += 10; + rect.y1 += 10; + rtgui_dc_blit(dc_buffer, NULL, dc, &rect); + + /* 绘图完成 */ + rtgui_dc_end_drawing(dc); + } + else + { + /* 其他事件,调用默认的事件处理函数 */ + return rtgui_container_event_handler(object, event); + } + + return RT_FALSE; +} + +/* 创建用于DC Buffer操作演示用的视图 */ +rtgui_container_t *demo_view_dc_buffer() +{ + rtgui_container_t *view; + + if (dc_buffer == RT_NULL) + { + rtgui_rect_t rect = {0, 0, 50, 50}; + + /* 创建 DC Buffer,长 50,宽 50 */ + dc_buffer = rtgui_dc_buffer_create(50, 50); + RTGUI_DC_FC(dc_buffer) = blue; + rtgui_dc_fill_rect(dc_buffer, &rect); + + RTGUI_DC_FC(dc_buffer) = red; + rtgui_dc_draw_circle(dc_buffer, 25, 25, 10); + } + + view = demo_view("缓冲DC演示"); + if (view != RT_NULL) + /* 设置成自己的事件处理函数 */ + rtgui_object_set_event_handler(RTGUI_OBJECT(view), dc_buffer_event_handler); + + return view; +} diff --git a/examples/gui/demo_view_image.c b/examples/gui/demo_view_image.c index 3e8b7e2f33..ba866424da 100644 --- a/examples/gui/demo_view_image.c +++ b/examples/gui/demo_view_image.c @@ -1,131 +1,126 @@ -/* - * 程序清单:DC上显示图像演示 - * - * 这个例子会在创建出的view上显示图像 - */ - -#include "demo_view.h" -#include -#include -#include - -#if defined(RTGUI_USING_DFS_FILERW) || defined(RTGUI_USING_STDIO_FILERW) -static rtgui_image_t* image = RT_NULL; -static rtgui_view_t* _view = RT_NULL; - -/* 打开按钮的回调函数 */ -static void open_btn_onbutton(rtgui_widget_t* widget, struct rtgui_event* event) -{ - rtgui_filelist_view_t *view; - rtgui_workbench_t *workbench; - rtgui_rect_t rect; - - /* 获得顶层的workbench */ - workbench = RTGUI_WORKBENCH(rtgui_widget_get_toplevel(widget)); - rtgui_widget_get_rect(RTGUI_WIDGET(workbench), &rect); - - /* WIN32平台上和真实设备上的初始路径处理 */ -#ifdef _WIN32 - view = rtgui_filelist_view_create(workbench, "d:\\", "*.*", &rect); -#else - view = rtgui_filelist_view_create(workbench, "/", "*.*", &rect); -#endif - /* 模态显示一个文件列表视图,以提供给用户选择图像文件 */ - if (rtgui_view_show(RTGUI_VIEW(view), RT_TRUE) == RTGUI_MODAL_OK) - { - char path[32], image_type[8]; - - /* 设置文件路径的标签 */ - rtgui_filelist_view_get_fullpath(view, path, sizeof(path)); - if (image != RT_NULL) - { - rtgui_image_destroy(image); - image = RT_NULL; - } - - rt_memset(image_type, 0, sizeof(image_type)); - - /* 获得图像的类型 */ - if (rt_strstr(path, ".bmp") != RT_NULL || - rt_strstr(path, ".BMP") != RT_NULL) - strcat(image_type, "bmp"); - if (rt_strstr(path, ".png") != RT_NULL || - rt_strstr(path, ".PNG") != RT_NULL) - strcat(image_type, "png"); - if (rt_strstr(path, ".jpg") != RT_NULL || - rt_strstr(path, ".JPG") != RT_NULL) - strcat(image_type, "jpeg"); - if (rt_strstr(path, ".hdc") != RT_NULL || - rt_strstr(path, ".HDC") != RT_NULL) - strcat(image_type, "hdc"); - - /* 如果图像文件有效,创建相应的rtgui_image对象 */ - if (image_type[0] != '\0') - image = rtgui_image_create_from_file(image_type, path, RT_TRUE); - } - - /* 删除 文件列表 视图 */ - rtgui_view_destroy(RTGUI_VIEW(view)); - rtgui_view_show(_view, RT_FALSE); -} - -/* 演示视图的事件处理函数 */ -static rt_bool_t demo_view_event_handler(rtgui_widget_t* widget, rtgui_event_t *event) -{ - rt_bool_t result; - - /* 先调用默认的事件处理函数(这里只关心PAINT事件,但演示视图还有本身的一些控件) */ - result = rtgui_view_event_handler(widget, event); - - if (event->type == RTGUI_EVENT_PAINT) - { - struct rtgui_dc* dc; - rtgui_rect_t rect; - - /* 获得控件所属的DC */ - dc = rtgui_dc_begin_drawing(widget); - if (dc == RT_NULL) - /* 如果不能正常获得DC,返回(如果控件或父控件是隐藏状态,DC是获取不成功的) */ - return RT_FALSE; - - /* 获得demo view允许绘图的区域 */ - demo_view_get_rect(RTGUI_VIEW(widget), &rect); - - /* 获得图像显示区域 */ - rect.x1 += 5; rect.x2 -= 5; - rect.y1 += 30; - - if (image != RT_NULL) - rtgui_image_blit(image, dc, &rect); - - /* 绘图完成 */ - rtgui_dc_end_drawing(dc); - } - - return result; -} - -/* 创建用于显示图像的演示视图 */ -rtgui_view_t* demo_view_image(rtgui_workbench_t* workbench) -{ - rtgui_rect_t rect; - rtgui_button_t* open_btn; - - /* 先创建一个演示视图 */ - _view = demo_view(workbench, "图像演示"); - if (_view != RT_NULL) - /* 设置默认的事件处理函数到demo_view_event_handler函数 */ - rtgui_widget_set_event_handler(RTGUI_WIDGET(_view), demo_view_event_handler); - - /* 添加一个按钮 */ - demo_view_get_rect(_view, &rect); - rect.x1 += 5; rect.x2 = rect.x1 + 120; - rect.y2 = rect.y1 + 20; - open_btn = rtgui_button_create("打开图像文件"); - rtgui_container_add_child(RTGUI_CONTAINER(_view), RTGUI_WIDGET(open_btn)); - rtgui_widget_set_rect(RTGUI_WIDGET(open_btn), &rect); - rtgui_button_set_onbutton(open_btn, open_btn_onbutton); - - return _view; -} -#endif +/* + * 程序清单:DC上显示图像演示 + * + * 这个例子会在创建出的container上显示图像 + */ + +#include "demo_view.h" +#include +#include +#include + +static rtgui_image_t* image = RT_NULL; +static rtgui_container_t* _container = RT_NULL; + +#if defined(RTGUI_USING_DFS_FILERW) || defined(RTGUI_USING_STDIO_FILERW) +/* 打开按钮的回调函数 */ +static void open_btn_onbutton(rtgui_widget_t* widget, struct rtgui_event* event) +{ + rtgui_filelist_view_t *filelist; + struct rtgui_rect rect = {0, 100, 240, 280}; + + /* WIN32平台上和真实设备上的初始路径处理 */ +#ifdef _WIN32 + filelist = rtgui_filelist_view_create("e:\\", "*.*", &rect); +#else + filelist = rtgui_filelist_view_create("/", "*.*", &rect); +#endif + /* 模态显示一个文件列表视图,以提供给用户选择图像文件 */ + if (rtgui_container_show(RTGUI_CONTAINER(filelist), RT_TRUE) == RTGUI_MODAL_OK) + { + char path[32], image_type[8]; + + /* 设置文件路径的标签 */ + rtgui_filelist_view_get_fullpath(filelist, path, sizeof(path)); + if (image != RT_NULL) + { + rtgui_image_destroy(image); + image = RT_NULL; + } + + rt_memset(image_type, 0, sizeof(image_type)); + + /* 获得图像的类型 */ + if (rt_strstr(path, ".bmp") != RT_NULL || + rt_strstr(path, ".BMP") != RT_NULL) + strcat(image_type, "bmp"); + if (rt_strstr(path, ".png") != RT_NULL || + rt_strstr(path, ".PNG") != RT_NULL) + strcat(image_type, "png"); + if (rt_strstr(path, ".jpg") != RT_NULL || + rt_strstr(path, ".JPG") != RT_NULL) + strcat(image_type, "jpeg"); + if (rt_strstr(path, ".hdc") != RT_NULL || + rt_strstr(path, ".HDC") != RT_NULL) + strcat(image_type, "hdc"); + + /* 如果图像文件有效,创建相应的rtgui_image对象 */ + if (image_type[0] != '\0') + image = rtgui_image_create_from_file(image_type, path, RT_TRUE); + } + + /* 删除 文件列表 视图 */ + rtgui_container_destroy(RTGUI_CONTAINER(filelist)); + rtgui_container_show(_container, RT_FALSE); +} + +/* 演示视图的事件处理函数 */ +static rt_bool_t demo_view_event_handler(rtgui_widget_t* widget, rtgui_event_t *event) +{ + rt_bool_t result; + + /* 先调用默认的事件处理函数(这里只关心PAINT事件,但演示视图还有本身的一些控件) */ + result = rtgui_container_event_handler(widget, event); + + if (event->type == RTGUI_EVENT_PAINT) + { + struct rtgui_dc* dc; + rtgui_rect_t rect; + + /* 获得控件所属的DC */ + dc = rtgui_dc_begin_drawing(widget); + if (dc == RT_NULL) + /* 如果不能正常获得DC,返回(如果控件或父控件是隐藏状态,DC是获取不成功的) */ + return RT_FALSE; + + /* 获得demo container允许绘图的区域 */ + demo_view_get_rect(RTGUI_CONTAINER(widget), &rect); + + /* 获得图像显示区域 */ + rect.x1 += 5; rect.x2 -= 5; + rect.y1 += 30; + + if (image != RT_NULL) + rtgui_image_blit(image, dc, &rect); + + /* 绘图完成 */ + rtgui_dc_end_drawing(dc); + } + + return result; +} + +/* 创建用于显示图像的演示视图 */ +rtgui_container_t* demo_view_image(void) +{ + rtgui_rect_t rect; + rtgui_button_t* open_btn; + + /* 先创建一个演示视图 */ + _container = demo_view("图像演示"); + if (_container != RT_NULL) + /* 设置默认的事件处理函数到demo_view_event_handler函数 */ + rtgui_object_set_event_handler(RTGUI_WIDGET(_container), demo_view_event_handler); + + /* 添加一个按钮 */ + demo_view_get_rect(_container, &rect); + rect.x1 += 5; rect.x2 = rect.x1 + 120; + rect.y2 = rect.y1 + 20; + open_btn = rtgui_button_create("打开图像文件"); + rtgui_container_add_child(RTGUI_CONTAINER(_container), RTGUI_WIDGET(open_btn)); + rtgui_widget_set_rect(RTGUI_WIDGET(open_btn), &rect); + rtgui_button_set_onbutton(open_btn, open_btn_onbutton); + + return _container; +} +#endif diff --git a/examples/gui/demo_view_instrument_panel.c b/examples/gui/demo_view_instrument_panel.c index a863fec2b6..d82ca28433 100644 --- a/examples/gui/demo_view_instrument_panel.c +++ b/examples/gui/demo_view_instrument_panel.c @@ -1,7 +1,7 @@ /* * 程序清单:DC操作演示 * - * 这个例子会在创建出的view上进行DC操作的演示 + * 这个例子会在创建出的container上进行DC操作的演示 */ #include "demo_view.h" @@ -13,10 +13,11 @@ #include /* - * view的事件处理函数 + * container的事件处理函数 */ -rt_bool_t instrument_panel_event_handler(rtgui_widget_t* widget, rtgui_event_t *event) +rt_bool_t instrument_panel_event_handler(struct rtgui_object *object, rtgui_event_t *event) { + struct rtgui_widget *widget = RTGUI_WIDGET(object); char ac[4]; int i; int x0 = 120; @@ -33,10 +34,10 @@ rt_bool_t instrument_panel_event_handler(rtgui_widget_t* widget, rtgui_event_t * const int arrowy[] = {170-5, 170+5, 170}; /* - * 因为用的是demo view,上面本身有一部分控件,所以在绘图时先要让demo view + * 因为用的是demo container,上面本身有一部分控件,所以在绘图时先要让demo container * 先绘图 */ - rtgui_view_event_handler(widget, event); + rtgui_container_event_handler(RTGUI_OBJECT(widget), event); /************************************************************************/ /* 下面的是DC的操作 */ @@ -48,8 +49,8 @@ rt_bool_t instrument_panel_event_handler(rtgui_widget_t* widget, rtgui_event_t * if (dc == RT_NULL) return RT_FALSE; - /* 获得demo view允许绘图的区域 */ - demo_view_get_rect(RTGUI_VIEW(widget), &rect); + /* 获得demo container允许绘图的区域 */ + demo_view_get_rect(RTGUI_CONTAINER(widget), &rect); RTGUI_DC_TEXTALIGN(dc) = RTGUI_ALIGN_BOTTOM | RTGUI_ALIGN_CENTER_HORIZONTAL; /* 显示GUI的版本信息 */ @@ -128,21 +129,21 @@ rt_bool_t instrument_panel_event_handler(rtgui_widget_t* widget, rtgui_event_t * else { /* 其他事件,调用默认的事件处理函数 */ - return rtgui_view_event_handler(widget, event); + return rtgui_container_event_handler(RTGUI_OBJECT(widget), event); } return RT_FALSE; } /* 创建用于DC操作演示用的视图 */ -rtgui_view_t *demo_view_instrument_panel(rtgui_workbench_t* workbench) +rtgui_container_t *demo_view_instrument_panel(void) { - rtgui_view_t *view; + rtgui_container_t *container; - view = demo_view(workbench, "instrument panel Demo"); - if (view != RT_NULL) + container = demo_view("instrument panel Demo"); + if (container != RT_NULL) /* 设置成自己的事件处理函数 */ - rtgui_widget_set_event_handler(RTGUI_WIDGET(view), instrument_panel_event_handler); + rtgui_object_set_event_handler(RTGUI_OBJECT(container), instrument_panel_event_handler); - return view; + return container; } diff --git a/examples/gui/demo_view_label.c b/examples/gui/demo_view_label.c index 1c6b560082..348437dec0 100644 --- a/examples/gui/demo_view_label.c +++ b/examples/gui/demo_view_label.c @@ -1,104 +1,104 @@ -/* - * 绋嬪簭娓呭崟锛歭abel鎺т欢婕旂ず - * - * 杩欎釜渚嬪瓙浼氬湪鍒涘缓鍑虹殑view涓婃坊鍔犲嚑涓笉鍚岀被鍨嬬殑label鎺т欢 - */ -#include "demo_view.h" -#include - -/* 鍒涘缓鐢ㄤ簬婕旂ずlabel鎺т欢鐨勮鍥� */ -rtgui_view_t* demo_view_label(rtgui_workbench_t* workbench) -{ - rtgui_rect_t rect; - rtgui_view_t* view; - rtgui_label_t* label; - rtgui_font_t* font; - - /* 鍏堝垱寤轰竴涓紨绀虹敤鐨勮鍥� */ - view = demo_view(workbench, "Label View"); - - /* 鑾峰緱瑙嗗浘鐨勪綅缃俊鎭� */ - demo_view_get_rect(view, &rect); - rect.x1 += 5; - rect.x2 -= 5; - rect.y1 += 5; - rect.y2 = rect.y1 + 20; - /* 鍒涘缓涓�涓猯abel鎺т欢 */ - label = rtgui_label_create("Red Left"); - /* 璁剧疆label鎺т欢涓婄殑鏂囨湰瀵归綈鏂瑰紡涓猴細宸﹀榻� */ - RTGUI_WIDGET_TEXTALIGN(RTGUI_WIDGET(label)) = RTGUI_ALIGN_LEFT; - /* 璁剧疆label鎺т欢鐨勫墠鏅壊涓虹孩鑹� */ - RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(label)) = red; - /* 璁剧疆label鐨勪綅缃� */ - rtgui_widget_set_rect(RTGUI_WIDGET(label), &rect); - /* view鏄竴涓猚ontainer鎺т欢锛岃皟鐢╝dd_child鏂规硶娣诲姞杩欎釜label鎺т欢 */ - rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(label)); - - /* 鑾峰緱瑙嗗浘鐨勪綅缃俊鎭� */ - demo_view_get_rect(view, &rect); - rect.x1 += 5; - rect.x2 -= 5; - rect.y1 += 5 + 25; - rect.y2 = rect.y1 + 20; - /* 鍒涘缓涓�涓猯abel鎺т欢 */ - label = rtgui_label_create("Blue Right"); - /* 璁剧疆label鎺т欢涓婄殑鏂囨湰瀵归綈鏂瑰紡涓猴細鍙冲榻� */ - RTGUI_WIDGET_TEXTALIGN(RTGUI_WIDGET(label)) = RTGUI_ALIGN_RIGHT; - /* 璁剧疆label鎺т欢鐨勫墠鏅壊涓鸿摑鑹� */ - RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(label)) = blue; - /* 璁剧疆label鐨勪綅缃� */ - rtgui_widget_set_rect(RTGUI_WIDGET(label), &rect); - /* view鏄竴涓猚ontainer鎺т欢锛岃皟鐢╝dd_child鏂规硶娣诲姞杩欎釜label鎺т欢 */ - rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(label)); - - /* 鑾峰緱瑙嗗浘鐨勪綅缃俊鎭� */ - demo_view_get_rect(view, &rect); - rect.x1 += 5; - rect.x2 -= 5; - rect.y1 += 5 + 25 + 25; - rect.y2 = rect.y1 + 20; - /* 鍒涘缓涓�涓猯abel鎺т欢 */ - label = rtgui_label_create("Green Center"); - /* 璁剧疆label鎺т欢鐨勫墠鏅壊涓虹豢鑹� */ - RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(label)) = green; - /* 璁剧疆label鎺т欢涓婄殑鏂囨湰瀵归綈鏂瑰紡涓猴細鍙冲榻� */ - RTGUI_WIDGET_TEXTALIGN(RTGUI_WIDGET(label)) = RTGUI_ALIGN_CENTER_HORIZONTAL; - /* 璁剧疆label鐨勪綅缃� */ - rtgui_widget_set_rect(RTGUI_WIDGET(label), &rect); - /* view鏄竴涓猚ontainer鎺т欢锛岃皟鐢╝dd_child鏂规硶娣诲姞杩欎釜label鎺т欢 */ - rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(label)); - - /* 鑾峰緱瑙嗗浘鐨勪綅缃俊鎭� */ - demo_view_get_rect(view, &rect); - rect.x1 += 5; - rect.x2 -= 5; - rect.y1 += 5 + 25 + 25 + 25; - rect.y2 = rect.y1 + 20; - /* 鍒涘缓涓�涓猯abel鎺т欢 */ - label = rtgui_label_create("12 font"); - /* 璁剧疆瀛椾綋涓�12鐐归樀鐨刟sc瀛椾綋 */ - font = rtgui_font_refer("asc", 12); - RTGUI_WIDGET_FONT(RTGUI_WIDGET(label)) = font; - /* 璁剧疆label鐨勪綅缃� */ - rtgui_widget_set_rect(RTGUI_WIDGET(label), &rect); - /* view鏄竴涓猚ontainer鎺т欢锛岃皟鐢╝dd_child鏂规硶娣诲姞杩欎釜label鎺т欢 */ - rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(label)); - - /* 鑾峰緱瑙嗗浘鐨勪綅缃俊鎭� */ - demo_view_get_rect(view, &rect); - rect.x1 += 5; - rect.y1 += 5 + 25 + 25 + 25 + 25; - rect.y2 = rect.y1 + 20; - /* 鍒涘缓涓�涓猯abel鎺т欢 */ - label = rtgui_label_create("16 font"); - /* 璁剧疆瀛椾綋涓�16鐐归樀鐨刟sc瀛椾綋 */ - font = rtgui_font_refer("asc", 16); - RTGUI_WIDGET_FONT(RTGUI_WIDGET(label)) = font; - /* 璁剧疆label鐨勪綅缃� */ - rtgui_widget_set_rect(RTGUI_WIDGET(label), &rect); - /* view鏄竴涓猚ontainer鎺т欢锛岃皟鐢╝dd_child鏂规硶娣诲姞杩欎釜label鎺т欢 */ - rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(label)); - - return view; -} - +/* + * 绋嬪簭娓呭崟锛歭abel鎺т欢婕旂ず + * + * 杩欎釜渚嬪瓙浼氬湪鍒涘缓鍑虹殑container涓婃坊鍔犲嚑涓笉鍚岀被鍨嬬殑label鎺т欢 + */ +#include "demo_view.h" +#include + +/* 鍒涘缓鐢ㄤ簬婕旂ずlabel鎺т欢鐨勮鍥� */ +rtgui_container_t* demo_view_label(void) +{ + rtgui_rect_t rect; + rtgui_container_t* container; + rtgui_label_t* label; + rtgui_font_t* font; + + /* 鍏堝垱寤轰竴涓紨绀虹敤鐨勮鍥� */ + container = demo_view("Label View"); + + /* 鑾峰緱瑙嗗浘鐨勪綅缃俊鎭� */ + demo_view_get_rect(container, &rect); + rect.x1 += 5; + rect.x2 -= 5; + rect.y1 += 5; + rect.y2 = rect.y1 + 20; + /* 鍒涘缓涓�涓猯abel鎺т欢 */ + label = rtgui_label_create("Red Left"); + /* 璁剧疆label鎺т欢涓婄殑鏂囨湰瀵归綈鏂瑰紡涓猴細宸﹀榻� */ + RTGUI_WIDGET_TEXTALIGN(RTGUI_WIDGET(label)) = RTGUI_ALIGN_LEFT; + /* 璁剧疆label鎺т欢鐨勫墠鏅壊涓虹孩鑹� */ + RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(label)) = red; + /* 璁剧疆label鐨勪綅缃� */ + rtgui_widget_set_rect(RTGUI_WIDGET(label), &rect); + /* container鏄竴涓猚ontainer鎺т欢锛岃皟鐢╝dd_child鏂规硶娣诲姞杩欎釜label鎺т欢 */ + rtgui_container_add_child(container, RTGUI_WIDGET(label)); + + /* 鑾峰緱瑙嗗浘鐨勪綅缃俊鎭� */ + demo_view_get_rect(container, &rect); + rect.x1 += 5; + rect.x2 -= 5; + rect.y1 += 5 + 25; + rect.y2 = rect.y1 + 20; + /* 鍒涘缓涓�涓猯abel鎺т欢 */ + label = rtgui_label_create("Blue Right"); + /* 璁剧疆label鎺т欢涓婄殑鏂囨湰瀵归綈鏂瑰紡涓猴細鍙冲榻� */ + RTGUI_WIDGET_TEXTALIGN(RTGUI_WIDGET(label)) = RTGUI_ALIGN_RIGHT; + /* 璁剧疆label鎺т欢鐨勫墠鏅壊涓鸿摑鑹� */ + RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(label)) = blue; + /* 璁剧疆label鐨勪綅缃� */ + rtgui_widget_set_rect(RTGUI_WIDGET(label), &rect); + /* container鏄竴涓猚ontainer鎺т欢锛岃皟鐢╝dd_child鏂规硶娣诲姞杩欎釜label鎺т欢 */ + rtgui_container_add_child(container, RTGUI_WIDGET(label)); + + /* 鑾峰緱瑙嗗浘鐨勪綅缃俊鎭� */ + demo_view_get_rect(container, &rect); + rect.x1 += 5; + rect.x2 -= 5; + rect.y1 += 5 + 25 + 25; + rect.y2 = rect.y1 + 20; + /* 鍒涘缓涓�涓猯abel鎺т欢 */ + label = rtgui_label_create("Green Center"); + /* 璁剧疆label鎺т欢鐨勫墠鏅壊涓虹豢鑹� */ + RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(label)) = green; + /* 璁剧疆label鎺т欢涓婄殑鏂囨湰瀵归綈鏂瑰紡涓猴細鍙冲榻� */ + RTGUI_WIDGET_TEXTALIGN(RTGUI_WIDGET(label)) = RTGUI_ALIGN_CENTER_HORIZONTAL; + /* 璁剧疆label鐨勪綅缃� */ + rtgui_widget_set_rect(RTGUI_WIDGET(label), &rect); + /* container鏄竴涓猚ontainer鎺т欢锛岃皟鐢╝dd_child鏂规硶娣诲姞杩欎釜label鎺т欢 */ + rtgui_container_add_child(container, RTGUI_WIDGET(label)); + + /* 鑾峰緱瑙嗗浘鐨勪綅缃俊鎭� */ + demo_view_get_rect(container, &rect); + rect.x1 += 5; + rect.x2 -= 5; + rect.y1 += 5 + 25 + 25 + 25; + rect.y2 = rect.y1 + 20; + /* 鍒涘缓涓�涓猯abel鎺т欢 */ + label = rtgui_label_create("12 font"); + /* 璁剧疆瀛椾綋涓�12鐐归樀鐨刟sc瀛椾綋 */ + font = rtgui_font_refer("asc", 12); + RTGUI_WIDGET_FONT(RTGUI_WIDGET(label)) = font; + /* 璁剧疆label鐨勪綅缃� */ + rtgui_widget_set_rect(RTGUI_WIDGET(label), &rect); + /* container鏄竴涓猚ontainer鎺т欢锛岃皟鐢╝dd_child鏂规硶娣诲姞杩欎釜label鎺т欢 */ + rtgui_container_add_child(container, RTGUI_WIDGET(label)); + + /* 鑾峰緱瑙嗗浘鐨勪綅缃俊鎭� */ + demo_view_get_rect(container, &rect); + rect.x1 += 5; + rect.y1 += 5 + 25 + 25 + 25 + 25; + rect.y2 = rect.y1 + 20; + /* 鍒涘缓涓�涓猯abel鎺т欢 */ + label = rtgui_label_create("16 font"); + /* 璁剧疆瀛椾綋涓�16鐐归樀鐨刟sc瀛椾綋 */ + font = rtgui_font_refer("asc", 16); + RTGUI_WIDGET_FONT(RTGUI_WIDGET(label)) = font; + /* 璁剧疆label鐨勪綅缃� */ + rtgui_widget_set_rect(RTGUI_WIDGET(label), &rect); + /* container鏄竴涓猚ontainer鎺т欢锛岃皟鐢╝dd_child鏂规硶娣诲姞杩欎釜label鎺т欢 */ + rtgui_container_add_child(container, RTGUI_WIDGET(label)); + + return container; +} + diff --git a/examples/gui/demo_view_listbox.c b/examples/gui/demo_view_listbox.c index b098d719ce..9236d58425 100644 --- a/examples/gui/demo_view_listbox.c +++ b/examples/gui/demo_view_listbox.c @@ -1,191 +1,191 @@ -/* - * 绋嬪簭娓呭崟锛歭abel鎺т欢婕旂ず - * - * 杩欎釜渚嬪瓙浼氬湪鍒涘缓鍑虹殑view涓婃坊鍔犲嚑涓笉鍚岀被鍨嬬殑label鎺т欢 - */ -#include "demo_view.h" -#include -#include - -static rtgui_image_t* item_icon = RT_NULL; -static const char * image_xpm[] = { - "16 16 106 2", - " c None", - ". c #D0C83F", - "+ c #D0C840", - "@ c #D0C030", - "# c #D0B820", - "$ c #D0B020", - "% c #D0B01F", - "& c #5F571F", - "* c #F0F0C0", - "= c #FFF8D0", - "- c #FFF8C0", - "; c #FFF8B0", - "> c #FFF8A0", - ", c #F0E870", - "' c #707030", - ") c #4F87EF", - "! c #4F78C0", - "~ c #5088E0", - "{ c #5078C0", - "] c #C0D0F0", - "^ c #FFF8E0", - "/ c #FFF090", - "( c #F0E070", - "_ c #6F97D0", - ": c #C0D8FE", - "< c #80A8F0", - "[ c #7088D0", - "} c #B0D0FF", - "| c #90B0F0", - "1 c #1040A0", - "2 c #F0F080", - "3 c #707040", - "4 c #7098F0", - "5 c #3068E0", - "6 c #A0B8F0", - "7 c #4070C0", - "8 c #002880", - "9 c #404040", - "0 c #505050", - "a c #F0F090", - "b c #F0E860", - "c c #F0D860", - "d c #807840", - "e c #2F5FC0", - "f c #1050D0", - "g c #1048B0", - "h c #002870", - "i c #C0C080", - "j c #C0C070", - "k c #F0F070", - "l c #F0E060", - "m c #E0D050", - "n c #00277F", - "o c #00287F", - "p c #1F3F6F", - "q c #1048C0", - "r c #0040B0", - "s c #204080", - "t c #FFF890", - "u c #F0D850", - "v c #E0C840", - "w c #807040", - "x c #A0B06F", - "y c #204880", - "z c #2048A0", - "A c #90A8C0", - "B c #FFF080", - "C c #F0D050", - "D c #C0A830", - "E c #6F682F", - "F c #F0F0A0", - "G c #E0D060", - "H c #B0A040", - "I c #D0B840", - "J c #E0C040", - "K c #D0B030", - "L c #706820", - "M c #5F581F", - "N c #CFBF3F", - "O c #FFF0A0", - "P c #A09830", - "Q c #A08820", - "R c #908030", - "S c #807830", - "T c #707020", - "U c #605820", - "V c #6F672F", - "W c #D0C040", - "X c #F0E880", - "Y c #907820", - "Z c #B09820", - "` c #B09010", - " . c #B08820", - ".. c #806820", - "+. c #5F5F1F", - "@. c #F0E080", - "#. c #B09020", - "$. c #C0B040", - "%. c #A09030", - "&. c #908020", - "*. c #606020", - "=. c #6F5F1F", - "-. c #9F982F", - ";. c #A0872F", - ">. c #6F681F", - ",. c #706020", - " ", - " . + + + @ @ # # $ % & ", - " + * = = = = - ; > , ' ", - " ) ! ~ { ] ^ = - - > / ( ' ", - "_ : < { [ } | 1 - ; > > / 2 ( 3 ", - "{ 4 5 1 6 7 5 8 9 0 a / , b c d ", - "e f g h 8 8 g h i j / k l c m d ", - " n o p q r s t 2 , l c u v w ", - " x y z A B , l u C v D E ", - " @ F > t k G H I J K L M ", - " N @ O / 2 l P Q R S T U V ", - " W m 2 X l I Y Z ` ...+. ", - " W @.l u I R #.Z Y U M ", - " $.G I $.%.R &.Y *.& =. ", - " -.;.>.,.L L ,.& M ", - " "}; - -static struct rtgui_listbox_item items[] = -{ - {"list #0", RT_NULL}, - {"list #1", RT_NULL}, - {"list #2", RT_NULL}, - {"list #3", RT_NULL}, -}; - -static void on_items(rtgui_widget_t* widget, struct rtgui_event* event) -{ - rtgui_listbox_t* box; - /* get listbox */ - box = RTGUI_LISTBOX(widget); - - /* 鎵撳嵃褰撳墠鐨勯」 */ - rt_kprintf("current item: %d\n", box->current_item); -} - -/* 鍒涘缓鐢ㄤ簬婕旂ずlabel鎺т欢鐨勮鍥� */ -rtgui_view_t* demo_view_listbox(rtgui_workbench_t* workbench) -{ - rtgui_rect_t rect; - rtgui_view_t* view; - rtgui_label_t* label; - rtgui_listbox_t* box; - - /* 鍏堝垱寤轰竴涓紨绀虹敤鐨勮鍥� */ - view = demo_view(workbench, "ListBox Demo"); - - if (item_icon == RT_NULL) - item_icon = rtgui_image_create_from_mem("xpm", - (const rt_uint8_t*)image_xpm, sizeof(image_xpm), RT_TRUE); - items[1].image = item_icon; - - /* 鑾峰緱瑙嗗浘鐨勪綅缃俊鎭� */ - demo_view_get_rect(view, &rect); - rect.x1 += 5; - rect.x2 -= 5; - rect.y1 += 5; - rect.y2 = rect.y1 + 20; - /* 鍒涘缓涓�涓猯abel鎺т欢 */ - label = rtgui_label_create("listbox: "); - /* 璁剧疆label鐨勪綅缃� */ - rtgui_widget_set_rect(RTGUI_WIDGET(label), &rect); - /* view鏄竴涓猚ontainer鎺т欢锛岃皟鐢╝dd_child鏂规硶娣诲姞杩欎釜label鎺т欢 */ - rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(label)); - - rect.y1 = rect.y2 + 3; - rect.y2 = 250; - box = rtgui_listbox_create(items, sizeof(items)/sizeof(struct rtgui_listbox_item), &rect); - rtgui_listbox_set_onitem(box, on_items); - /* view鏄竴涓猚ontainer鎺т欢锛岃皟鐢╝dd_child鏂规硶娣诲姞杩欎釜listbox鎺т欢 */ - rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(box)); - - return view; -} +/* + * 绋嬪簭娓呭崟锛歭abel鎺т欢婕旂ず + * + * 杩欎釜渚嬪瓙浼氬湪鍒涘缓鍑虹殑container涓婃坊鍔犲嚑涓笉鍚岀被鍨嬬殑label鎺т欢 + */ +#include "demo_view.h" +#include +#include + +static rtgui_image_t* item_icon = RT_NULL; +static const char * image_xpm[] = { + "16 16 106 2", + " c None", + ". c #D0C83F", + "+ c #D0C840", + "@ c #D0C030", + "# c #D0B820", + "$ c #D0B020", + "% c #D0B01F", + "& c #5F571F", + "* c #F0F0C0", + "= c #FFF8D0", + "- c #FFF8C0", + "; c #FFF8B0", + "> c #FFF8A0", + ", c #F0E870", + "' c #707030", + ") c #4F87EF", + "! c #4F78C0", + "~ c #5088E0", + "{ c #5078C0", + "] c #C0D0F0", + "^ c #FFF8E0", + "/ c #FFF090", + "( c #F0E070", + "_ c #6F97D0", + ": c #C0D8FE", + "< c #80A8F0", + "[ c #7088D0", + "} c #B0D0FF", + "| c #90B0F0", + "1 c #1040A0", + "2 c #F0F080", + "3 c #707040", + "4 c #7098F0", + "5 c #3068E0", + "6 c #A0B8F0", + "7 c #4070C0", + "8 c #002880", + "9 c #404040", + "0 c #505050", + "a c #F0F090", + "b c #F0E860", + "c c #F0D860", + "d c #807840", + "e c #2F5FC0", + "f c #1050D0", + "g c #1048B0", + "h c #002870", + "i c #C0C080", + "j c #C0C070", + "k c #F0F070", + "l c #F0E060", + "m c #E0D050", + "n c #00277F", + "o c #00287F", + "p c #1F3F6F", + "q c #1048C0", + "r c #0040B0", + "s c #204080", + "t c #FFF890", + "u c #F0D850", + "v c #E0C840", + "w c #807040", + "x c #A0B06F", + "y c #204880", + "z c #2048A0", + "A c #90A8C0", + "B c #FFF080", + "C c #F0D050", + "D c #C0A830", + "E c #6F682F", + "F c #F0F0A0", + "G c #E0D060", + "H c #B0A040", + "I c #D0B840", + "J c #E0C040", + "K c #D0B030", + "L c #706820", + "M c #5F581F", + "N c #CFBF3F", + "O c #FFF0A0", + "P c #A09830", + "Q c #A08820", + "R c #908030", + "S c #807830", + "T c #707020", + "U c #605820", + "V c #6F672F", + "W c #D0C040", + "X c #F0E880", + "Y c #907820", + "Z c #B09820", + "` c #B09010", + " . c #B08820", + ".. c #806820", + "+. c #5F5F1F", + "@. c #F0E080", + "#. c #B09020", + "$. c #C0B040", + "%. c #A09030", + "&. c #908020", + "*. c #606020", + "=. c #6F5F1F", + "-. c #9F982F", + ";. c #A0872F", + ">. c #6F681F", + ",. c #706020", + " ", + " . + + + @ @ # # $ % & ", + " + * = = = = - ; > , ' ", + " ) ! ~ { ] ^ = - - > / ( ' ", + "_ : < { [ } | 1 - ; > > / 2 ( 3 ", + "{ 4 5 1 6 7 5 8 9 0 a / , b c d ", + "e f g h 8 8 g h i j / k l c m d ", + " n o p q r s t 2 , l c u v w ", + " x y z A B , l u C v D E ", + " @ F > t k G H I J K L M ", + " N @ O / 2 l P Q R S T U V ", + " W m 2 X l I Y Z ` ...+. ", + " W @.l u I R #.Z Y U M ", + " $.G I $.%.R &.Y *.& =. ", + " -.;.>.,.L L ,.& M ", + " "}; + +static struct rtgui_listbox_item items[] = +{ + {"list #0", RT_NULL}, + {"list #1", RT_NULL}, + {"list #2", RT_NULL}, + {"list #3", RT_NULL}, +}; + +static void on_items(rtgui_widget_t* widget, struct rtgui_event* event) +{ + rtgui_listbox_t* box; + /* get listbox */ + box = RTGUI_LISTBOX(widget); + + /* 鎵撳嵃褰撳墠鐨勯」 */ + rt_kprintf("current item: %d\n", box->current_item); +} + +/* 鍒涘缓鐢ㄤ簬婕旂ずlabel鎺т欢鐨勮鍥� */ +rtgui_container_t* demo_view_listbox(void) +{ + rtgui_rect_t rect; + rtgui_container_t* container; + rtgui_label_t* label; + rtgui_listbox_t* box; + + /* 鍏堝垱寤轰竴涓紨绀虹敤鐨勮鍥� */ + container = demo_view("ListBox Demo"); + + if (item_icon == RT_NULL) + item_icon = rtgui_image_create_from_mem("xpm", + (const rt_uint8_t*)image_xpm, sizeof(image_xpm), RT_TRUE); + items[1].image = item_icon; + + /* 鑾峰緱瑙嗗浘鐨勪綅缃俊鎭� */ + demo_view_get_rect(container, &rect); + rect.x1 += 5; + rect.x2 -= 5; + rect.y1 += 5; + rect.y2 = rect.y1 + 20; + /* 鍒涘缓涓�涓猯abel鎺т欢 */ + label = rtgui_label_create("listbox: "); + /* 璁剧疆label鐨勪綅缃� */ + rtgui_widget_set_rect(RTGUI_WIDGET(label), &rect); + /* container鏄竴涓猚ontainer鎺т欢锛岃皟鐢╝dd_child鏂规硶娣诲姞杩欎釜label鎺т欢 */ + rtgui_container_add_child(container, RTGUI_WIDGET(label)); + + rect.y1 = rect.y2 + 3; + rect.y2 = 250; + box = rtgui_listbox_create(items, sizeof(items)/sizeof(struct rtgui_listbox_item), &rect); + rtgui_listbox_set_onitem(box, on_items); + /* container鏄竴涓猚ontainer鎺т欢锛岃皟鐢╝dd_child鏂规硶娣诲姞杩欎釜listbox鎺т欢 */ + rtgui_container_add_child(container, RTGUI_WIDGET(box)); + + return container; +} diff --git a/examples/gui/demo_view_listctrl.c b/examples/gui/demo_view_listctrl.c index 50846e2b9d..fb7128fd22 100644 --- a/examples/gui/demo_view_listctrl.c +++ b/examples/gui/demo_view_listctrl.c @@ -1,252 +1,255 @@ -/* - * 程序清单:label控件演示 - * - * 这个例子会在创建出的view上添加几个不同类型的label控件 - */ -#include "demo_view.h" -#include -#include - -static rtgui_image_t* item_icon = RT_NULL; -static const char * image_xpm[] = { - "16 16 106 2", - " c None", - ". c #D0C83F", - "+ c #D0C840", - "@ c #D0C030", - "# c #D0B820", - "$ c #D0B020", - "% c #D0B01F", - "& c #5F571F", - "* c #F0F0C0", - "= c #FFF8D0", - "- c #FFF8C0", - "; c #FFF8B0", - "> c #FFF8A0", - ", c #F0E870", - "' c #707030", - ") c #4F87EF", - "! c #4F78C0", - "~ c #5088E0", - "{ c #5078C0", - "] c #C0D0F0", - "^ c #FFF8E0", - "/ c #FFF090", - "( c #F0E070", - "_ c #6F97D0", - ": c #C0D8FE", - "< c #80A8F0", - "[ c #7088D0", - "} c #B0D0FF", - "| c #90B0F0", - "1 c #1040A0", - "2 c #F0F080", - "3 c #707040", - "4 c #7098F0", - "5 c #3068E0", - "6 c #A0B8F0", - "7 c #4070C0", - "8 c #002880", - "9 c #404040", - "0 c #505050", - "a c #F0F090", - "b c #F0E860", - "c c #F0D860", - "d c #807840", - "e c #2F5FC0", - "f c #1050D0", - "g c #1048B0", - "h c #002870", - "i c #C0C080", - "j c #C0C070", - "k c #F0F070", - "l c #F0E060", - "m c #E0D050", - "n c #00277F", - "o c #00287F", - "p c #1F3F6F", - "q c #1048C0", - "r c #0040B0", - "s c #204080", - "t c #FFF890", - "u c #F0D850", - "v c #E0C840", - "w c #807040", - "x c #A0B06F", - "y c #204880", - "z c #2048A0", - "A c #90A8C0", - "B c #FFF080", - "C c #F0D050", - "D c #C0A830", - "E c #6F682F", - "F c #F0F0A0", - "G c #E0D060", - "H c #B0A040", - "I c #D0B840", - "J c #E0C040", - "K c #D0B030", - "L c #706820", - "M c #5F581F", - "N c #CFBF3F", - "O c #FFF0A0", - "P c #A09830", - "Q c #A08820", - "R c #908030", - "S c #807830", - "T c #707020", - "U c #605820", - "V c #6F672F", - "W c #D0C040", - "X c #F0E880", - "Y c #907820", - "Z c #B09820", - "` c #B09010", - " . c #B08820", - ".. c #806820", - "+. c #5F5F1F", - "@. c #F0E080", - "#. c #B09020", - "$. c #C0B040", - "%. c #A09030", - "&. c #908020", - "*. c #606020", - "=. c #6F5F1F", - "-. c #9F982F", - ";. c #A0872F", - ">. c #6F681F", - ",. c #706020", - " ", - " . + + + @ @ # # $ % & ", - " + * = = = = - ; > , ' ", - " ) ! ~ { ] ^ = - - > / ( ' ", - "_ : < { [ } | 1 - ; > > / 2 ( 3 ", - "{ 4 5 1 6 7 5 8 9 0 a / , b c d ", - "e f g h 8 8 g h i j / k l c m d ", - " n o p q r s t 2 , l c u v w ", - " x y z A B , l u C v D E ", - " @ F > t k G H I J K L M ", - " N @ O / 2 l P Q R S T U V ", - " W m 2 X l I Y Z ` ...+. ", - " W @.l u I R #.Z Y U M ", - " $.G I $.%.R &.Y *.& =. ", - " -.;.>.,.L L ,.& M ", - " "}; - -static struct list_item -{ - const char* name; - const char* gender; - int age; - rtgui_image_t* image; -} items[] = -{ - {"index0", "00", 30, RT_NULL}, - {"index1", "m1", 30, RT_NULL}, - {"index2", "m2", 30, RT_NULL}, - {"index3", "m3", 30, RT_NULL}, - {"index4", "m4", 30, RT_NULL}, - {"index5", "m5", 30, RT_NULL}, - {"index6", "m6", 30, RT_NULL}, - {"index7", "m7", 30, RT_NULL}, - {"index8", "m8", 30, RT_NULL}, - {"index9", "m9", 30, RT_NULL}, - {"index10", "m10", 30, RT_NULL}, - {"index11", "m11", 30, RT_NULL}, - {"index12", "m12", 30, RT_NULL}, - {"index13", "m13", 30, RT_NULL}, - {"index14", "m14", 30, RT_NULL}, - {"index15", "m15", 30, RT_NULL}, - {"index16", "m16", 30, RT_NULL}, - {"index17", "m17", 30, RT_NULL}, - {"index18", "m18", 30, RT_NULL}, - {"index19", "m19", 30, RT_NULL}, -}; - -void _rtgui_listctrl_item_draw(struct rtgui_listctrl *list, struct rtgui_dc* dc, rtgui_rect_t* rect, rt_uint16_t index) -{ - char age_str[8]; - rtgui_rect_t item_rect; - struct list_item *items, *item; - - item_rect = *rect; - item_rect.x1 += 5; - items = (struct list_item*)list->items; - item = &items[index]; - - /* draw text */ - rtgui_dc_draw_text(dc, item->name, &item_rect); item_rect.x1 += 60; - rtgui_dc_draw_vline(dc, item_rect.x1, item_rect.y1, item_rect.y2); - - item_rect.x1 += 5; - rtgui_dc_draw_text(dc, item->gender, &item_rect); item_rect.x1 += 60; - rtgui_dc_draw_vline(dc, item_rect.x1, item_rect.y1, item_rect.y2); - - item_rect.x1 += 5; - rt_snprintf(age_str, sizeof(age_str), "%d", item->age); - rtgui_dc_draw_text(dc, age_str, &item_rect); item_rect.x1 += 40; - rtgui_dc_draw_vline(dc, item_rect.x1, item_rect.y1, item_rect.y2); - - item_rect.x1 += 5; - - /* draw image */ - if (item->image != RT_NULL) - { - rtgui_rect_t image_rect; - - image_rect.x1 = 0; image_rect.y1 = 0; - image_rect.x2 = item->image->w; image_rect.y2 = item->image->h; - rtgui_rect_moveto_align(&item_rect, &image_rect, RTGUI_ALIGN_CENTER_VERTICAL); - rtgui_image_blit(item->image, dc, &image_rect); - } -} - -static void on_items(rtgui_widget_t* widget, struct rtgui_event* event) -{ - rtgui_listctrl_t* ctrl; - /* get listctrl */ - ctrl = RTGUI_LISTCTRL(widget); - - /* 打印当前的项 */ - rt_kprintf("current item: %d\n", ctrl->current_item); -} - -/* 创建用于演示label控件的视图 */ -rtgui_view_t* demo_view_listctrl(rtgui_workbench_t* workbench) -{ - rtgui_rect_t rect; - rtgui_view_t* view; - rtgui_label_t* label; - rtgui_listctrl_t* box; - - /* 先创建一个演示用的视图 */ - view = demo_view(workbench, "List Control Demo"); - - if (item_icon == RT_NULL) - item_icon = rtgui_image_create_from_mem("xpm", - (const rt_uint8_t*)image_xpm, sizeof(image_xpm), RT_TRUE); - items[1].image = item_icon; - - /* 获得视图的位置信息 */ - demo_view_get_rect(view, &rect); - rect.x1 += 5; - rect.x2 -= 5; - rect.y1 += 5; - rect.y2 = rect.y1 + 20; - /* 创建一个label控件 */ - label = rtgui_label_create("List Control: "); - /* 设置label的位置 */ - rtgui_widget_set_rect(RTGUI_WIDGET(label), &rect); - /* view是一个container控件,调用add_child方法添加这个label控件 */ - rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(label)); - - rect.y1 = rect.y2 + 3; - rect.y2 = 250; - box = rtgui_listctrl_create((rt_uint32_t)items, sizeof(items)/sizeof(items[0]), &rect, - _rtgui_listctrl_item_draw); - rtgui_listctrl_set_onitem(box, on_items); - /* view是一个container控件,调用add_child方法添加这个listctrl控件 */ - rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(box)); - - return view; -} +/* + * 程序清单:label控件演示 + * + * 这个例子会在创建出的container上添加几个不同类型的label控件 + */ +#include "demo_view.h" +#include +#include + +static rtgui_image_t* item_icon = RT_NULL; +static const char * image_xpm[] = { + "16 16 106 2", + " c None", + ". c #D0C83F", + "+ c #D0C840", + "@ c #D0C030", + "# c #D0B820", + "$ c #D0B020", + "% c #D0B01F", + "& c #5F571F", + "* c #F0F0C0", + "= c #FFF8D0", + "- c #FFF8C0", + "; c #FFF8B0", + "> c #FFF8A0", + ", c #F0E870", + "' c #707030", + ") c #4F87EF", + "! c #4F78C0", + "~ c #5088E0", + "{ c #5078C0", + "] c #C0D0F0", + "^ c #FFF8E0", + "/ c #FFF090", + "( c #F0E070", + "_ c #6F97D0", + ": c #C0D8FE", + "< c #80A8F0", + "[ c #7088D0", + "} c #B0D0FF", + "| c #90B0F0", + "1 c #1040A0", + "2 c #F0F080", + "3 c #707040", + "4 c #7098F0", + "5 c #3068E0", + "6 c #A0B8F0", + "7 c #4070C0", + "8 c #002880", + "9 c #404040", + "0 c #505050", + "a c #F0F090", + "b c #F0E860", + "c c #F0D860", + "d c #807840", + "e c #2F5FC0", + "f c #1050D0", + "g c #1048B0", + "h c #002870", + "i c #C0C080", + "j c #C0C070", + "k c #F0F070", + "l c #F0E060", + "m c #E0D050", + "n c #00277F", + "o c #00287F", + "p c #1F3F6F", + "q c #1048C0", + "r c #0040B0", + "s c #204080", + "t c #FFF890", + "u c #F0D850", + "v c #E0C840", + "w c #807040", + "x c #A0B06F", + "y c #204880", + "z c #2048A0", + "A c #90A8C0", + "B c #FFF080", + "C c #F0D050", + "D c #C0A830", + "E c #6F682F", + "F c #F0F0A0", + "G c #E0D060", + "H c #B0A040", + "I c #D0B840", + "J c #E0C040", + "K c #D0B030", + "L c #706820", + "M c #5F581F", + "N c #CFBF3F", + "O c #FFF0A0", + "P c #A09830", + "Q c #A08820", + "R c #908030", + "S c #807830", + "T c #707020", + "U c #605820", + "V c #6F672F", + "W c #D0C040", + "X c #F0E880", + "Y c #907820", + "Z c #B09820", + "` c #B09010", + " . c #B08820", + ".. c #806820", + "+. c #5F5F1F", + "@. c #F0E080", + "#. c #B09020", + "$. c #C0B040", + "%. c #A09030", + "&. c #908020", + "*. c #606020", + "=. c #6F5F1F", + "-. c #9F982F", + ";. c #A0872F", + ">. c #6F681F", + ",. c #706020", + " ", + " . + + + @ @ # # $ % & ", + " + * = = = = - ; > , ' ", + " ) ! ~ { ] ^ = - - > / ( ' ", + "_ : < { [ } | 1 - ; > > / 2 ( 3 ", + "{ 4 5 1 6 7 5 8 9 0 a / , b c d ", + "e f g h 8 8 g h i j / k l c m d ", + " n o p q r s t 2 , l c u v w ", + " x y z A B , l u C v D E ", + " @ F > t k G H I J K L M ", + " N @ O / 2 l P Q R S T U V ", + " W m 2 X l I Y Z ` ...+. ", + " W @.l u I R #.Z Y U M ", + " $.G I $.%.R &.Y *.& =. ", + " -.;.>.,.L L ,.& M ", + " "}; + +static struct list_item +{ + const char* name; + const char* gender; + int age; + rtgui_image_t* image; +} items[] = +{ + {"index0", "00", 30, RT_NULL}, + {"index1", "m1", 30, RT_NULL}, + {"index2", "m2", 30, RT_NULL}, + {"index3", "m3", 30, RT_NULL}, + {"index4", "m4", 30, RT_NULL}, + {"index5", "m5", 30, RT_NULL}, + {"index6", "m6", 30, RT_NULL}, + {"index7", "m7", 30, RT_NULL}, + {"index8", "m8", 30, RT_NULL}, + {"index9", "m9", 30, RT_NULL}, + {"index10", "m10", 30, RT_NULL}, + {"index11", "m11", 30, RT_NULL}, + {"index12", "m12", 30, RT_NULL}, + {"index13", "m13", 30, RT_NULL}, + {"index14", "m14", 30, RT_NULL}, + {"index15", "m15", 30, RT_NULL}, + {"index16", "m16", 30, RT_NULL}, + {"index17", "m17", 30, RT_NULL}, + {"index18", "m18", 30, RT_NULL}, + {"index19", "m19", 30, RT_NULL}, +}; + +void _rtgui_listctrl_item_draw(struct rtgui_listctrl *list, + struct rtgui_dc* dc, + rtgui_rect_t* rect, + rt_uint16_t index) +{ + char age_str[8]; + rtgui_rect_t item_rect; + struct list_item *items, *item; + + item_rect = *rect; + item_rect.x1 += 5; + items = (struct list_item*)list->items; + item = &items[index]; + + /* draw text */ + rtgui_dc_draw_text(dc, item->name, &item_rect); item_rect.x1 += 60; + rtgui_dc_draw_vline(dc, item_rect.x1, item_rect.y1, item_rect.y2); + + item_rect.x1 += 5; + rtgui_dc_draw_text(dc, item->gender, &item_rect); item_rect.x1 += 60; + rtgui_dc_draw_vline(dc, item_rect.x1, item_rect.y1, item_rect.y2); + + item_rect.x1 += 5; + rt_snprintf(age_str, sizeof(age_str), "%d", item->age); + rtgui_dc_draw_text(dc, age_str, &item_rect); item_rect.x1 += 40; + rtgui_dc_draw_vline(dc, item_rect.x1, item_rect.y1, item_rect.y2); + + item_rect.x1 += 5; + + /* draw image */ + if (item->image != RT_NULL) + { + rtgui_rect_t image_rect; + + image_rect.x1 = 0; image_rect.y1 = 0; + image_rect.x2 = item->image->w; image_rect.y2 = item->image->h; + rtgui_rect_moveto_align(&item_rect, &image_rect, RTGUI_ALIGN_CENTER_VERTICAL); + rtgui_image_blit(item->image, dc, &image_rect); + } +} + +static void on_items(rtgui_widget_t* widget, struct rtgui_event* event) +{ + rtgui_listctrl_t* ctrl; + /* get listctrl */ + ctrl = RTGUI_LISTCTRL(widget); + + /* 打印当前的项 */ + rt_kprintf("current item: %d\n", ctrl->current_item); +} + +/* 创建用于演示label控件的视图 */ +rtgui_container_t* demo_view_listctrl(void) +{ + rtgui_rect_t rect; + rtgui_container_t* container; + rtgui_label_t* label; + rtgui_listctrl_t* box; + + /* 先创建一个演示用的视图 */ + container = demo_view("List Control Demo"); + + if (item_icon == RT_NULL) + item_icon = rtgui_image_create_from_mem("xpm", + (const rt_uint8_t*)image_xpm, sizeof(image_xpm), RT_TRUE); + items[1].image = item_icon; + + /* 获得视图的位置信息 */ + demo_view_get_rect(container, &rect); + rect.x1 += 5; + rect.x2 -= 5; + rect.y1 += 5; + rect.y2 = rect.y1 + 20; + /* 创建一个label控件 */ + label = rtgui_label_create("List Control: "); + /* 设置label的位置 */ + rtgui_widget_set_rect(RTGUI_WIDGET(label), &rect); + /* container是一个container控件,调用add_child方法添加这个label控件 */ + rtgui_container_add_child(container, RTGUI_WIDGET(label)); + + rect.y1 = rect.y2 + 3; + rect.y2 = 250; + box = rtgui_listctrl_create((rt_uint32_t)items, sizeof(items)/sizeof(items[0]), &rect, + _rtgui_listctrl_item_draw); + rtgui_listctrl_set_onitem(box, on_items); + /* container是一个container控件,调用add_child方法添加这个listctrl控件 */ + rtgui_container_add_child(container, RTGUI_WIDGET(box)); + + return container; +} diff --git a/examples/gui/demo_view_menu.c b/examples/gui/demo_view_menu.c index e92c446795..da323f67a3 100644 --- a/examples/gui/demo_view_menu.c +++ b/examples/gui/demo_view_menu.c @@ -1,70 +1,72 @@ -/* - * 绋嬪簭娓呭崟锛歮enu鎺т欢婕旂ず - * - * 杩欎釜渚嬪瓙浼氬湪鍒涘缓鍑虹殑view涓婃坊鍔犲嚑涓笉鍚岀被鍨嬬殑label鎺т欢 - */ -#include "demo_view.h" -#include -#include - -static rt_bool_t _onmenuitem(struct rtgui_widget *widget, struct rtgui_event* event) -{ - rt_kprintf("menu action!!\n"); - return RT_TRUE; -} - -static const rtgui_menu_item_t sub_items[] = -{ - {RTGUI_ITEM_NORMAL, "item #1", RT_NULL, RT_NULL, 0, _onmenuitem}, - {RTGUI_ITEM_NORMAL, "item #2", RT_NULL, RT_NULL, 0, RT_NULL}, - {RTGUI_ITEM_SEPARATOR, RT_NULL, RT_NULL, RT_NULL, 0, RT_NULL}, - {RTGUI_ITEM_NORMAL, "item #3", RT_NULL, RT_NULL, 0, RT_NULL}, -}; -static const rtgui_menu_item_t items[] = -{ - {RTGUI_ITEM_NORMAL, "item #1", RT_NULL, RT_NULL, 0, RT_NULL}, - {RTGUI_ITEM_NORMAL, "item #2", RT_NULL, RT_NULL, 0, RT_NULL}, - {RTGUI_ITEM_SEPARATOR, RT_NULL, RT_NULL, RT_NULL, 0, RT_NULL}, - {RTGUI_ITEM_SUBMENU, "item #3", RT_NULL, (struct rtgui_menu_item_t *)sub_items, sizeof(sub_items)/sizeof(sub_items[0]), RT_NULL}, -}; -static rtgui_menu_t* menu; - -static void _onmenu(struct rtgui_widget* widget, struct rtgui_event* event) -{ - rtgui_rect_t rect; - - rtgui_widget_get_rect(widget, &rect); - rtgui_widget_rect_to_device(widget, &rect); - - if (menu != RT_NULL) - rtgui_menu_pop(menu, rect.x1, rect.y2 + 5); -} - -/* 鍒涘缓鐢ㄤ簬婕旂ずmenu鎺т欢鐨勮鍥� */ -rtgui_view_t* demo_view_menu(rtgui_workbench_t* workbench) -{ - rtgui_rect_t rect; - rtgui_view_t* view; - rtgui_button_t* button; - - /* 鍏堝垱寤轰竴涓紨绀虹敤鐨勮鍥� */ - view = demo_view(workbench, "MENU View"); - - /* 鑾峰緱瑙嗗浘鐨勪綅缃俊鎭� */ - demo_view_get_rect(view, &rect); - rect.x1 += 5; - rect.x2 = rect.x1 + 100; - rect.y1 += 5; - rect.y2 = rect.y1 + 20; - /* 鍒涘缓涓�涓猙utton鎺т欢 */ - button = rtgui_button_create("Pop Menu"); - /* 璁剧疆button鐨勪綅缃� */ - rtgui_widget_set_rect(RTGUI_WIDGET(button), &rect); - /* view鏄竴涓猚ontainer鎺т欢锛岃皟鐢╝dd_child鏂规硶娣诲姞杩欎釜button鎺т欢 */ - rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(button)); - rtgui_button_set_onbutton(button, _onmenu); - - menu = rtgui_menu_create("Menu Test", RT_NULL, items, sizeof(items)/sizeof(items[0])); - - return view; -} +/* + * 绋嬪簭娓呭崟锛歮enu鎺т欢婕旂ず + * + * 杩欎釜渚嬪瓙浼氬湪鍒涘缓鍑虹殑container涓婃坊鍔犲嚑涓笉鍚岀被鍨嬬殑label鎺т欢 + */ +#include "demo_view.h" +#include +#include + +static rt_bool_t _onmenuitem(struct rtgui_widget *widget, struct rtgui_event* event) +{ + rt_kprintf("menu action!!\n"); + return RT_TRUE; +} + +static const rtgui_menu_item_t sub_items[] = +{ + {RTGUI_ITEM_NORMAL, "item #1", RT_NULL, RT_NULL, 0, _onmenuitem}, + {RTGUI_ITEM_NORMAL, "item #2", RT_NULL, RT_NULL, 0, RT_NULL}, + {RTGUI_ITEM_SEPARATOR, RT_NULL, RT_NULL, RT_NULL, 0, RT_NULL}, + {RTGUI_ITEM_NORMAL, "item #3", RT_NULL, RT_NULL, 0, RT_NULL}, +}; +static const rtgui_menu_item_t items[] = +{ + {RTGUI_ITEM_NORMAL, "item #1", RT_NULL, RT_NULL, 0, RT_NULL}, + {RTGUI_ITEM_NORMAL, "item #2", RT_NULL, RT_NULL, 0, RT_NULL}, + {RTGUI_ITEM_SEPARATOR, RT_NULL, RT_NULL, RT_NULL, 0, RT_NULL}, + {RTGUI_ITEM_SUBMENU, "item #3", RT_NULL, + (struct rtgui_menu_item_t *)sub_items, + sizeof(sub_items)/sizeof(sub_items[0]), RT_NULL}, +}; +static rtgui_menu_t* menu; + +static _onmenu(struct rtgui_widget* widget, struct rtgui_event* event) +{ + rtgui_rect_t rect; + + rtgui_widget_get_rect(widget, &rect); + rtgui_widget_rect_to_device(widget, &rect); + + if (menu != RT_NULL) + rtgui_menu_pop(menu, rect.x1, rect.y2 + 5); +} + +/* 鍒涘缓鐢ㄤ簬婕旂ずmenu鎺т欢鐨勮鍥� */ +rtgui_container_t* demo_view_menu(void) +{ + rtgui_rect_t rect; + rtgui_container_t* container; + rtgui_button_t* button; + + /* 鍏堝垱寤轰竴涓紨绀虹敤鐨勮鍥� */ + container = demo_view("MENU View"); + + /* 鑾峰緱瑙嗗浘鐨勪綅缃俊鎭� */ + demo_view_get_rect(container, &rect); + rect.x1 += 5; + rect.x2 = rect.x1 + 100; + rect.y1 += 5; + rect.y2 = rect.y1 + 20; + /* 鍒涘缓涓�涓猙utton鎺т欢 */ + button = rtgui_button_create("Pop Menu"); + /* 璁剧疆button鐨勪綅缃� */ + rtgui_widget_set_rect(RTGUI_WIDGET(button), &rect); + /* container鏄竴涓猚ontainer鎺т欢锛岃皟鐢╝dd_child鏂规硶娣诲姞杩欎釜button鎺т欢 */ + rtgui_container_add_child(container, RTGUI_WIDGET(button)); + rtgui_button_set_onbutton(button, _onmenu); + + menu = rtgui_menu_create("Menu Test", RT_NULL, items, sizeof(items)/sizeof(items[0])); + + return container; +} diff --git a/examples/gui/demo_view_module.c b/examples/gui/demo_view_module.c index c1ce83b6f3..e98beff5d3 100644 --- a/examples/gui/demo_view_module.c +++ b/examples/gui/demo_view_module.c @@ -1,77 +1,77 @@ -/* - * 程序清单:DC上显示图像演示 - * - * 这个例子会在创建出的view上显示图像 - */ - -#include "demo_view.h" -#include -#include -#include - -#ifdef RT_USING_MODULE -#if defined(RTGUI_USING_DFS_FILERW) || defined(RTGUI_USING_STDIO_FILERW) -static rtgui_view_t* _view = RT_NULL; - -/* 打开按钮的回调函数 */ -static void open_btn_onbutton(rtgui_widget_t* widget, struct rtgui_event* event) -{ - rtgui_filelist_view_t *view; - rtgui_workbench_t *workbench; - rtgui_rect_t rect; - - /* 获得顶层的workbench */ - workbench = RTGUI_WORKBENCH(rtgui_widget_get_toplevel(widget)); - rtgui_widget_get_rect(RTGUI_WIDGET(workbench), &rect); - - /* WIN32平台上和真实设备上的初始路径处理 */ -#ifdef _WIN32 - view = rtgui_filelist_view_create(workbench, "d:\\", "*.*", &rect); -#else - view = rtgui_filelist_view_create(workbench, "/", "*.*", &rect); -#endif - /* 模态显示一个文件列表视图,以提供给用户选择图像文件 */ - if (rtgui_view_show(RTGUI_VIEW(view), RT_TRUE) == RTGUI_MODAL_OK) - { - char path[32], name[8]; - - /* 设置文件路径的标签 */ - rtgui_filelist_view_get_fullpath(view, path, sizeof(path)); - - rt_memset(name, 0, sizeof(name)); - - /* 获得应用模块的类型 */ - if (rt_strstr(path, ".mo") != RT_NULL || rt_strstr(path, ".so") != RT_NULL) - { - rt_module_open(path); - } - } - - /* 删除 文件列表 视图 */ - rtgui_view_destroy(RTGUI_VIEW(view)); - rtgui_view_show(_view, RT_FALSE); -} - -/* 创建用于显示应用模块的演示视图 */ -rtgui_view_t* demo_view_module(rtgui_workbench_t* workbench) -{ - rtgui_rect_t rect; - rtgui_button_t* open_btn; - - /* 先创建一个演示视图 */ - _view = demo_view(workbench, "应用模块演示"); - - /* 添加一个按钮 */ - demo_view_get_rect(_view, &rect); - rect.x1 += 5; rect.x2 = rect.x1 + 120; - rect.y2 = rect.y1 + 20; - open_btn = rtgui_button_create("打开应用模块"); - rtgui_container_add_child(RTGUI_CONTAINER(_view), RTGUI_WIDGET(open_btn)); - rtgui_widget_set_rect(RTGUI_WIDGET(open_btn), &rect); - rtgui_button_set_onbutton(open_btn, open_btn_onbutton); - - return _view; -} -#endif -#endif - +/* + * 程序清单:DC上显示图像演示 + * + * 这个例子会在创建出的view上显示图像 + */ + +#include "demo_view.h" +#include +#include +#include + +#ifdef RT_USING_MODULE +#if defined(RTGUI_USING_DFS_FILERW) || defined(RTGUI_USING_STDIO_FILERW) +static rtgui_container_t* _view = RT_NULL; + +/* 打开按钮的回调函数 */ +static void open_btn_onbutton(rtgui_widget_t* widget, struct rtgui_event* event) +{ + rtgui_filelist_view_t *view; + rtgui_workbench_t *workbench; + rtgui_rect_t rect; + + /* 获得顶层的workbench */ + workbench = RTGUI_WORKBENCH(rtgui_widget_get_toplevel(widget)); + rtgui_widget_get_rect(RTGUI_WIDGET(workbench), &rect); + + /* WIN32平台上和真实设备上的初始路径处理 */ +#ifdef _WIN32 + view = rtgui_filelist_view_create(workbench, "d:\\", "*.*", &rect); +#else + view = rtgui_filelist_view_create(workbench, "/", "*.*", &rect); +#endif + /* 模态显示一个文件列表视图,以提供给用户选择图像文件 */ + if (rtgui_container_show(RTGUI_CONTAINER(view), RT_TRUE) == RTGUI_MODAL_OK) + { + char path[32], name[8]; + + /* 设置文件路径的标签 */ + rtgui_filelist_view_get_fullpath(view, path, sizeof(path)); + + rt_memset(name, 0, sizeof(name)); + + /* 获得应用模块的类型 */ + if (rt_strstr(path, ".mo") != RT_NULL || rt_strstr(path, ".so") != RT_NULL) + { + rt_module_open(path); + } + } + + /* 删除 文件列表 视图 */ + rtgui_container_destroy(RTGUI_CONTAINER(view)); + rtgui_container_show(_view, RT_FALSE); +} + +/* 创建用于显示应用模块的演示视图 */ +rtgui_container_t* demo_view_module(rtgui_workbench_t* workbench) +{ + rtgui_rect_t rect; + rtgui_button_t* open_btn; + + /* 先创建一个演示视图 */ + _view = demo_view(workbench, "应用模块演示"); + + /* 添加一个按钮 */ + demo_view_get_rect(_view, &rect); + rect.x1 += 5; rect.x2 = rect.x1 + 120; + rect.y2 = rect.y1 + 20; + open_btn = rtgui_button_create("打开应用模块"); + rtgui_container_add_child(RTGUI_CONTAINER(_view), RTGUI_WIDGET(open_btn)); + rtgui_widget_set_rect(RTGUI_WIDGET(open_btn), &rect); + rtgui_button_set_onbutton(open_btn, open_btn_onbutton); + + return _view; +} +#endif +#endif + diff --git a/examples/gui/demo_view_mywidget.c b/examples/gui/demo_view_mywidget.c index 1c0e6de693..d9f917980f 100644 --- a/examples/gui/demo_view_mywidget.c +++ b/examples/gui/demo_view_mywidget.c @@ -1,42 +1,42 @@ -/* - * 绋嬪簭娓呭崟锛氳嚜瀹氫箟鎺т欢婕旂ず - * - * 杩欎釜渚嬪瓙浼氬湪鍒涘缓鍑虹殑view涓婃坊鍔犱袱涓嚜瀹氫箟鎺т欢 - */ -#include "demo_view.h" -#include "mywidget.h" - -/* 鍒涘缓鐢ㄤ簬婕旂ず鑷畾涔夋帶浠剁殑瑙嗗浘 */ -rtgui_view_t *demo_view_mywidget(rtgui_workbench_t* workbench) -{ - rtgui_view_t *view; - rtgui_rect_t rect; - rtgui_mywidget_t *mywidget; - - /* 鍏堝垱寤轰竴涓紨绀虹敤鐨勮鍥� */ - view = demo_view(workbench, "MyWidget View"); - - /* 鑾峰緱瑙嗗浘鐨勪綅缃俊鎭� */ - demo_view_get_rect(view, &rect); - rect.x1 += 5; - rect.x2 = rect.y1 + 80; - rect.y1 += 5; - rect.y2 = rect.y1 + 80; - /* 鍒涘缓涓�涓嚜瀹氫箟鎺т欢 */ - mywidget = rtgui_mywidget_create(&rect); - /* view鏄竴涓猚ontainer鎺т欢锛岃皟鐢╝dd_child鏂规硶娣诲姞杩欎釜鑷帶浠� */ - rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(mywidget)); - - /* 鑾峰緱瑙嗗浘鐨勪綅缃俊鎭� */ - demo_view_get_rect(view, &rect); - rect.x1 += 25; - rect.x2 = rect.y1 + 40; - rect.y1 += 5 + 100; - rect.y2 = rect.y1 + 40; - /* 鍒涘缓涓�涓嚜瀹氫箟鎺т欢 */ - mywidget = rtgui_mywidget_create(&rect); - /* view鏄竴涓猚ontainer鎺т欢锛岃皟鐢╝dd_child鏂规硶娣诲姞杩欎釜鑷帶浠� */ - rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(mywidget)); - - return view; -} +/* + * 绋嬪簭娓呭崟锛氳嚜瀹氫箟鎺т欢婕旂ず + * + * 杩欎釜渚嬪瓙浼氬湪鍒涘缓鍑虹殑container涓婃坊鍔犱袱涓嚜瀹氫箟鎺т欢 + */ +#include "demo_view.h" +#include "mywidget.h" + +/* 鍒涘缓鐢ㄤ簬婕旂ず鑷畾涔夋帶浠剁殑瑙嗗浘 */ +rtgui_container_t *demo_view_mywidget(void) +{ + rtgui_container_t *container; + rtgui_rect_t rect; + rtgui_mywidget_t *mywidget; + + /* 鍏堝垱寤轰竴涓紨绀虹敤鐨勮鍥� */ + container = demo_view("MyWidget View"); + + /* 鑾峰緱瑙嗗浘鐨勪綅缃俊鎭� */ + demo_view_get_rect(container, &rect); + rect.x1 += 5; + rect.x2 = rect.y1 + 80; + rect.y1 += 5; + rect.y2 = rect.y1 + 80; + /* 鍒涘缓涓�涓嚜瀹氫箟鎺т欢 */ + mywidget = rtgui_mywidget_create(&rect); + /* container鏄竴涓猚ontainer鎺т欢锛岃皟鐢╝dd_child鏂规硶娣诲姞杩欎釜鑷帶浠� */ + rtgui_container_add_child(container, RTGUI_WIDGET(mywidget)); + + /* 鑾峰緱瑙嗗浘鐨勪綅缃俊鎭� */ + demo_view_get_rect(container, &rect); + rect.x1 += 25; + rect.x2 = rect.y1 + 40; + rect.y1 += 5 + 100; + rect.y2 = rect.y1 + 40; + /* 鍒涘缓涓�涓嚜瀹氫箟鎺т欢 */ + mywidget = rtgui_mywidget_create(&rect); + /* container鏄竴涓猚ontainer鎺т欢锛岃皟鐢╝dd_child鏂规硶娣诲姞杩欎釜鑷帶浠� */ + rtgui_container_add_child(container, RTGUI_WIDGET(mywidget)); + + return container; +} diff --git a/examples/gui/demo_view_notebook.c b/examples/gui/demo_view_notebook.c index 4ec6c7c442..97ad06321e 100644 --- a/examples/gui/demo_view_notebook.c +++ b/examples/gui/demo_view_notebook.c @@ -1,53 +1,53 @@ -/* - * 绋嬪簭娓呭崟锛歯otebook鎺т欢婕旂ず - * - * 杩欎釜渚嬪瓙浼氬湪鍒涘缓鍑虹殑view涓婃紨绀簄otebook鎺т欢 - */ - -#include "demo_view.h" -#include -#include - -const static struct rtgui_listbox_item items[] = -{ - {"list #0", RT_NULL}, - {"list #1", RT_NULL}, - {"list #2", RT_NULL}, - {"list #3", RT_NULL}, -}; - -const static struct rtgui_listbox_item items2[] = -{ - {"list #0", RT_NULL}, - {"list #1", RT_NULL}, - {"list #2", RT_NULL}, - {"new list #1", RT_NULL}, - {"new list #2", RT_NULL}, -}; - -/* 鍒涘缓鐢ㄤ簬婕旂ずnotebook鎺т欢鐨勮鍥� */ -rtgui_view_t* demo_view_notebook(rtgui_workbench_t* workbench) -{ - rtgui_rect_t rect; - rtgui_view_t* view; - rtgui_notebook_t* notebook; - rtgui_listbox_t* box; - - /* 鍏堝垱寤轰竴涓紨绀虹敤鐨勮鍥� */ - view = demo_view(workbench, "Notebook View"); - - /* 鑾峰緱瑙嗗浘鐨勪綅缃俊鎭� */ - demo_view_get_rect(view, &rect); - - notebook = rtgui_notebook_create(&rect, RTGUI_NOTEBOOK_BOTTOM); - /* view鏄竴涓猚ontainer鎺т欢锛岃皟鐢╝dd_child鏂规硶娣诲姞杩欎釜notebook鎺т欢 */ - rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(notebook)); - - box = rtgui_listbox_create(items, sizeof(items)/sizeof(struct rtgui_listbox_item), &rect); - rtgui_notebook_add(notebook, "Tab 1", RTGUI_WIDGET(box)); - - box = rtgui_listbox_create(items2, sizeof(items2)/sizeof(struct rtgui_listbox_item), &rect); - rtgui_notebook_add(notebook, "Tab 2", RTGUI_WIDGET(box)); - - return view; -} +/* + * 绋嬪簭娓呭崟锛歯otebook鎺т欢婕旂ず + * + * 杩欎釜渚嬪瓙浼氬湪鍒涘缓鍑虹殑container涓婃紨绀簄otebook鎺т欢 + */ + +#include "demo_view.h" +#include +#include + +const static struct rtgui_listbox_item items[] = +{ + {"list #0", RT_NULL}, + {"list #1", RT_NULL}, + {"list #2", RT_NULL}, + {"list #3", RT_NULL}, +}; + +const static struct rtgui_listbox_item items2[] = +{ + {"list #0", RT_NULL}, + {"list #1", RT_NULL}, + {"list #2", RT_NULL}, + {"new list #1", RT_NULL}, + {"new list #2", RT_NULL}, +}; + +/* 鍒涘缓鐢ㄤ簬婕旂ずnotebook鎺т欢鐨勮鍥� */ +rtgui_container_t* demo_view_notebook(void) +{ + rtgui_rect_t rect; + rtgui_container_t* container; + struct rtgui_notebook *notebook; + rtgui_listbox_t* box; + + /* 鍏堝垱寤轰竴涓紨绀虹敤鐨勮鍥� */ + container = demo_view("Notebook View"); + + /* 鑾峰緱瑙嗗浘鐨勪綅缃俊鎭� */ + demo_view_get_rect(container, &rect); + + notebook = rtgui_notebook_create(&rect, RTGUI_NOTEBOOK_BOTTOM); + /* container鏄竴涓猚ontainer鎺т欢锛岃皟鐢╝dd_child鏂规硶娣诲姞杩欎釜notebook鎺т欢 */ + rtgui_container_add_child(container, RTGUI_WIDGET(notebook)); + + box = rtgui_listbox_create(items, sizeof(items)/sizeof(struct rtgui_listbox_item), &rect); + rtgui_notebook_add(notebook, "Tab 1", RTGUI_WIDGET(box)); + + box = rtgui_listbox_create(items2, sizeof(items2)/sizeof(struct rtgui_listbox_item), &rect); + rtgui_notebook_add(notebook, "Tab 2", RTGUI_WIDGET(box)); + + return container; +} diff --git a/examples/gui/demo_view_progressbar.c b/examples/gui/demo_view_progressbar.c index 620668d7d3..40eede7a89 100644 --- a/examples/gui/demo_view_progressbar.c +++ b/examples/gui/demo_view_progressbar.c @@ -1,59 +1,76 @@ -#include "demo_view.h" -#include -#include -#include - -static rtgui_progressbar_t* hbar; -static rtgui_progressbar_t* vbar; -static rtgui_timer_t *bar_timer = RT_NULL; - -void progressbar_timeout(struct rtgui_timer* timer, void* parameter) -{ - static rt_uint32_t value = 0; - - value ++; - if (value == 100) value = 0; - - rtgui_progressbar_set_value(hbar, value); - rtgui_progressbar_set_value(vbar, value); -} - -rtgui_view_t *demo_view_progressbar(rtgui_workbench_t* workbench) -{ - rtgui_view_t *view; - rtgui_rect_t rect; - rtgui_label_t *label; - - /* create a demo view */ - view = demo_view(workbench, "ProgressBar View"); - - /* get demo view rect */ - demo_view_get_rect(view, &rect); - label = rtgui_label_create("水平进度条:"); - rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(label)); - rect.x1 += 5; rect.x2 -= 5; - rect.y1 += 5; rect.y2 = rect.y1 + 18; - rtgui_widget_set_rect(RTGUI_WIDGET(label), &rect); - rect.y1 += 20; rect.y2 = rect.y1 + 18; - hbar = rtgui_progressbar_create(RTGUI_HORIZONTAL, 100, &rect); - rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(hbar)); - - /* get demo view rect */ - demo_view_get_rect(view, &rect); - label = rtgui_label_create("垂直进度条:"); - rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(label)); - rect.x1 += 5; rect.x2 -= 5; - rect.y1 += 45; rect.y2 = rect.y1 + 18; - rtgui_widget_set_rect(RTGUI_WIDGET(label), &rect); - rect.x1 += 110; rect.x2 = rect.x1 + 20; - rect.y1 += 18 + 5; rect.y2 = rect.y1 + 150; - vbar = rtgui_progressbar_create(RTGUI_VERTICAL, 100, &rect); - rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(vbar)); - - bar_timer = rtgui_timer_create(50, RT_TIMER_FLAG_PERIODIC, - progressbar_timeout, RT_NULL); - rtgui_timer_start(bar_timer); - - return view; -} - +#include "demo_view.h" +#include +#include +#include + +static rtgui_progressbar_t* hbar; +static rtgui_progressbar_t* vbar; +static rtgui_timer_t *bar_timer = RT_NULL; + +void progressbar_timeout(struct rtgui_timer* timer, void* parameter) +{ + static rt_uint32_t value = 0; + + value++; + if (value == 100) + value = 0; + + rtgui_progressbar_set_value(hbar, value); + rtgui_progressbar_set_value(vbar, value); +} + +static rt_bool_t start_timer(struct rtgui_object *object, struct rtgui_event *event) +{ + if (bar_timer != RT_NULL) + rtgui_timer_start(bar_timer); + return RT_TRUE; +} + +static rt_bool_t stop_timer(struct rtgui_object *object, struct rtgui_event *event) +{ + if (bar_timer != RT_NULL) + rtgui_timer_stop(bar_timer); + return RT_TRUE; +} + +rtgui_container_t *demo_view_progressbar(void) +{ + rtgui_container_t *container; + rtgui_rect_t rect; + rtgui_label_t *label; + + /* create a demo container */ + container = demo_view("ProgressBar View"); + + /* get demo container rect */ + demo_view_get_rect(container, &rect); + label = rtgui_label_create("水平进度条:"); + rtgui_container_add_child(container, RTGUI_WIDGET(label)); + rect.x1 += 5; rect.x2 -= 5; + rect.y1 += 5; rect.y2 = rect.y1 + 18; + rtgui_widget_set_rect(RTGUI_WIDGET(label), &rect); + rect.y1 += 20; rect.y2 = rect.y1 + 18; + hbar = rtgui_progressbar_create(RTGUI_HORIZONTAL, 100, &rect); + rtgui_container_add_child(container, RTGUI_WIDGET(hbar)); + + /* get demo container rect */ + demo_view_get_rect(container, &rect); + label = rtgui_label_create("垂直进度条:"); + rtgui_container_add_child(container, RTGUI_WIDGET(label)); + rect.x1 += 5; rect.x2 -= 5; + rect.y1 += 45; rect.y2 = rect.y1 + 18; + rtgui_widget_set_rect(RTGUI_WIDGET(label), &rect); + rect.x1 += 110; rect.x2 = rect.x1 + 20; + rect.y1 += 18 + 5; rect.y2 = rect.y1 + 150; + vbar = rtgui_progressbar_create(RTGUI_VERTICAL, 100, &rect); + rtgui_container_add_child(container, RTGUI_WIDGET(vbar)); + + bar_timer = rtgui_timer_create(50, RT_TIMER_FLAG_PERIODIC, + progressbar_timeout, RT_NULL); + + rtgui_widget_set_onshow(RTGUI_WIDGET(container), start_timer); + rtgui_widget_set_onhide(RTGUI_WIDGET(container), stop_timer); + + return container; +} + diff --git a/examples/gui/demo_view_radiobox.c b/examples/gui/demo_view_radiobox.c index ba204c8d7f..1fa8b36f15 100644 --- a/examples/gui/demo_view_radiobox.c +++ b/examples/gui/demo_view_radiobox.c @@ -1,69 +1,69 @@ -/* - * 绋嬪簭娓呭崟锛歳adiobox鎺т欢婕旂ず - * - * 杩欎釜渚嬪瓙浼氬湪鍒涘缓鍑虹殑view涓婃坊鍔犱袱涓笉鍚屾柟鍚戠殑radiobox鎺т欢 - */ - -#include "demo_view.h" -#include - -/* 鐢ㄤ簬鏄剧ず鍨傜洿鏂瑰悜鐨剅adio鏂囨湰椤规暟缁� */ -static char* radio_item_v[5] = - { - "one", - "two", - "three", - "item 1", - "item 2" - }; - -/* 鐢ㄤ簬鏄剧ず姘村钩鏂瑰悜鐨剅adio鏂囨湰椤规暟缁� */ -static char* radio_item_h[3] = - { - "one", "two", "three" - }; - -/* 鍒涘缓鐢ㄤ簬婕旂ずradiobox鎺т欢鐨勮鍥� */ -rtgui_view_t* demo_view_radiobox(rtgui_workbench_t* workbench) -{ - rtgui_rect_t rect; - rtgui_view_t* view; - rtgui_radiobox_t* radiobox; - - /* 鍏堝垱寤轰竴涓紨绀虹敤鐨勮鍥� */ - view = demo_view(workbench, "RadioBox View"); - - /* 鑾峰緱瑙嗗浘鐨勪綅缃俊鎭� */ - demo_view_get_rect(view, &rect); - rect.x1 += 5; - rect.x2 -= 5; - rect.y1 += 5; - rect.y2 = rect.y1 + 5 * 25; - - /* 鍒涘缓涓�涓瀭鐩存柟鍚戞樉绀虹殑radiobox鎺т欢锛屾枃鏈」鏄痳adio_item_v鏁扮粍锛屽叡5涓」 */ - radiobox = rtgui_radiobox_create("Radio Box", RTGUI_VERTICAL, radio_item_v, 5); - /* 璁剧疆褰撳墠閫夋嫨鐨勬暟缁勬槸绗�0椤� */ - rtgui_radiobox_set_selection(radiobox, 0); - /* 娣诲姞radiobox鎺т欢鍒拌鍥句腑 */ - rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(radiobox)); - /* 璁剧疆radiobox鎺т欢鐨勪綅缃俊鎭� */ - rtgui_widget_set_rect(RTGUI_WIDGET(radiobox), &rect); - - /* 鑾峰緱瑙嗗浘鐨勪綅缃俊鎭� */ - demo_view_get_rect(view, &rect); - rect.x1 += 5; - rect.x2 -= 5; - rect.y1 += 5 + 5 * 25; - rect.y2 = rect.y1 + 60; - - /* 鍒涘缓涓�涓按骞虫柟鍚戞樉绀虹殑radiobox鎺т欢锛屾枃鏈」鏄痳adio_item_h鏁扮粍锛屽叡3涓」 */ - radiobox = rtgui_radiobox_create("Radio Box", RTGUI_HORIZONTAL, radio_item_h, 3); - /* 璁剧疆褰撳墠閫夋嫨鐨勬暟缁勬槸绗�0椤� */ - rtgui_radiobox_set_selection(radiobox, 0); - /* 娣诲姞radiobox鎺т欢鍒拌鍥句腑 */ - rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(radiobox)); - /* 璁剧疆radiobox鎺т欢鐨勪綅缃俊鎭� */ - rtgui_widget_set_rect(RTGUI_WIDGET(radiobox), &rect); - - return view; -} +/* + * 绋嬪簭娓呭崟锛歳adiobox鎺т欢婕旂ず + * + * 杩欎釜渚嬪瓙浼氬湪鍒涘缓鍑虹殑container涓婃坊鍔犱袱涓笉鍚屾柟鍚戠殑radiobox鎺т欢 + */ + +#include "demo_view.h" +#include + +/* 鐢ㄤ簬鏄剧ず鍨傜洿鏂瑰悜鐨剅adio鏂囨湰椤规暟缁� */ +static char* radio_item_v[5] = + { + "one", + "two", + "three", + "item 1", + "item 2" + }; + +/* 鐢ㄤ簬鏄剧ず姘村钩鏂瑰悜鐨剅adio鏂囨湰椤规暟缁� */ +static char* radio_item_h[3] = + { + "one", "two", "three" + }; + +/* 鍒涘缓鐢ㄤ簬婕旂ずradiobox鎺т欢鐨勮鍥� */ +rtgui_container_t* demo_view_radiobox(void) +{ + rtgui_rect_t rect; + rtgui_container_t* container; + rtgui_radiobox_t* radiobox; + + /* 鍏堝垱寤轰竴涓紨绀虹敤鐨勮鍥� */ + container = demo_view("RadioBox View"); + + /* 鑾峰緱瑙嗗浘鐨勪綅缃俊鎭� */ + demo_view_get_rect(container, &rect); + rect.x1 += 5; + rect.x2 -= 5; + rect.y1 += 5; + rect.y2 = rect.y1 + 5 * 25; + + /* 鍒涘缓涓�涓瀭鐩存柟鍚戞樉绀虹殑radiobox鎺т欢锛屾枃鏈」鏄痳adio_item_v鏁扮粍锛屽叡5涓」 */ + radiobox = rtgui_radiobox_create("Radio Box", RTGUI_VERTICAL, radio_item_v, 5); + /* 璁剧疆褰撳墠閫夋嫨鐨勬暟缁勬槸绗�0椤� */ + rtgui_radiobox_set_selection(radiobox, 0); + /* 娣诲姞radiobox鎺т欢鍒拌鍥句腑 */ + rtgui_container_add_child(container, RTGUI_WIDGET(radiobox)); + /* 璁剧疆radiobox鎺т欢鐨勪綅缃俊鎭� */ + rtgui_widget_set_rect(RTGUI_WIDGET(radiobox), &rect); + + /* 鑾峰緱瑙嗗浘鐨勪綅缃俊鎭� */ + demo_view_get_rect(container, &rect); + rect.x1 += 5; + rect.x2 -= 5; + rect.y1 += 5 + 5 * 25; + rect.y2 = rect.y1 + 60; + + /* 鍒涘缓涓�涓按骞虫柟鍚戞樉绀虹殑radiobox鎺т欢锛屾枃鏈」鏄痳adio_item_h鏁扮粍锛屽叡3涓」 */ + radiobox = rtgui_radiobox_create("Radio Box", RTGUI_HORIZONTAL, radio_item_h, 3); + /* 璁剧疆褰撳墠閫夋嫨鐨勬暟缁勬槸绗�0椤� */ + rtgui_radiobox_set_selection(radiobox, 0); + /* 娣诲姞radiobox鎺т欢鍒拌鍥句腑 */ + rtgui_container_add_child(container, RTGUI_WIDGET(radiobox)); + /* 璁剧疆radiobox鎺т欢鐨勪綅缃俊鎭� */ + rtgui_widget_set_rect(RTGUI_WIDGET(radiobox), &rect); + + return container; +} diff --git a/examples/gui/demo_view_scrollbar.c b/examples/gui/demo_view_scrollbar.c index 0c712c2552..db9b1a7e75 100644 --- a/examples/gui/demo_view_scrollbar.c +++ b/examples/gui/demo_view_scrollbar.c @@ -1,43 +1,43 @@ -#include "demo_view.h" -#include -#include -#include - -rtgui_view_t *demo_view_scrollbar(rtgui_workbench_t* workbench) -{ - rtgui_view_t *view; - rtgui_rect_t rect; - rtgui_label_t *label; - rtgui_scrollbar_t* hbar; - rtgui_scrollbar_t* vbar; - - /* create a demo view */ - view = demo_view(workbench, "ScrollBar View"); - - /* get demo view rect */ - demo_view_get_rect(view, &rect); - label = rtgui_label_create("horizontal bar:"); - rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(label)); - rect.x1 += 5; rect.x2 -= 5; - rect.y1 += 5; rect.y2 = rect.y1 + 18; - rtgui_widget_set_rect(RTGUI_WIDGET(label), &rect); - rect.y1 += 20; rect.y2 = rect.y1 + 18; - hbar = rtgui_scrollbar_create(RTGUI_HORIZONTAL, &rect); - rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(hbar)); - - /* get demo view rect */ - demo_view_get_rect(view, &rect); - label = rtgui_label_create("vertical bar:"); - rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(label)); - rect.x1 += 5; rect.x2 -= 5; - rect.y1 += 45; rect.y2 = rect.y1 + 18; - rtgui_widget_set_rect(RTGUI_WIDGET(label), &rect); - rect.x1 += 110; rect.x2 = rect.x1 + 20; - rect.y1 += 18 + 5; rect.y2 = rect.y1 + 150; - vbar = rtgui_scrollbar_create(RTGUI_VERTICAL, &rect); - rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(vbar)); - rtgui_scrollbar_set_line_step(vbar, 1); - // RTGUI_WIDGET_DISABLE(RTGUI_WIDGET(vbar)); - - return view; -} +#include "demo_view.h" +#include +#include +#include + +rtgui_container_t *demo_view_scrollbar(void) +{ + rtgui_container_t *container; + rtgui_rect_t rect; + rtgui_label_t *label; + rtgui_scrollbar_t* hbar; + rtgui_scrollbar_t* vbar; + + /* create a demo container */ + container = demo_view("ScrollBar View"); + + /* get demo container rect */ + demo_view_get_rect(container, &rect); + label = rtgui_label_create("horizontal bar:"); + rtgui_container_add_child(container, RTGUI_WIDGET(label)); + rect.x1 += 5; rect.x2 -= 5; + rect.y1 += 5; rect.y2 = rect.y1 + 18; + rtgui_widget_set_rect(RTGUI_WIDGET(label), &rect); + rect.y1 += 20; rect.y2 = rect.y1 + 18; + hbar = rtgui_scrollbar_create(RTGUI_HORIZONTAL, &rect); + rtgui_container_add_child(container, RTGUI_WIDGET(hbar)); + + /* get demo container rect */ + demo_view_get_rect(container, &rect); + label = rtgui_label_create("vertical bar:"); + rtgui_container_add_child(container, RTGUI_WIDGET(label)); + rect.x1 += 5; rect.x2 -= 5; + rect.y1 += 45; rect.y2 = rect.y1 + 18; + rtgui_widget_set_rect(RTGUI_WIDGET(label), &rect); + rect.x1 += 110; rect.x2 = rect.x1 + 20; + rect.y1 += 18 + 5; rect.y2 = rect.y1 + 150; + vbar = rtgui_scrollbar_create(RTGUI_VERTICAL, &rect); + rtgui_container_add_child(container, RTGUI_WIDGET(vbar)); + rtgui_scrollbar_set_line_step(vbar, 1); + // RTGUI_WIDGET_DISABLE(RTGUI_WIDGET(vbar)); + + return container; +} diff --git a/examples/gui/demo_view_slider.c b/examples/gui/demo_view_slider.c index e8efdd729c..62601989fc 100644 --- a/examples/gui/demo_view_slider.c +++ b/examples/gui/demo_view_slider.c @@ -1,42 +1,42 @@ -#include "demo_view.h" -#include -#include -#include - -rtgui_view_t *demo_view_slider(rtgui_workbench_t* workbench) -{ - rtgui_view_t *view; - rtgui_rect_t rect; - rtgui_label_t *label; - rtgui_slider_t *slider; - - /* create a demo view */ - view = demo_view(workbench, "Slider View"); - - /* get demo view rect */ - demo_view_get_rect(view, &rect); - label = rtgui_label_create("horizontal slider:"); - rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(label)); - rect.x1 += 5; rect.x2 -= 5; - rect.y1 += 5; rect.y2 = rect.y1 + 18; - rtgui_widget_set_rect(RTGUI_WIDGET(label), &rect); - rect.y1 += 20; rect.y2 = rect.y1 + 18; - slider = rtgui_slider_create(0, 100, RTGUI_HORIZONTAL); - rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(slider)); - rtgui_widget_set_rect(RTGUI_WIDGET(slider), &rect); - - /* get demo view rect */ - demo_view_get_rect(view, &rect); - label = rtgui_label_create("vertical slider:"); - rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(label)); - rect.x1 += 5; rect.x2 -= 5; - rect.y1 += 50; rect.y2 = rect.y1 + 18; - rtgui_widget_set_rect(RTGUI_WIDGET(label), &rect); - rect.x1 += 110; rect.x2 = rect.x1 + 20; - rect.y1 += 18 + 5; rect.y2 = rect.y1 + 150; - slider = rtgui_slider_create(0, 100, RTGUI_VERTICAL); - rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(slider)); - rtgui_widget_set_rect(RTGUI_WIDGET(slider), &rect); - - return view; -} +#include "demo_view.h" +#include +#include +#include + +rtgui_container_t *demo_view_slider(void) +{ + rtgui_container_t *container; + rtgui_rect_t rect; + rtgui_label_t *label; + rtgui_slider_t *slider; + + /* create a demo container */ + container = demo_view("Slider View"); + + /* get demo container rect */ + demo_view_get_rect(container, &rect); + label = rtgui_label_create("horizontal slider:"); + rtgui_container_add_child(container, RTGUI_WIDGET(label)); + rect.x1 += 5; rect.x2 -= 5; + rect.y1 += 5; rect.y2 = rect.y1 + 18; + rtgui_widget_set_rect(RTGUI_WIDGET(label), &rect); + rect.y1 += 20; rect.y2 = rect.y1 + 18; + slider = rtgui_slider_create(0, 100, RTGUI_HORIZONTAL); + rtgui_container_add_child(container, RTGUI_WIDGET(slider)); + rtgui_widget_set_rect(RTGUI_WIDGET(slider), &rect); + + /* get demo container rect */ + demo_view_get_rect(container, &rect); + label = rtgui_label_create("vertical slider:"); + rtgui_container_add_child(container, RTGUI_WIDGET(label)); + rect.x1 += 5; rect.x2 -= 5; + rect.y1 += 50; rect.y2 = rect.y1 + 18; + rtgui_widget_set_rect(RTGUI_WIDGET(label), &rect); + rect.x1 += 110; rect.x2 = rect.x1 + 20; + rect.y1 += 18 + 5; rect.y2 = rect.y1 + 150; + slider = rtgui_slider_create(0, 100, RTGUI_VERTICAL); + rtgui_container_add_child(container, RTGUI_WIDGET(slider)); + rtgui_widget_set_rect(RTGUI_WIDGET(slider), &rect); + + return container; +} diff --git a/examples/gui/demo_view_textbox.c b/examples/gui/demo_view_textbox.c index e4b8646754..574915c1af 100644 --- a/examples/gui/demo_view_textbox.c +++ b/examples/gui/demo_view_textbox.c @@ -1,103 +1,102 @@ -/* - * 程序清单:texbox控件演示 - * - * 这个例子会在创建出的view上添加几个不同类型的textbox控件 - */ -#include "demo_view.h" -#include -#include - -/* 创建用于演示textbox控件的视图 */ -rtgui_view_t* demo_view_textbox(rtgui_workbench_t* workbench) -{ - rtgui_rect_t rect, textbox_rect; - rtgui_view_t* view; - rtgui_label_t* label; - rtgui_textbox_t* text; - - /* 先创建一个演示用的视图 */ - view = demo_view(workbench, "TextBox View"); - - /* 获得视图的位置信息 */ - demo_view_get_rect(view, &rect); - rect.x1 += 5; - rect.x2 = rect.x1 + 30; - rect.y1 += 5; - rect.y2 = rect.y1 + 20; - /* 创建一个label控件 */ - label = rtgui_label_create("名字: "); - /* 设置label的位置 */ - rtgui_widget_set_rect(RTGUI_WIDGET(label), &rect); - /* view是一个container控件,调用add_child方法添加这个label控件 */ - rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(label)); - - /* 让textbox_rect赋值到rect,以计算textbox控件的位置 */ - textbox_rect = rect; - textbox_rect.x1 = textbox_rect.x2 + 5; - textbox_rect.x2 = textbox_rect.x1 + 160; - /* 创建一个textbox控件 */ - text = rtgui_textbox_create("bernard",RTGUI_TEXTBOX_SINGLE); - /* 设置textbox控件的位置 */ - rtgui_widget_set_rect(RTGUI_WIDGET(text), &textbox_rect); - /* 添加textbox控件到视图中 */ - rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(text)); - - /* 计算下一个label控件的位置 */ - rect.y1 += 23; - rect.y2 = rect.y1 + 20; - /* 创建一个label控件 */ - label = rtgui_label_create("邮件: "); - /* 设置label的位置 */ - rtgui_widget_set_rect(RTGUI_WIDGET(label), &rect); - /* 添加label控件到视图中 */ - rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(label)); - textbox_rect = rect; - textbox_rect.x1 = textbox_rect.x2 + 5; - textbox_rect.x2 = textbox_rect.x1 + 160; - /* 创建一个textbox控件 */ - text = rtgui_textbox_create("bernard.xiong@gmail.com",RTGUI_TEXTBOX_SINGLE); - /* 设置textbox控件的位置 */ - rtgui_widget_set_rect(RTGUI_WIDGET(text), &textbox_rect); - /* 添加textbox控件到视图中 */ - rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(text)); - - rect.y1 += 23; - rect.y2 = rect.y1 + 20; - /* 创建一个label控件 */ - label = rtgui_label_create("密码: "); - /* 设置label的位置 */ - rtgui_widget_set_rect(RTGUI_WIDGET(label), &rect); - /* 添加label控件到视图中 */ - rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(label)); - textbox_rect = rect; - textbox_rect.x1 = textbox_rect.x2 + 5; - textbox_rect.x2 = textbox_rect.x1 + 160; - /* 创建一个textbox控件 */ - text = rtgui_textbox_create("rt-thread",RTGUI_TEXTBOX_SINGLE); - /* 设置textbox显示文本为掩码形式(即显示为*号,适合于显示密码的情况) */ - text->flag |= RTGUI_TEXTBOX_MASK; - /* 设置textbox控件的位置 */ - rtgui_widget_set_rect(RTGUI_WIDGET(text), &textbox_rect); - /* 添加textbox控件到视图中 */ - rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(text)); - - rect.y1 += 23; - rect.y2 = rect.y1 + 20; - /* 创建一个label控件 */ - label = rtgui_label_create("主页: "); - /* 设置label的位置 */ - rtgui_widget_set_rect(RTGUI_WIDGET(label), &rect); - /* 添加label控件到视图中 */ - rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(label)); - textbox_rect = rect; - textbox_rect.x1 = textbox_rect.x2 + 5; - textbox_rect.x2 = textbox_rect.x1 + 160; - /* 创建一个textbox控件 */ - text = rtgui_textbox_create("http://www.rt-thread.org",RTGUI_TEXTBOX_SINGLE); - /* 设置textbox控件的位置 */ - rtgui_widget_set_rect(RTGUI_WIDGET(text), &textbox_rect); - /* 添加textbox控件到视图中 */ - rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(text)); - - return view; -} +/* + * 程序清单:texbox控件演示 + * + * 这个例子会在创建出的container上添加几个不同类型的textbox控件 + */ +#include "demo_view.h" +#include +#include + +/* 创建用于演示textbox控件的视图 */ +rtgui_container_t* demo_view_textbox(void) +{ + rtgui_rect_t rect, textbox_rect; + rtgui_container_t* container; + rtgui_label_t* label; + rtgui_textbox_t* text; + + /* 先创建一个演示用的视图 */ + container = demo_view("TextBox View"); + + /* 获得视图的位置信息 */ + demo_view_get_rect(container, &rect); + rect.x1 += 5; + rect.x2 = rect.x1 + 30; + rect.y1 += 5; + rect.y2 = rect.y1 + 20; + /* 创建一个label控件 */ + label = rtgui_label_create("名字: "); + /* 设置label的位置 */ + rtgui_widget_set_rect(RTGUI_WIDGET(label), &rect); + rtgui_container_add_child(container, RTGUI_WIDGET(label)); + + /* 让textbox_rect赋值到rect,以计算textbox控件的位置 */ + textbox_rect = rect; + textbox_rect.x1 = textbox_rect.x2 + 5; + textbox_rect.x2 = textbox_rect.x1 + 160; + /* 创建一个textbox控件 */ + text = rtgui_textbox_create("bernard",RTGUI_TEXTBOX_SINGLE); + /* 设置textbox控件的位置 */ + rtgui_widget_set_rect(RTGUI_WIDGET(text), &textbox_rect); + /* 添加textbox控件到视图中 */ + rtgui_container_add_child(container, RTGUI_WIDGET(text)); + + /* 计算下一个label控件的位置 */ + rect.y1 += 23; + rect.y2 = rect.y1 + 20; + /* 创建一个label控件 */ + label = rtgui_label_create("邮件: "); + /* 设置label的位置 */ + rtgui_widget_set_rect(RTGUI_WIDGET(label), &rect); + /* 添加label控件到视图中 */ + rtgui_container_add_child(container, RTGUI_WIDGET(label)); + textbox_rect = rect; + textbox_rect.x1 = textbox_rect.x2 + 5; + textbox_rect.x2 = textbox_rect.x1 + 160; + /* 创建一个textbox控件 */ + text = rtgui_textbox_create("bernard.xiong@gmail.com",RTGUI_TEXTBOX_SINGLE); + /* 设置textbox控件的位置 */ + rtgui_widget_set_rect(RTGUI_WIDGET(text), &textbox_rect); + /* 添加textbox控件到视图中 */ + rtgui_container_add_child(container, RTGUI_WIDGET(text)); + + rect.y1 += 23; + rect.y2 = rect.y1 + 20; + /* 创建一个label控件 */ + label = rtgui_label_create("密码: "); + /* 设置label的位置 */ + rtgui_widget_set_rect(RTGUI_WIDGET(label), &rect); + /* 添加label控件到视图中 */ + rtgui_container_add_child(container, RTGUI_WIDGET(label)); + textbox_rect = rect; + textbox_rect.x1 = textbox_rect.x2 + 5; + textbox_rect.x2 = textbox_rect.x1 + 160; + /* 创建一个textbox控件 */ + text = rtgui_textbox_create("rt-thread",RTGUI_TEXTBOX_SINGLE); + /* 设置textbox显示文本为掩码形式(即显示为*号,适合于显示密码的情况) */ + text->flag |= RTGUI_TEXTBOX_MASK; + /* 设置textbox控件的位置 */ + rtgui_widget_set_rect(RTGUI_WIDGET(text), &textbox_rect); + /* 添加textbox控件到视图中 */ + rtgui_container_add_child(container, RTGUI_WIDGET(text)); + + rect.y1 += 23; + rect.y2 = rect.y1 + 20; + /* 创建一个label控件 */ + label = rtgui_label_create("主页: "); + /* 设置label的位置 */ + rtgui_widget_set_rect(RTGUI_WIDGET(label), &rect); + /* 添加label控件到视图中 */ + rtgui_container_add_child(container, RTGUI_WIDGET(label)); + textbox_rect = rect; + textbox_rect.x1 = textbox_rect.x2 + 5; + textbox_rect.x2 = textbox_rect.x1 + 160; + /* 创建一个textbox控件 */ + text = rtgui_textbox_create("http://www.rt-thread.org",RTGUI_TEXTBOX_SINGLE); + /* 设置textbox控件的位置 */ + rtgui_widget_set_rect(RTGUI_WIDGET(text), &textbox_rect); + /* 添加textbox控件到视图中 */ + rtgui_container_add_child(container, RTGUI_WIDGET(text)); + + return container; +} diff --git a/examples/gui/demo_view_ttf.c b/examples/gui/demo_view_ttf.c index 988f382985..87cc3095bd 100644 --- a/examples/gui/demo_view_ttf.c +++ b/examples/gui/demo_view_ttf.c @@ -1,96 +1,98 @@ -/* - * 程序清单:TTF字体显示演示 - * - * 这个例子会在创建出的view上进行TTF字体显示的演示 - */ - -#include "demo_view.h" -#include -#include -#include - -#ifdef RTGUI_USING_TTF -static rtgui_font_t *font_16, *font_24, *font_36, *font_48; - -/* - * view的事件处理函数 - */ -rt_bool_t ttf_event_handler(rtgui_widget_t* widget, rtgui_event_t *event) -{ - /* 仅对PAINT事件进行处理 */ - if (event->type == RTGUI_EVENT_PAINT) - { - struct rtgui_dc* dc; - rtgui_rect_t rect; - rtgui_font_t* saved; - - /* - * 因为用的是demo view,上面本身有一部分控件,所以在绘图时先要让demo view - * 先绘图 - */ - rtgui_view_event_handler(widget, event); - - /************************************************************************/ - /* 下面的是DC的操作 */ - /************************************************************************/ - - /* 获得控件所属的DC */ - dc = rtgui_dc_begin_drawing(widget); - /* 如果不能正常获得DC,返回(如果控件或父控件是隐藏状态,DC是获取不成功的) */ - if (dc == RT_NULL) - return RT_FALSE; - - /* 获得demo view允许绘图的区域 */ - demo_view_get_rect(RTGUI_VIEW(widget), &rect); - - saved = RTGUI_WIDGET_FONT(widget); - - RTGUI_WIDGET_FONT(widget) = font_16; - rtgui_dc_draw_text(dc, "ABCD中文", &rect); - rect.y1 += 18; - - RTGUI_WIDGET_FONT(widget) = font_24; - rtgui_dc_draw_text(dc, "ABCD中文", &rect); - rect.y1 += 26; - - RTGUI_WIDGET_FONT(widget) = font_36; - rtgui_dc_draw_text(dc, "ABCD中文", &rect); - rect.y1 += 38; - - RTGUI_WIDGET_FONT(widget) = font_48; - rtgui_dc_draw_text(dc, "ABCD中文", &rect); - - RTGUI_WIDGET_FONT(widget) = saved; - /* 绘图完成 */ - rtgui_dc_end_drawing(dc); - } - else - { - /* 其他事件,调用默认的事件处理函数 */ - return rtgui_view_event_handler(widget, event); - } - - return RT_FALSE; -} - -/* 创建用于TTF字体显示演示用的视图 */ -rtgui_view_t *demo_view_ttf(rtgui_workbench_t* workbench) -{ - rtgui_view_t *view; - - font_16 = rtgui_freetype_font_create("d:/simsun.ttf", 0, 0, 16); - font_24 = rtgui_freetype_font_create("d:/simsun.ttf", 0, 0, 24); - font_36 = rtgui_freetype_font_create("d:/simsun.ttf", 0, 0, 36); - font_48 = rtgui_freetype_font_create("d:/simsun.TTF", 0, 0, 72); - - view = demo_view(workbench, "TTF 演示"); - if (view != RT_NULL) - { - RTGUI_WIDGET_BACKGROUND(RTGUI_WIDGET(view)) = white; - /* 设置成自己的事件处理函数 */ - rtgui_widget_set_event_handler(RTGUI_WIDGET(view), ttf_event_handler); - } - - return view; -} -#endif +/* + * 程序清单:TTF字体显示演示 + * + * 这个例子会在创建出的container上进行TTF字体显示的演示 + */ + +#include "demo_view.h" +#include +#include +#include + +#ifdef RTGUI_USING_TTF +static rtgui_font_t *font_16, *font_24, *font_36, *font_48; + +/* + * container的事件处理函数 + */ +rt_bool_t ttf_event_handler(struct rtgui_object* object, rtgui_event_t *event) +{ + struct rtgui_widget *widget = RTGUI_WIDGET(object); + + /* 仅对PAINT事件进行处理 */ + if (event->type == RTGUI_EVENT_PAINT) + { + struct rtgui_dc* dc; + rtgui_rect_t rect; + rtgui_font_t* saved; + + /* + * 因为用的是demo container,上面本身有一部分控件,所以在绘图时先要让demo container + * 先绘图 + */ + rtgui_container_event_handler(widget, event); + + /************************************************************************/ + /* 下面的是DC的操作 */ + /************************************************************************/ + + /* 获得控件所属的DC */ + dc = rtgui_dc_begin_drawing(widget); + /* 如果不能正常获得DC,返回(如果控件或父控件是隐藏状态,DC是获取不成功的) */ + if (dc == RT_NULL) + return RT_FALSE; + + /* 获得demo container允许绘图的区域 */ + demo_view_get_rect(RTGUI_CONTAINER(widget), &rect); + + saved = RTGUI_WIDGET_FONT(widget); + + RTGUI_WIDGET_FONT(widget) = font_16; + rtgui_dc_draw_text(dc, "ABCD中文", &rect); + rect.y1 += 18; + + RTGUI_WIDGET_FONT(widget) = font_24; + rtgui_dc_draw_text(dc, "ABCD中文", &rect); + rect.y1 += 26; + + RTGUI_WIDGET_FONT(widget) = font_36; + rtgui_dc_draw_text(dc, "ABCD中文", &rect); + rect.y1 += 38; + + RTGUI_WIDGET_FONT(widget) = font_48; + rtgui_dc_draw_text(dc, "ABCD中文", &rect); + + RTGUI_WIDGET_FONT(widget) = saved; + /* 绘图完成 */ + rtgui_dc_end_drawing(dc); + } + else + { + /* 其他事件,调用默认的事件处理函数 */ + return rtgui_container_event_handler(widget, event); + } + + return RT_FALSE; +} + +/* 创建用于TTF字体显示演示用的视图 */ +rtgui_container_t *demo_view_ttf() +{ + rtgui_container_t *container; + + font_16 = rtgui_freetype_font_create("d:/simsun.ttf", 0, 0, 16); + font_24 = rtgui_freetype_font_create("d:/simsun.ttf", 0, 0, 24); + font_36 = rtgui_freetype_font_create("d:/simsun.ttf", 0, 0, 36); + font_48 = rtgui_freetype_font_create("d:/simsun.TTF", 0, 0, 72); + + container = demo_view("TTF 演示"); + if (container != RT_NULL) + { + RTGUI_WIDGET_BACKGROUND(RTGUI_WIDGET(container)) = white; + /* 设置成自己的事件处理函数 */ + rtgui_object_set_event_handler(RTGUI_OBJECT(container), ttf_event_handler); + } + + return container; +} +#endif diff --git a/examples/gui/demo_view_window.c b/examples/gui/demo_view_window.c index 2cbb9b9a57..d6d278681c 100644 --- a/examples/gui/demo_view_window.c +++ b/examples/gui/demo_view_window.c @@ -1,280 +1,296 @@ -/* - * 程序清单:窗口演示 - * - * 这个例子会先创建出一个演示用的view,当点击上面的按钮时会不同的模式创建窗口 - */ - -#include -#include -#include -#include -#include -#include "demo_view.h" -#include - -static struct rtgui_timer *timer; -static struct rtgui_label* label; -static struct rtgui_win* msgbox = RT_NULL; -static char label_text[80]; -static rt_uint8_t cnt = 5; - -/* 获取一个递增的窗口标题 */ -static char* get_win_title() -{ - static rt_uint8_t win_no = 0; - static char win_title[16]; - - rt_sprintf(win_title, "窗口 %d", ++win_no); - return win_title; -} - -/* 窗口关闭时的事件处理 */ -void window_demo_close(struct rtgui_widget* widget, rtgui_event_t *even) -{ - rtgui_win_t* win; - - /* 获得最顶层控件 */ - win = RTGUI_WIN(rtgui_widget_get_toplevel(widget)); - - /* 销毁窗口 */ - rtgui_win_destroy(win); -} - -/* 关闭对话框时的回调函数 */ -void diag_close(struct rtgui_timer* timer, void* parameter) -{ - cnt --; - rt_sprintf(label_text, "closed then %d second!", cnt); - - /* 设置标签文本并更新控件 */ - rtgui_label_set_text(label, label_text); - rtgui_widget_update(RTGUI_WIDGET(label)); - - if (cnt == 0) - { - /* 超时,关闭对话框 */ - rtgui_win_destroy(msgbox); - - /* 停止并删除定时器 */ - rtgui_timer_stop(timer); - rtgui_timer_destory(timer); - } -} - -/* AUTO窗口关闭时的事件处理 */ -rt_bool_t auto_window_close(struct rtgui_widget* widget, struct rtgui_event* event) -{ - if (timer != RT_NULL) - { - /* 停止并删除定时器 */ - rtgui_timer_stop(timer); - rtgui_timer_destory(timer); - - timer = RT_NULL; - } - - return RT_TRUE; -} - -static rt_uint16_t delta_x = 20; -static rt_uint16_t delta_y = 40; - -/* 触发正常窗口显示 */ -static void demo_win_onbutton(struct rtgui_widget* widget, rtgui_event_t* event) -{ - rtgui_win_t *win; - rtgui_label_t *label; - rtgui_toplevel_t *parent; - rtgui_rect_t rect = {0, 0, 150, 80}; - - parent = RTGUI_TOPLEVEL(rtgui_widget_get_toplevel(widget)); - rtgui_rect_moveto(&rect, delta_x, delta_y); - delta_x += 20; - delta_y += 20; - - /* 创建一个窗口 */ - win = rtgui_win_create(parent, - get_win_title(), &rect, RTGUI_WIN_STYLE_DEFAULT); - - rect.x1 += 20; - rect.x2 -= 5; - rect.y1 += 5; - rect.y2 = rect.y1 + 20; - - /* 添加一个文本标签 */ - label = rtgui_label_create("这是一个普通窗口"); - rtgui_widget_set_rect(RTGUI_WIDGET(label), &rect); - rtgui_container_add_child(RTGUI_CONTAINER(win), RTGUI_WIDGET(label)); - - /* 非模态显示窗口 */ - rtgui_win_show(win, RT_FALSE); -} - -/* 触发自动窗口显示 */ -static void demo_autowin_onbutton(struct rtgui_widget* widget, rtgui_event_t* event) -{ - rtgui_toplevel_t *parent; - struct rtgui_rect rect ={50, 50, 200, 200}; - - parent = RTGUI_TOPLEVEL(rtgui_widget_get_toplevel(widget)); - msgbox = rtgui_win_create(parent, "Information", &rect, RTGUI_WIN_STYLE_DEFAULT); - if (msgbox != RT_NULL) - { - cnt = 5; - rt_sprintf(label_text, "closed then %d second!", cnt); - label = rtgui_label_create(label_text); - rect.x1 += 5; - rect.x2 -= 5; - rect.y1 += 5; - rect.y2 = rect.y1 + 20; - rtgui_widget_set_rect(RTGUI_WIDGET(label), &rect); - rtgui_container_add_child(RTGUI_CONTAINER(msgbox), RTGUI_WIDGET(label)); - - /* 设置关闭窗口时的动作 */ - rtgui_win_set_onclose(msgbox, auto_window_close); - - rtgui_win_show(msgbox, RT_FALSE); - } - - /* 创建一个定时器 */ - timer = rtgui_timer_create(100, RT_TIMER_FLAG_PERIODIC, diag_close, RT_NULL); - rtgui_timer_start(timer); -} - -/* 触发模态窗口显示 */ -static void demo_modalwin_onbutton(struct rtgui_widget* widget, rtgui_event_t* event) -{ - rtgui_win_t *win; - rtgui_label_t *label; - rtgui_toplevel_t *parent; - rtgui_rect_t rect = {0, 0, 150, 80}; - - parent = RTGUI_TOPLEVEL(rtgui_widget_get_toplevel(widget)); - rtgui_rect_moveto(&rect, delta_x, delta_y); - delta_x += 20; - delta_y += 20; - - /* 创建一个窗口 */ - win = rtgui_win_create(parent, - get_win_title(), &rect, RTGUI_WIN_STYLE_DEFAULT); - - rect.x1 += 20; - rect.x2 -= 5; - rect.y1 += 5; - rect.y2 = rect.y1 + 20; - - label = rtgui_label_create("这是一个模式窗口"); - rtgui_widget_set_rect(RTGUI_WIDGET(label), &rect); - rtgui_container_add_child(RTGUI_CONTAINER(win), RTGUI_WIDGET(label)); - - /* 模态显示窗口 */ - rtgui_win_show(win, RT_TRUE); - /* 采用模态显示窗口,关闭时不会自行删除窗口,需要主动删除窗口 */ - rtgui_win_destroy(win); -} - -/* 触发无标题窗口显示 */ -static void demo_ntitlewin_onbutton(struct rtgui_widget* widget, rtgui_event_t* event) -{ - rtgui_win_t *win; - rtgui_label_t *label; - rtgui_button_t *button; - rtgui_toplevel_t *parent; - rtgui_rect_t widget_rect, rect = {0, 0, 150, 80}; - - parent = RTGUI_TOPLEVEL(rtgui_widget_get_toplevel(widget)); - rtgui_rect_moveto(&rect, delta_x, delta_y); - delta_x += 20; - delta_y += 20; - - /* 创建一个窗口,风格为无标题及无边框 */ - win = rtgui_win_create(parent, - "no title", &rect, RTGUI_WIN_STYLE_NO_TITLE | RTGUI_WIN_STYLE_NO_BORDER); - RTGUI_WIDGET_BACKGROUND(RTGUI_WIDGET(win)) = white; - - /* 创建一个文本标签 */ - label = rtgui_label_create("无边框窗口"); - rtgui_font_get_metrics(RTGUI_WIDGET_FONT(RTGUI_WIDGET(label)), "无边框窗口", &widget_rect); - rtgui_rect_moveto_align(&rect, &widget_rect, RTGUI_ALIGN_CENTER_HORIZONTAL); - widget_rect.y1 += 20; - widget_rect.y2 += 20; - rtgui_widget_set_rect(RTGUI_WIDGET(label), &widget_rect); - rtgui_container_add_child(RTGUI_CONTAINER(win), RTGUI_WIDGET(label)); - RTGUI_WIDGET_BACKGROUND(RTGUI_WIDGET(label)) = white; - - /* 创建一个关闭按钮 */ - widget_rect.x1 = 0; - widget_rect.y1 = 0; - widget_rect.x2 = 40; - widget_rect.y2 = 20; - rtgui_rect_moveto_align(&rect, &widget_rect, RTGUI_ALIGN_CENTER_HORIZONTAL); - widget_rect.y1 += 40; - widget_rect.y2 += 40; - button = rtgui_button_create("关闭"); - rtgui_widget_set_rect(RTGUI_WIDGET(button), &widget_rect); - rtgui_container_add_child(RTGUI_CONTAINER(win), RTGUI_WIDGET(button)); - rtgui_button_set_onbutton(button, window_demo_close); - - /* 非模态显示窗口 */ - rtgui_win_show(win, RT_FALSE); -} - -rtgui_view_t* demo_view_window(rtgui_workbench_t* workbench) -{ - rtgui_rect_t rect; - rtgui_view_t* view; - rtgui_button_t *button; - - /* 创建一个演示用的视图 */ - view = demo_view(workbench, "Window Demo"); - - demo_view_get_rect(view, &rect); - rect.x1 += 5; - rect.x2 = rect.x1 + 100; - rect.y1 += 5; - rect.y2 = rect.y1 + 20; - /* 创建按钮用于显示正常窗口 */ - button = rtgui_button_create("Normal Win"); - rtgui_widget_set_rect(RTGUI_WIDGET(button), &rect); - rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(button)); - /* 设置onbutton为demo_win_onbutton函数 */ - rtgui_button_set_onbutton(button, demo_win_onbutton); - - demo_view_get_rect(view, &rect); - rect.x1 += 5; - rect.x2 = rect.x1 + 100; - rect.y1 += 5 + 25; - rect.y2 = rect.y1 + 20; - /* 创建按钮用于显示一个自动关闭的窗口 */ - button = rtgui_button_create("Auto Win"); - rtgui_widget_set_rect(RTGUI_WIDGET(button), &rect); - rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(button)); - /* 设置onbutton为demo_autowin_onbutton函数 */ - rtgui_button_set_onbutton(button, demo_autowin_onbutton); - - demo_view_get_rect(view, &rect); - rect.x1 += 5; - rect.x2 = rect.x1 + 100; - rect.y1 += 5 + 25 + 25; - rect.y2 = rect.y1 + 20; - /* 创建按钮用于触发一个模式窗口 */ - button = rtgui_button_create("Modal Win"); - rtgui_widget_set_rect(RTGUI_WIDGET(button), &rect); - rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(button)); - /* 设置onbutton为demo_modalwin_onbutton函数 */ - rtgui_button_set_onbutton(button, demo_modalwin_onbutton); - - demo_view_get_rect(view, &rect); - rect.x1 += 5; - rect.x2 = rect.x1 + 100; - rect.y1 += 5 + 25 + 25 + 25; - rect.y2 = rect.y1 + 20; - /* 创建按钮用于触发一个不包含标题的窗口 */ - button = rtgui_button_create("NoTitle Win"); - rtgui_widget_set_rect(RTGUI_WIDGET(button), &rect); - rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(button)); - /* 设置onbutton为demo_ntitlewin_onbutton函数 */ - rtgui_button_set_onbutton(button, demo_ntitlewin_onbutton); - - return view; -} +/* + * 程序清单:窗口演示 + * + * 这个例子会先创建出一个演示用的container,当点击上面的按钮时会不同的模式创建窗口 + */ + +#include +#include +#include +#include +#include +#include "demo_view.h" +#include + +static struct rtgui_timer *timer; +static struct rtgui_label* label; +static struct rtgui_win* msgbox = RT_NULL; +static char label_text[80]; +static rt_uint8_t cnt = 5; + +rtgui_win_t *normal_window; +rtgui_label_t *normal_window_label; +static char normal_window_label_text[16]; +static unsigned char normal_window_show_count = 1; +extern struct rtgui_win *main_win; + +static rt_bool_t normal_window_onclose(struct rtgui_object *win, + struct rtgui_event *event) +{ + normal_window_show_count++; + + return RT_TRUE; +} + +static void create_normal_win(void) +{ + rtgui_rect_t rect = {30, 40, 150, 80}; + + normal_window = rtgui_win_create(RT_NULL, "普通窗口", + &rect, RTGUI_WIN_STYLE_DEFAULT); + + rect.x1 += 20; + rect.x2 -= 5; + rect.y1 += 5; + rect.y2 = rect.y1 + 20; + + /* 添加一个文本标签 */ + rt_sprintf(normal_window_label_text, + "第 %d 次显示", normal_window_show_count); + normal_window_label = rtgui_label_create(normal_window_label_text); + rtgui_widget_set_rect(RTGUI_WIDGET(normal_window_label), &rect); + rtgui_container_add_child(RTGUI_CONTAINER(normal_window), + RTGUI_WIDGET(normal_window_label)); + + rtgui_win_set_onclose(normal_window, + normal_window_onclose); +} + +/* 触发正常窗口显示 */ +static void demo_normal_window_onbutton(struct rtgui_widget* widget, rtgui_event_t* event) +{ + rt_sprintf(normal_window_label_text, + "第 %d 次显示", normal_window_show_count); + rtgui_label_set_text(normal_window_label, + normal_window_label_text); + /* 非模态显示窗口 */ + rtgui_win_show(normal_window, RT_FALSE); +} + +/* 获取一个递增的窗口标题 */ +static char* get_win_title() +{ + static rt_uint8_t win_no = 0; + static char win_title[16]; + + rt_sprintf(win_title, "窗口 %d", ++win_no); + return win_title; +} + +/* 关闭对话框时的回调函数 */ +void diag_close(struct rtgui_timer* timer, void* parameter) +{ + cnt --; + rt_sprintf(label_text, "closed then %d second!", cnt); + + /* 设置标签文本并更新控件 */ + rtgui_label_set_text(label, label_text); + rtgui_widget_update(RTGUI_WIDGET(label)); + + if (cnt == 0) + { + /* 超时,关闭对话框 */ + rtgui_win_destroy(msgbox); + + /* 停止并删除定时器 */ + rtgui_timer_stop(timer); + rtgui_timer_destory(timer); + } +} + +/* AUTO窗口关闭时的事件处理 */ +rt_bool_t auto_window_close(struct rtgui_object* object, struct rtgui_event* event) +{ + if (timer != RT_NULL) + { + /* 停止并删除定时器 */ + rtgui_timer_stop(timer); + rtgui_timer_destory(timer); + + timer = RT_NULL; + } + + return RT_TRUE; +} + +static rt_uint16_t delta_x = 20; +static rt_uint16_t delta_y = 40; + +/* 触发自动窗口显示 */ +static void demo_autowin_onbutton(struct rtgui_widget* widget, rtgui_event_t* event) +{ + struct rtgui_rect rect ={50, 50, 200, 200}; + + msgbox = rtgui_win_create(main_win, "Information", + &rect, RTGUI_WIN_STYLE_DEFAULT | RTGUI_WIN_STYLE_DESTROY_ON_CLOSE); + if (msgbox == RT_NULL) + return; + + cnt = 5; + rt_sprintf(label_text, "closed then %d second!", cnt); + label = rtgui_label_create(label_text); + rect.x1 += 5; + rect.x2 -= 5; + rect.y1 += 5; + rect.y2 = rect.y1 + 20; + rtgui_widget_set_rect(RTGUI_WIDGET(label), &rect); + rtgui_container_add_child(RTGUI_CONTAINER(msgbox), + RTGUI_WIDGET(label)); + + /* 设置关闭窗口时的动作 */ + rtgui_win_set_onclose(msgbox, auto_window_close); + + rtgui_win_show(msgbox, RT_FALSE); + /* 创建一个定时器 */ + timer = rtgui_timer_create(100, RT_TIMER_FLAG_PERIODIC, diag_close, RT_NULL); + rtgui_timer_start(timer); +} + +/* 触发模态窗口显示 */ +static void demo_modalwin_onbutton(struct rtgui_widget* widget, rtgui_event_t* event) +{ + rtgui_win_t *win; + rtgui_label_t *label; + rtgui_rect_t rect = {0, 0, 150, 80}; + + rtgui_rect_moveto(&rect, delta_x, delta_y); + delta_x += 20; + delta_y += 20; + + /* 创建一个窗口 */ + win = rtgui_win_create(main_win, + get_win_title(), &rect, RTGUI_WIN_STYLE_DEFAULT); + + rect.x1 += 20; + rect.x2 -= 5; + rect.y1 += 5; + rect.y2 = rect.y1 + 20; + + label = rtgui_label_create("这是一个模式窗口"); + rtgui_widget_set_rect(RTGUI_WIDGET(label), &rect); + rtgui_container_add_child(RTGUI_CONTAINER(win), RTGUI_WIDGET(label)); + + /* 模态显示窗口 */ + rtgui_win_show(win, RT_TRUE); + + /* 删除非自动删除窗口 */ + rtgui_win_destroy(win); +} + +static void demo_close_ntitle_window(struct rtgui_widget* widget, rtgui_event_t* event) +{ + rtgui_win_t* win; + + /* 获得最顶层控件 */ + win = RTGUI_WIN(rtgui_widget_get_toplevel(widget)); + + /* 销毁窗口 */ + rtgui_win_destroy(win); +} + +/* 触发无标题窗口显示 */ +static void demo_ntitlewin_onbutton(struct rtgui_widget* widget, rtgui_event_t* event) +{ + rtgui_win_t *win; + rtgui_label_t *label; + rtgui_button_t *button; + rtgui_rect_t widget_rect, rect = {0, 0, 150, 80}; + + rtgui_rect_moveto(&rect, delta_x, delta_y); + delta_x += 20; + delta_y += 20; + + /* 创建一个窗口,风格为无标题及无边框 */ + win = rtgui_win_create(main_win, + "no title", &rect, RTGUI_WIN_STYLE_NO_TITLE | + RTGUI_WIN_STYLE_NO_BORDER | + RTGUI_WIN_STYLE_DESTROY_ON_CLOSE); + RTGUI_WIDGET_BACKGROUND(RTGUI_WIDGET(win)) = white; + + /* 创建一个文本标签 */ + label = rtgui_label_create("无边框窗口"); + rtgui_font_get_metrics(RTGUI_WIDGET_FONT(RTGUI_WIDGET(label)), "无边框窗口", &widget_rect); + rtgui_rect_moveto_align(&rect, &widget_rect, RTGUI_ALIGN_CENTER_HORIZONTAL); + widget_rect.y1 += 20; + widget_rect.y2 += 20; + rtgui_widget_set_rect(RTGUI_WIDGET(label), &widget_rect); + rtgui_container_add_child(RTGUI_CONTAINER(win), RTGUI_WIDGET(label)); + RTGUI_WIDGET_BACKGROUND(RTGUI_WIDGET(label)) = white; + + /* 创建一个关闭按钮 */ + widget_rect.x1 = 0; + widget_rect.y1 = 0; + widget_rect.x2 = 40; + widget_rect.y2 = 20; + rtgui_rect_moveto_align(&rect, &widget_rect, RTGUI_ALIGN_CENTER_HORIZONTAL); + widget_rect.y1 += 40; + widget_rect.y2 += 40; + button = rtgui_button_create("关闭"); + rtgui_widget_set_rect(RTGUI_WIDGET(button), &widget_rect); + rtgui_container_add_child(RTGUI_CONTAINER(win), RTGUI_WIDGET(button)); + rtgui_button_set_onbutton(button, demo_close_ntitle_window); + + rtgui_win_show(win, RT_FALSE); +} + +rtgui_container_t* demo_view_window(void) +{ + rtgui_rect_t rect; + rtgui_container_t* container; + rtgui_button_t *button; + + /* 创建一个演示用的视图 */ + container = demo_view("Window Demo"); + + create_normal_win(); + + demo_view_get_rect(container, &rect); + rect.x1 += 5; + rect.x2 = rect.x1 + 100; + rect.y1 += 5; + rect.y2 = rect.y1 + 20; + /* 创建按钮用于显示正常窗口 */ + button = rtgui_button_create("Normal Win"); + rtgui_widget_set_rect(RTGUI_WIDGET(button), &rect); + rtgui_container_add_child(RTGUI_CONTAINER(container), RTGUI_WIDGET(button)); + /* 设置onbutton为demo_win_onbutton函数 */ + rtgui_button_set_onbutton(button, demo_normal_window_onbutton); + + demo_view_get_rect(container, &rect); + rect.x1 += 5; + rect.x2 = rect.x1 + 100; + rect.y1 += 5 + 25; + rect.y2 = rect.y1 + 20; + /* 创建按钮用于显示一个自动关闭的窗口 */ + button = rtgui_button_create("Auto Win"); + rtgui_widget_set_rect(RTGUI_WIDGET(button), &rect); + rtgui_container_add_child(RTGUI_CONTAINER(container), RTGUI_WIDGET(button)); + /* 设置onbutton为demo_autowin_onbutton函数 */ + rtgui_button_set_onbutton(button, demo_autowin_onbutton); + + demo_view_get_rect(container, &rect); + rect.x1 += 5; + rect.x2 = rect.x1 + 100; + rect.y1 += 5 + 25 + 25; + rect.y2 = rect.y1 + 20; + /* 创建按钮用于触发一个模式窗口 */ + button = rtgui_button_create("Modal Win"); + rtgui_widget_set_rect(RTGUI_WIDGET(button), &rect); + rtgui_container_add_child(RTGUI_CONTAINER(container), RTGUI_WIDGET(button)); + /* 设置onbutton为demo_modalwin_onbutton函数 */ + rtgui_button_set_onbutton(button, demo_modalwin_onbutton); + + demo_view_get_rect(container, &rect); + rect.x1 += 5; + rect.x2 = rect.x1 + 100; + rect.y1 += 5 + 25 + 25 + 25; + rect.y2 = rect.y1 + 20; + /* 创建按钮用于触发一个不包含标题的窗口 */ + button = rtgui_button_create("NoTitle Win"); + rtgui_widget_set_rect(RTGUI_WIDGET(button), &rect); + rtgui_container_add_child(RTGUI_CONTAINER(container), RTGUI_WIDGET(button)); + /* 设置onbutton为demo_ntitlewin_onbutton函数 */ + rtgui_button_set_onbutton(button, demo_ntitlewin_onbutton); + + return container; +} diff --git a/examples/gui/demo_workbench.c b/examples/gui/demo_workbench.c deleted file mode 100644 index 99669bc298..0000000000 --- a/examples/gui/demo_workbench.c +++ /dev/null @@ -1,139 +0,0 @@ -#include -#include - -#include -#include - -static rt_bool_t demo_workbench_event_handler(struct rtgui_widget* widget, struct rtgui_event* event) -{ - /* 我们目前只对按键事件感兴趣。如果当前workbench处于模式显示状态,忽略它 */ - if ((event->type == RTGUI_EVENT_KBD) && !RTGUI_WORKBENCH_IS_MODAL_MODE(RTGUI_WORKBENCH(widget))) - { - struct rtgui_event_kbd* ekbd = (struct rtgui_event_kbd*)event; - - if (ekbd->type == RTGUI_KEYDOWN) - { - if (ekbd->key == RTGUIK_RIGHT) - { - demo_view_next(RT_NULL, RT_NULL); - return RT_TRUE; - } - else if (ekbd->key == RTGUIK_LEFT) - { - demo_view_prev(RT_NULL, RT_NULL); - return RT_TRUE; - } - } - } - - /* 如果不是绘制事件,使用view原来的事件处理函数处理 */ - return rtgui_workbench_event_handler(widget, event); -} - -static void workbench_entry(void* parameter) -{ - rt_mq_t mq; - struct rtgui_workbench* workbench; - - /* 创建GUI应用需要的消息队列 */ -#ifdef RTGUI_USING_SMALL_SIZE - mq = rt_mq_create("workbench", 32, 32, RT_IPC_FLAG_FIFO); -#else - mq = rt_mq_create("workbench", 256, 32, RT_IPC_FLAG_FIFO); -#endif - /* 注册当前线程为GUI线程 */ - rtgui_thread_register(rt_thread_self(), mq); - - /* 创建一个工作台 */ - workbench = rtgui_workbench_create("main", "workbench"); - if (workbench == RT_NULL) return; - - rtgui_widget_set_event_handler(RTGUI_WIDGET(workbench), demo_workbench_event_handler); - - /* 初始化各个例子的视图 */ -#if RTTHREAD_VERSION >= 10000 - demo_view_benchmark(workbench); -#endif - - demo_view_dc(workbench); -#if RTTHREAD_VERSION >= 10000 -#ifdef RTGUI_USING_TTF - demo_view_ttf(workbench); -#endif -#endif - -#ifndef RTGUI_USING_SMALL_SIZE - demo_view_dc_buffer(workbench); -#endif - demo_view_animation(workbench); -#ifndef RTGUI_USING_SMALL_SIZE - demo_view_buffer_animation(workbench); - demo_view_instrument_panel(workbench); -#endif - demo_view_window(workbench); - demo_view_label(workbench); - demo_view_button(workbench); - demo_view_checkbox(workbench); - demo_view_progressbar(workbench); - demo_view_scrollbar(workbench); - demo_view_radiobox(workbench); - demo_view_textbox(workbench); - demo_view_listbox(workbench); - demo_view_menu(workbench); - demo_view_listctrl(workbench); - demo_view_combobox(workbench); - demo_view_slider(workbench); - // demo_view_notebook(workbench); - demo_view_mywidget(workbench); -#if defined(RTGUI_USING_DFS_FILERW) || defined(RTGUI_USING_STDIO_FILERW) - demo_view_image(workbench); -#endif -#ifdef RT_USING_MODULE -#if defined(RTGUI_USING_DFS_FILERW) || defined(RTGUI_USING_STDIO_FILERW) - demo_view_module(workbench); -#endif -#endif - demo_listview_view(workbench); - demo_listview_icon_view(workbench); -#if defined(RTGUI_USING_DFS_FILERW) || defined(RTGUI_USING_STDIO_FILERW) - demo_fn_view(workbench); -#endif - - /* 显示视图 */ - demo_view_show(); - - /* 执行工作台事件循环 */ - rtgui_workbench_event_loop(workbench); - - /* 去注册GUI线程 */ - rtgui_thread_deregister(rt_thread_self()); - rt_mq_delete(mq); -} - -void workbench_init() -{ - static rt_bool_t inited = RT_FALSE; - - if (inited == RT_FALSE) /* 避免重复初始化而做的保护 */ - { - rt_thread_t tid; - - tid = rt_thread_create("wb", - workbench_entry, RT_NULL, - 2048 * 2, 25, 10); - - if (tid != RT_NULL) rt_thread_startup(tid); - - inited = RT_TRUE; - } -} - -#ifdef RT_USING_FINSH -#include -void workbench() -{ - workbench_init(); -} -/* finsh的命令输出,可以直接执行workbench()函数以执行上面的函数 */ -FINSH_FUNCTION_EXPORT(workbench, workbench demo) -#endif diff --git a/examples/gui/demo_xml.c b/examples/gui/demo_xml.c index 11a448103b..398161039d 100644 --- a/examples/gui/demo_xml.c +++ b/examples/gui/demo_xml.c @@ -1,26 +1,26 @@ -#include - -#include - -static int xml_event_handler(rt_uint8_t event, const char* text, rt_size_t len, void* user) -{ - rt_kprintf("%s: %s\n", rtgui_xml_event_str(event), text); - return 1; -} - -const char xml_str[] = "ToveJaniReminderDon't forget me this weekend!"; -void demo_xml() -{ - rtgui_xml_t *xml; - - xml = rtgui_xml_create(512, xml_event_handler, RT_NULL); - if (xml != RT_NULL) - { - rtgui_xml_parse(xml, xml_str, sizeof(xml_str)); - rtgui_xml_destroy(xml); - } -} -#ifdef RT_USING_FINSH -#include -FINSH_FUNCTION_EXPORT(demo_xml, show the demo of xml parser); -#endif +#include + +#include + +static int xml_event_handler(rt_uint8_t event, const char* text, rt_size_t len, void* user) +{ + rt_kprintf("%s: %s\n", rtgui_xml_event_str(event), text); + return 1; +} + +const char xml_str[] = "ToveJaniReminderDon't forget me this weekend!"; +void demo_xml() +{ + rtgui_xml_t *xml; + + xml = rtgui_xml_create(512, xml_event_handler, RT_NULL); + if (xml != RT_NULL) + { + rtgui_xml_parse(xml, xml_str, sizeof(xml_str)); + rtgui_xml_destroy(xml); + } +} +#ifdef RT_USING_FINSH +#include +FINSH_FUNCTION_EXPORT(demo_xml, show the demo of xml parser); +#endif diff --git a/examples/gui/gui_init.c b/examples/gui/gui_init.c index e0145a7716..6522046179 100644 --- a/examples/gui/gui_init.c +++ b/examples/gui/gui_init.c @@ -1,19 +1,19 @@ -#include -#include -#include - -extern void workbench_init(void); -extern void panel_init(void); - -/* GUI相关演示入口,需放在线程中进行初始化 */ -void rtgui_startup() -{ - /* GUI系统初始化 */ - rtgui_system_server_init(); - - /* 各个面板初始化 */ - panel_init(); - - /* 启动workbench */ - workbench_init(); -} +#include +#include +#include + +extern void workbench_init(void); +extern void panel_init(void); + +/* GUI相关演示入口,需放在线程中进行初始化 */ +void rtgui_startup() +{ + /* GUI系统初始化 */ + rtgui_system_server_init(); + + /* 各个面板初始化 */ + panel_init(); + + /* 启动workbench */ + workbench_init(); +} diff --git a/examples/gui/mywidget.c b/examples/gui/mywidget.c index 095e8a5695..24ff207627 100644 --- a/examples/gui/mywidget.c +++ b/examples/gui/mywidget.c @@ -1,136 +1,136 @@ -#include -#include "mywidget.h" - -/* 鎺т欢缁樺浘鍑芥暟 */ -static void rtgui_mywidget_ondraw(struct rtgui_mywidget* me) -{ - struct rtgui_dc* dc; - struct rtgui_rect rect; - rt_uint16_t x, y; - - /* 鑾峰緱鐩爣DC锛屽紑濮嬬粯鍥?*/ - dc = rtgui_dc_begin_drawing(RTGUI_WIDGET(me)); - if (dc == RT_NULL) return; - - /* 鑾峰緱绐楀彛鐨勫昂瀵?*/ - rtgui_widget_get_rect(RTGUI_WIDGET(me), &rect); - /* 缁樺埗鑳屾櫙鑹?*/ - RTGUI_DC_BC(dc) = white; - rtgui_dc_fill_rect(dc, &rect); - - /* 璁$畻涓績鍘熺偣 */ - x = (rect.x2 + rect.x1)/2; - y = (rect.y2 + rect.y1)/2; - - /* 缁樺埗鍗佸瓧鏋?*/ - RTGUI_DC_FC(dc) = black; - rtgui_dc_draw_hline(dc, rect.x1, rect.x2, y); - rtgui_dc_draw_vline(dc, x, rect.y1, rect.y2); - - /* 鏍规嵁鐘舵�佺粯鍒跺渾鍦?*/ - if (me->status == MYWIDGET_STATUS_ON) - RTGUI_DC_FC(dc) = green; - else - RTGUI_DC_FC(dc) = red; - rtgui_dc_fill_circle(dc, x, y, 5); - - /* 缁撴潫缁樺浘 */ - rtgui_dc_end_drawing(dc); - return; -} - -/* 榧犳爣浜嬩欢澶勭悊鍑芥暟 */ -static void rtgui_mywidget_onmouse(struct rtgui_mywidget* me, struct rtgui_event_mouse* mouse) -{ - struct rtgui_rect rect; - rt_uint16_t x, y; - - /* 浠呭榧犳爣鎶捣鍔ㄤ綔杩涜澶勭悊 */ - if (!(mouse->button & RTGUI_MOUSE_BUTTON_UP)) return; - - /* 鑾峰緱鎺т欢鐨勪綅缃?*/ - rtgui_widget_get_rect(RTGUI_WIDGET(me), &rect); - /* get_rect鍑芥暟鑾峰緱鏄帶浠剁殑鐩稿浣嶇疆锛岃�岄紶鏍囦簨浠剁粰鍑虹殑鍧愭爣鏄粷瀵瑰潗鏍囷紝闇�瑕佸仛涓�涓浆鎹?*/ - rtgui_widget_rect_to_device(RTGUI_WIDGET(me), &rect); - - /* 璁$畻涓績鍘熺偣 */ - x = (rect.x2 + rect.x1)/2; - y = (rect.y2 + rect.y1)/2; - - /* 姣旇緝榧犳爣鍧愭爣鏄惁鍦ㄥ湀鍐?*/ - if ((mouse->x < x + 5 && mouse->x > x - 5) && - (mouse->y < y + 5 && mouse->y > y - 5)) - { - /* 鏇存敼鎺т欢鐘舵�?*/ - if (me->status & MYWIDGET_STATUS_ON) me->status = MYWIDGET_STATUS_OFF; - else me->status = MYWIDGET_STATUS_ON; - - /* 鍒锋柊(閲嶆柊缁樺埗)鎺т欢 */ - rtgui_mywidget_ondraw(me); - } -} - -/* mywidget鎺т欢鐨勪簨浠跺鐞嗗嚱鏁?*/ -rt_bool_t rtgui_mywidget_event_handler(struct rtgui_widget* widget, struct rtgui_event* event) -{ - /* 璋冪敤浜嬩欢澶勭悊鍑芥暟鏃讹紝widget鎸囬拡鎸囧悜鎺т欢鏈韩锛屾墍浠ュ厛鑾峰緱鐩稿簲鎺т欢瀵硅薄鐨勬寚閽?*/ - struct rtgui_mywidget* me = RTGUI_MYWIDGET(widget); - - switch (event->type) - { - case RTGUI_EVENT_PAINT: - /* 缁樺埗浜嬩欢锛岃皟鐢ㄧ粯鍥惧嚱鏁扮粯鍒?*/ - rtgui_mywidget_ondraw(me); - break; - - case RTGUI_EVENT_MOUSE_BUTTON: - /* 榧犳爣浜嬩欢 */ - rtgui_mywidget_onmouse(RTGUI_MYWIDGET(me), (struct rtgui_event_mouse*) event); - break; - - /* 鍏朵粬浜嬩欢璋冪敤鐖剁被鐨勪簨浠跺鐞嗗嚱鏁?*/ - default: - return rtgui_widget_event_handler(widget, event); - } - - return RT_FALSE; -} - -/* 鑷畾涔夋帶浠剁殑鏋勯�犲嚱鏁?*/ -static void _rtgui_mywidget_constructor(rtgui_mywidget_t *mywidget) -{ - /* 榛樿杩欎釜鎺т欢鎺ユ敹鑱氱劍 */ - RTGUI_WIDGET(mywidget)->flag |= RTGUI_WIDGET_FLAG_FOCUSABLE; - /* 鍒濆鍖栨帶浠跺苟璁剧疆浜嬩欢澶勭悊鍑芥暟 */ - rtgui_widget_set_event_handler(RTGUI_WIDGET(mywidget), rtgui_mywidget_event_handler); - - /* 鍒濆鐘舵�佹椂OFF */ - mywidget->status = MYWIDGET_STATUS_OFF; -} - -DEFINE_CLASS_TYPE(mywidget, "mywidget", - RTGUI_WIDGET_TYPE, - _rtgui_mywidget_constructor, - RT_NULL, - sizeof(struct rtgui_mywidget)); - -/* 鍒涘缓涓�涓嚜瀹氫箟鎺т欢 */ -struct rtgui_mywidget* rtgui_mywidget_create(rtgui_rect_t* r) -{ - struct rtgui_mywidget* me; - - /* 璁﹔tgui_widget鍒涘缓鍑轰竴涓寚瀹氱被鍨嬶細RTGUI_MYWIDGET_TYPE绫诲瀷鐨勬帶浠?*/ - me = (struct rtgui_mywidget*) rtgui_widget_create (RTGUI_MYWIDGET_TYPE); - if (me != RT_NULL) - { - rtgui_widget_set_rect(RTGUI_WIDGET(me), r); - } - - return me; -} - -/* 鍒犻櫎涓�涓嚜瀹氫箟鎺т欢 */ -void rtgui_mywidget_destroy(struct rtgui_mywidget* me) -{ - rtgui_widget_destroy(RTGUI_WIDGET(me)); -} +#include +#include "mywidget.h" + +/* 鎺т欢缁樺浘鍑芥暟 */ +static void rtgui_mywidget_ondraw(struct rtgui_mywidget* me) +{ + struct rtgui_dc* dc; + struct rtgui_rect rect; + rt_uint16_t x, y; + + /* 鑾峰緱鐩爣DC锛屽紑濮嬬粯鍥?*/ + dc = rtgui_dc_begin_drawing(RTGUI_WIDGET(me)); + if (dc == RT_NULL) return; + + /* 鑾峰緱绐楀彛鐨勫昂瀵?*/ + rtgui_widget_get_rect(RTGUI_WIDGET(me), &rect); + /* 缁樺埗鑳屾櫙鑹?*/ + RTGUI_DC_BC(dc) = white; + rtgui_dc_fill_rect(dc, &rect); + + /* 璁$畻涓績鍘熺偣 */ + x = (rect.x2 + rect.x1)/2; + y = (rect.y2 + rect.y1)/2; + + /* 缁樺埗鍗佸瓧鏋?*/ + RTGUI_DC_FC(dc) = black; + rtgui_dc_draw_hline(dc, rect.x1, rect.x2, y); + rtgui_dc_draw_vline(dc, x, rect.y1, rect.y2); + + /* 鏍规嵁鐘舵�佺粯鍒跺渾鍦?*/ + if (me->status == MYWIDGET_STATUS_ON) + RTGUI_DC_FC(dc) = green; + else + RTGUI_DC_FC(dc) = red; + rtgui_dc_fill_circle(dc, x, y, 5); + + /* 缁撴潫缁樺浘 */ + rtgui_dc_end_drawing(dc); + return; +} + +/* 榧犳爣浜嬩欢澶勭悊鍑芥暟 */ +static void rtgui_mywidget_onmouse(struct rtgui_mywidget* me, struct rtgui_event_mouse* mouse) +{ + struct rtgui_rect rect; + rt_uint16_t x, y; + + /* 浠呭榧犳爣鎶捣鍔ㄤ綔杩涜澶勭悊 */ + if (!(mouse->button & RTGUI_MOUSE_BUTTON_UP)) return; + + /* 鑾峰緱鎺т欢鐨勪綅缃?*/ + rtgui_widget_get_rect(RTGUI_WIDGET(me), &rect); + /* get_rect鍑芥暟鑾峰緱鏄帶浠剁殑鐩稿浣嶇疆锛岃�岄紶鏍囦簨浠剁粰鍑虹殑鍧愭爣鏄粷瀵瑰潗鏍囷紝闇�瑕佸仛涓�涓浆鎹?*/ + rtgui_widget_rect_to_device(RTGUI_WIDGET(me), &rect); + + /* 璁$畻涓績鍘熺偣 */ + x = (rect.x2 + rect.x1)/2; + y = (rect.y2 + rect.y1)/2; + + /* 姣旇緝榧犳爣鍧愭爣鏄惁鍦ㄥ湀鍐?*/ + if ((mouse->x < x + 5 && mouse->x > x - 5) && + (mouse->y < y + 5 && mouse->y > y - 5)) + { + /* 鏇存敼鎺т欢鐘舵�?*/ + if (me->status & MYWIDGET_STATUS_ON) me->status = MYWIDGET_STATUS_OFF; + else me->status = MYWIDGET_STATUS_ON; + + /* 鍒锋柊(閲嶆柊缁樺埗)鎺т欢 */ + rtgui_mywidget_ondraw(me); + } +} + +/* mywidget鎺т欢鐨勪簨浠跺鐞嗗嚱鏁?*/ +rt_bool_t rtgui_mywidget_event_handler(struct rtgui_widget* widget, struct rtgui_event* event) +{ + /* 璋冪敤浜嬩欢澶勭悊鍑芥暟鏃讹紝widget鎸囬拡鎸囧悜鎺т欢鏈韩锛屾墍浠ュ厛鑾峰緱鐩稿簲鎺т欢瀵硅薄鐨勬寚閽?*/ + struct rtgui_mywidget* me = RTGUI_MYWIDGET(widget); + + switch (event->type) + { + case RTGUI_EVENT_PAINT: + /* 缁樺埗浜嬩欢锛岃皟鐢ㄧ粯鍥惧嚱鏁扮粯鍒?*/ + rtgui_mywidget_ondraw(me); + break; + + case RTGUI_EVENT_MOUSE_BUTTON: + /* 榧犳爣浜嬩欢 */ + rtgui_mywidget_onmouse(RTGUI_MYWIDGET(me), (struct rtgui_event_mouse*) event); + break; + + /* 鍏朵粬浜嬩欢璋冪敤鐖剁被鐨勪簨浠跺鐞嗗嚱鏁?*/ + default: + return rtgui_widget_event_handler(RTGUI_OBJECT(widget), event); + } + + return RT_FALSE; +} + +/* 鑷畾涔夋帶浠剁殑鏋勯�犲嚱鏁?*/ +static void _rtgui_mywidget_constructor(rtgui_mywidget_t *mywidget) +{ + /* 榛樿杩欎釜鎺т欢鎺ユ敹鑱氱劍 */ + RTGUI_WIDGET(mywidget)->flag |= RTGUI_WIDGET_FLAG_FOCUSABLE; + /* 鍒濆鍖栨帶浠跺苟璁剧疆浜嬩欢澶勭悊鍑芥暟 */ + rtgui_object_set_event_handler(RTGUI_OBJECT(mywidget), rtgui_mywidget_event_handler); + + /* 鍒濆鐘舵�佹椂OFF */ + mywidget->status = MYWIDGET_STATUS_OFF; +} + +DEFINE_CLASS_TYPE(mywidget, "mywidget", + RTGUI_WIDGET_TYPE, + _rtgui_mywidget_constructor, + RT_NULL, + sizeof(struct rtgui_mywidget)); + +/* 鍒涘缓涓�涓嚜瀹氫箟鎺т欢 */ +struct rtgui_mywidget* rtgui_mywidget_create(rtgui_rect_t* r) +{ + struct rtgui_mywidget* me; + + /* 璁﹔tgui_widget鍒涘缓鍑轰竴涓寚瀹氱被鍨嬶細RTGUI_MYWIDGET_TYPE绫诲瀷鐨勬帶浠?*/ + me = (struct rtgui_mywidget*) rtgui_widget_create (RTGUI_MYWIDGET_TYPE); + if (me != RT_NULL) + { + rtgui_widget_set_rect(RTGUI_WIDGET(me), r); + } + + return me; +} + +/* 鍒犻櫎涓�涓嚜瀹氫箟鎺т欢 */ +void rtgui_mywidget_destroy(struct rtgui_mywidget* me) +{ + rtgui_widget_destroy(RTGUI_WIDGET(me)); +} diff --git a/examples/gui/mywidget.h b/examples/gui/mywidget.h index 8de95ba1c6..65a68a01bd 100644 --- a/examples/gui/mywidget.h +++ b/examples/gui/mywidget.h @@ -1,50 +1,50 @@ -/* - * 绋嬪簭娓呭崟锛氳嚜瀹氫箟鎺т欢 - * - * 杩欎釜渚嬪瓙鏄瀹炵幇涓�涓嚜瀹氫箟鎺т欢锛屽瑙傚ぇ鑷村 - * | - * --o-- - * | +/* + * 绋嬪簭娓呭崟锛氳嚜瀹氫箟鎺т欢 + * + * 杩欎釜渚嬪瓙鏄瀹炵幇涓�涓嚜瀹氫箟鎺т欢锛屽瑙傚ぇ鑷村 + * | + * --o-- + * | * 鐨勫舰鐘讹紝涓棿鐨刼鑹插僵琛ㄧず浜嗗綋鍓嶇殑鐘舵�侊紝ON鐘舵�佹椂鏄豢鑹诧紝OFF鐘舵�佹椂鏄孩鑹层�? * 骞朵笖锛岃繖涓猳浣嶇疆鎺ュ彈榧犳爣鐐瑰嚮锛岀偣鍑讳笅鍒囨崲涓嬬浉搴旂殑鐘舵�併�? - */ -#ifndef __MY_WIDGET_H__ -#define __MY_WIDGET_H__ - -#include -#include - -/* 鑷畾涔夋帶浠剁殑鐘舵�佸�煎畾涔?*/ -#define MYWIDGET_STATUS_ON 1 -#define MYWIDGET_STATUS_OFF 0 - -DECLARE_CLASS_TYPE(mywidget); -/** 姣忎釜鎺т欢浼氭湁涓�涓被鍨嬶紝閫氳繃濡備笅鐨勫畯鑾峰緱鎺т欢鐩稿簲鐨勭被鍨嬩俊鎭?*/ -#define RTGUI_MYWIDGET_TYPE (RTGUI_TYPE(mywidget)) -/** 瀵逛竴涓璞″疄渚嬶紝鍙互閫氳繃涓嬮潰鐨勫畯瀹炵幇绫诲瀷杞崲 */ -#define RTGUI_MYWIDGET(obj) (RTGUI_OBJECT_CAST((obj), RTGUI_MYWIDGET_TYPE, rtgui_mywidget_t)) -/** 鍙互閫氳繃涓嬮潰鐨勫畯浠ュ喅瀹氫竴涓叿浣撳疄渚嬫槸鍚︽槸鑷畾涔夋帶浠剁被鍨?*/ -#define RTGUI_IS_MYWIDGET(obj) (RTGUI_OBJECT_CHECK_TYPE((obj), RTGUI_MYWIDGET_TYPE)) - -/* 涓�у寲鎺т欢绫诲畾涔?*/ -struct rtgui_mywidget -{ - /* 杩欎釜鎺т欢鏄户鎵胯嚜rtgui_widget鎺т欢 */ - struct rtgui_widget parent; - - /* 鐘舵�侊細ON銆丱FF */ - rt_uint8_t status; -}; -typedef struct rtgui_mywidget rtgui_mywidget_t; - -/* 鎺т欢鐨勫垱寤哄拰鍒犻櫎 */ -struct rtgui_mywidget* rtgui_mywidget_create(rtgui_rect_t* r); -void rtgui_mywidget_destroy(struct rtgui_mywidget* me); - + */ +#ifndef __MY_WIDGET_H__ +#define __MY_WIDGET_H__ + +#include +#include + +/* 鑷畾涔夋帶浠剁殑鐘舵�佸�煎畾涔?*/ +#define MYWIDGET_STATUS_ON 1 +#define MYWIDGET_STATUS_OFF 0 + +DECLARE_CLASS_TYPE(mywidget); +/** 姣忎釜鎺т欢浼氭湁涓�涓被鍨嬶紝閫氳繃濡備笅鐨勫畯鑾峰緱鎺т欢鐩稿簲鐨勭被鍨嬩俊鎭?*/ +#define RTGUI_MYWIDGET_TYPE (RTGUI_TYPE(mywidget)) +/** 瀵逛竴涓璞″疄渚嬶紝鍙互閫氳繃涓嬮潰鐨勫畯瀹炵幇绫诲瀷杞崲 */ +#define RTGUI_MYWIDGET(obj) (RTGUI_OBJECT_CAST((obj), RTGUI_MYWIDGET_TYPE, rtgui_mywidget_t)) +/** 鍙互閫氳繃涓嬮潰鐨勫畯浠ュ喅瀹氫竴涓叿浣撳疄渚嬫槸鍚︽槸鑷畾涔夋帶浠剁被鍨?*/ +#define RTGUI_IS_MYWIDGET(obj) (RTGUI_OBJECT_CHECK_TYPE((obj), RTGUI_MYWIDGET_TYPE)) + +/* 涓�у寲鎺т欢绫诲畾涔?*/ +struct rtgui_mywidget +{ + /* 杩欎釜鎺т欢鏄户鎵胯嚜rtgui_widget鎺т欢 */ + struct rtgui_widget parent; + + /* 鐘舵�侊細ON銆丱FF */ + rt_uint8_t status; +}; +typedef struct rtgui_mywidget rtgui_mywidget_t; + +/* 鎺т欢鐨勫垱寤哄拰鍒犻櫎 */ +struct rtgui_mywidget* rtgui_mywidget_create(rtgui_rect_t* r); +void rtgui_mywidget_destroy(struct rtgui_mywidget* me); + /* 鎺т欢鐨勯粯璁や簨浠跺鐞嗗嚱鏁般�? - * 瀵逛竴涓帶浠惰�岃█锛屽鏋滄淳鐢熻嚜瀹冪殑瀛愭帶浠跺緢鍙兘浼氳皟鐢ㄧ埗鎺т欢鐨勪簨浠跺鐞嗗嚱鏁帮紝 + * 瀵逛竴涓帶浠惰�岃█锛屽鏋滄淳鐢熻嚜瀹冪殑瀛愭帶浠跺緢鍙兘浼氳皟鐢ㄧ埗鎺т欢鐨勪簨浠跺鐞嗗嚱鏁帮紝 * 鎵�浠ヨ繖閲岄噰鐢ㄥ叕寮�澹版槑鐨勬柟寮忋�? - */ -rt_bool_t rtgui_mywidget_event_handler(struct rtgui_widget* widget, struct rtgui_event* event); - -#endif + */ +rt_bool_t rtgui_mywidget_event_handler(struct rtgui_widget* widget, struct rtgui_event* event); + +#endif diff --git a/examples/gui/play.hdh b/examples/gui/play.hdh index 276852cabc..0230cf09cc 100644 --- a/examples/gui/play.hdh +++ b/examples/gui/play.hdh @@ -1,107 +1,107 @@ -static const unsigned char play_hdh[] = { - 0x48, 0x44, 0x43, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdb, 0x8d, 0xdb, 0x8d, - 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, - 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, - 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, - 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, - 0xdb, 0x8d, 0xdb, 0x8d, 0x9d, 0xae, 0xdf, 0xef, 0xbf, 0xe7, 0xbf, 0xe7, - 0xbf, 0xe7, 0xbf, 0xe7, 0xbf, 0xe7, 0xbf, 0xe7, 0xbf, 0xe7, 0xbf, 0xe7, - 0xbf, 0xe7, 0xbf, 0xe7, 0xbf, 0xe7, 0xbf, 0xe7, 0xbf, 0xe7, 0xbf, 0xe7, - 0xbf, 0xe7, 0xbf, 0xe7, 0xbf, 0xe7, 0xbf, 0xe7, 0xbf, 0xe7, 0xbf, 0xe7, - 0xbf, 0xe7, 0xbf, 0xe7, 0xbf, 0xe7, 0xbf, 0xe7, 0xbf, 0xe7, 0x9d, 0xae, - 0x9d, 0xae, 0xdf, 0xef, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, - 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, - 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, - 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, - 0x9f, 0xdf, 0x9f, 0xdf, 0xdf, 0xef, 0x9d, 0xae, 0x7d, 0xae, 0xbf, 0xef, - 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, - 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, - 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, - 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, - 0xbf, 0xef, 0x7d, 0xae, 0x7d, 0xae, 0xbf, 0xe7, 0x7f, 0xd7, 0x7f, 0xd7, - 0x7f, 0xd7, 0x7f, 0xd7, 0x7f, 0xd7, 0x7f, 0xd7, 0x7f, 0xd7, 0x7f, 0xd7, - 0x7f, 0xd7, 0x7f, 0xd7, 0x7f, 0xd7, 0x7f, 0xd7, 0x7f, 0xd7, 0x7f, 0xd7, - 0x7f, 0xd7, 0x7f, 0xd7, 0x7f, 0xd7, 0x7f, 0xd7, 0x7f, 0xd7, 0x7f, 0xd7, - 0x7f, 0xd7, 0x7f, 0xd7, 0x7f, 0xd7, 0x7f, 0xd7, 0xbf, 0xe7, 0x7d, 0xae, - 0x7d, 0xa6, 0xbf, 0xe7, 0x5f, 0xd7, 0x5f, 0xd7, 0x5f, 0xd7, 0x5f, 0xd7, - 0x5f, 0xd7, 0x5f, 0xd7, 0x5f, 0xd7, 0x7a, 0x6d, 0x1a, 0x4d, 0x1a, 0x4d, - 0x7a, 0x6d, 0x5f, 0xd7, 0x5f, 0xd7, 0x7a, 0x6d, 0x1a, 0x4d, 0x1a, 0x4d, - 0x7a, 0x6d, 0x5f, 0xd7, 0x5f, 0xd7, 0x5f, 0xd7, 0x5f, 0xd7, 0x5f, 0xd7, - 0x5f, 0xd7, 0x5f, 0xd7, 0xbf, 0xe7, 0x7d, 0xa6, 0x5d, 0xa6, 0x9f, 0xe7, - 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, - 0x5f, 0xcf, 0xf9, 0x4c, 0x7c, 0x55, 0x7c, 0x55, 0xf9, 0x4c, 0x5f, 0xcf, - 0x5f, 0xcf, 0xf9, 0x4c, 0x7c, 0x55, 0x7c, 0x55, 0xf9, 0x4c, 0x5f, 0xcf, - 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, - 0x9f, 0xe7, 0x5d, 0xa6, 0x5d, 0xa6, 0x9f, 0xdf, 0x5f, 0xcf, 0x5f, 0xcf, - 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, 0xf9, 0x4c, - 0x5b, 0x55, 0x5b, 0x55, 0xf9, 0x4c, 0x5f, 0xcf, 0x5f, 0xcf, 0xf9, 0x4c, - 0x5b, 0x55, 0x5b, 0x55, 0xf9, 0x4c, 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, - 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, 0x9f, 0xdf, 0x5d, 0xa6, - 0x5c, 0xa6, 0x9f, 0xdf, 0x3f, 0xc7, 0x3f, 0xc7, 0x3f, 0xc7, 0x3f, 0xc7, - 0x3f, 0xc7, 0x3f, 0xc7, 0x3f, 0xc7, 0xd9, 0x4c, 0x3b, 0x4d, 0x3b, 0x4d, - 0xd9, 0x4c, 0x3f, 0xc7, 0x3f, 0xc7, 0xd9, 0x4c, 0x3b, 0x4d, 0x3b, 0x4d, - 0xd9, 0x4c, 0x3f, 0xc7, 0x3f, 0xc7, 0x3f, 0xc7, 0x3f, 0xc7, 0x3f, 0xc7, - 0x3f, 0xc7, 0x3f, 0xc7, 0x9f, 0xdf, 0x5c, 0xa6, 0x3c, 0xa6, 0x7f, 0xdf, - 0x3e, 0xc7, 0x3e, 0xc7, 0x3e, 0xc7, 0x3e, 0xc7, 0x3e, 0xc7, 0x3e, 0xc7, - 0x3e, 0xc7, 0xb8, 0x44, 0x1a, 0x4d, 0x1a, 0x4d, 0xb8, 0x44, 0x3e, 0xc7, - 0x3e, 0xc7, 0xb8, 0x44, 0x1a, 0x4d, 0x1a, 0x4d, 0xb8, 0x44, 0x3e, 0xc7, - 0x3e, 0xc7, 0x3e, 0xc7, 0x3e, 0xc7, 0x3e, 0xc7, 0x3e, 0xc7, 0x3e, 0xc7, - 0x7f, 0xdf, 0x3c, 0xa6, 0x3c, 0x9e, 0x7f, 0xd7, 0x1e, 0xbf, 0x1e, 0xbf, - 0x1e, 0xbf, 0x1e, 0xbf, 0x1e, 0xbf, 0x1e, 0xbf, 0x1e, 0xbf, 0x98, 0x3c, - 0xfa, 0x44, 0xfa, 0x44, 0x98, 0x3c, 0x1e, 0xbf, 0x1e, 0xbf, 0x98, 0x3c, - 0xfa, 0x44, 0xfa, 0x44, 0x98, 0x3c, 0x1e, 0xbf, 0x1e, 0xbf, 0x1e, 0xbf, - 0x1e, 0xbf, 0x1e, 0xbf, 0x1e, 0xbf, 0x1e, 0xbf, 0x7f, 0xd7, 0x3c, 0x9e, - 0x1c, 0x9e, 0x7f, 0xd7, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, - 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0x77, 0x3c, 0xd9, 0x3c, 0xd9, 0x3c, - 0x77, 0x3c, 0xfe, 0xbe, 0xfe, 0xbe, 0x77, 0x3c, 0xd9, 0x3c, 0xd9, 0x3c, - 0x77, 0x3c, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, - 0xfe, 0xbe, 0xfe, 0xbe, 0x7f, 0xd7, 0x1c, 0x9e, 0x1c, 0x9e, 0x5e, 0xcf, - 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, - 0xfe, 0xbe, 0x56, 0x34, 0x98, 0x3c, 0x98, 0x3c, 0x56, 0x34, 0xfe, 0xbe, - 0xfe, 0xbe, 0x56, 0x34, 0x98, 0x3c, 0x98, 0x3c, 0x56, 0x34, 0xfe, 0xbe, - 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, - 0x5e, 0xcf, 0x1c, 0x9e, 0xfc, 0x95, 0x5e, 0xcf, 0xfe, 0xb6, 0xfe, 0xb6, - 0xfe, 0xb6, 0xfe, 0xb6, 0xfe, 0xb6, 0xfe, 0xb6, 0xfe, 0xb6, 0x36, 0x34, - 0x78, 0x34, 0x78, 0x34, 0x36, 0x34, 0xfe, 0xb6, 0xfe, 0xb6, 0x36, 0x34, - 0x78, 0x34, 0x78, 0x34, 0x36, 0x34, 0xfe, 0xb6, 0xfe, 0xb6, 0xfe, 0xb6, - 0xfe, 0xb6, 0xfe, 0xb6, 0xfe, 0xb6, 0xfe, 0xb6, 0x5e, 0xcf, 0xfc, 0x95, - 0xfb, 0x95, 0x3e, 0xcf, 0xde, 0xb6, 0xde, 0xb6, 0xde, 0xb6, 0xde, 0xb6, - 0xde, 0xb6, 0xde, 0xb6, 0xde, 0xb6, 0xf5, 0x2b, 0x57, 0x34, 0x57, 0x34, - 0xf5, 0x2b, 0xde, 0xb6, 0xde, 0xb6, 0xf5, 0x2b, 0x57, 0x34, 0x57, 0x34, - 0xf5, 0x2b, 0xde, 0xb6, 0xde, 0xb6, 0xde, 0xb6, 0xde, 0xb6, 0xde, 0xb6, - 0xde, 0xb6, 0xde, 0xb6, 0x3e, 0xcf, 0xfb, 0x95, 0xdb, 0x95, 0x3e, 0xc7, - 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, - 0xbe, 0xae, 0xd5, 0x2b, 0x36, 0x2c, 0x36, 0x2c, 0xd5, 0x2b, 0xbe, 0xae, - 0xbe, 0xae, 0xd5, 0x2b, 0x36, 0x2c, 0x36, 0x2c, 0xd5, 0x2b, 0xbe, 0xae, - 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, - 0x3e, 0xc7, 0xdb, 0x95, 0xdb, 0x95, 0x3e, 0xc7, 0xbe, 0xae, 0xbe, 0xae, - 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, 0x56, 0x44, - 0xd4, 0x23, 0xd4, 0x23, 0x56, 0x44, 0xbe, 0xae, 0xbe, 0xae, 0x56, 0x44, - 0xd4, 0x23, 0xd4, 0x23, 0x56, 0x44, 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, - 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, 0x3e, 0xc7, 0xdb, 0x95, - 0xdb, 0x8d, 0x1e, 0xc7, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, - 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, - 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, - 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, - 0x9d, 0xa6, 0x9d, 0xa6, 0x1e, 0xc7, 0xdb, 0x8d, 0xbb, 0x8d, 0x1e, 0xbf, - 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, - 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, - 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, - 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, - 0x1e, 0xbf, 0xbb, 0x8d, 0xbb, 0x8d, 0x1e, 0xbf, 0x9d, 0xa6, 0x9d, 0xa6, - 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, - 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, - 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, - 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x1e, 0xbf, 0xbb, 0x8d, - 0xbb, 0x8d, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, - 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, - 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, - 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, - 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xbb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, - 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, - 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, - 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, - 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, - 0xdb, 0x8d, 0xdb, 0x8d, -}; +static const unsigned char play_hdh[] = { + 0x48, 0x44, 0x43, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdb, 0x8d, 0xdb, 0x8d, + 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, + 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, + 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, + 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, + 0xdb, 0x8d, 0xdb, 0x8d, 0x9d, 0xae, 0xdf, 0xef, 0xbf, 0xe7, 0xbf, 0xe7, + 0xbf, 0xe7, 0xbf, 0xe7, 0xbf, 0xe7, 0xbf, 0xe7, 0xbf, 0xe7, 0xbf, 0xe7, + 0xbf, 0xe7, 0xbf, 0xe7, 0xbf, 0xe7, 0xbf, 0xe7, 0xbf, 0xe7, 0xbf, 0xe7, + 0xbf, 0xe7, 0xbf, 0xe7, 0xbf, 0xe7, 0xbf, 0xe7, 0xbf, 0xe7, 0xbf, 0xe7, + 0xbf, 0xe7, 0xbf, 0xe7, 0xbf, 0xe7, 0xbf, 0xe7, 0xbf, 0xe7, 0x9d, 0xae, + 0x9d, 0xae, 0xdf, 0xef, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, + 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, + 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, + 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, + 0x9f, 0xdf, 0x9f, 0xdf, 0xdf, 0xef, 0x9d, 0xae, 0x7d, 0xae, 0xbf, 0xef, + 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, + 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, + 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, + 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, + 0xbf, 0xef, 0x7d, 0xae, 0x7d, 0xae, 0xbf, 0xe7, 0x7f, 0xd7, 0x7f, 0xd7, + 0x7f, 0xd7, 0x7f, 0xd7, 0x7f, 0xd7, 0x7f, 0xd7, 0x7f, 0xd7, 0x7f, 0xd7, + 0x7f, 0xd7, 0x7f, 0xd7, 0x7f, 0xd7, 0x7f, 0xd7, 0x7f, 0xd7, 0x7f, 0xd7, + 0x7f, 0xd7, 0x7f, 0xd7, 0x7f, 0xd7, 0x7f, 0xd7, 0x7f, 0xd7, 0x7f, 0xd7, + 0x7f, 0xd7, 0x7f, 0xd7, 0x7f, 0xd7, 0x7f, 0xd7, 0xbf, 0xe7, 0x7d, 0xae, + 0x7d, 0xa6, 0xbf, 0xe7, 0x5f, 0xd7, 0x5f, 0xd7, 0x5f, 0xd7, 0x5f, 0xd7, + 0x5f, 0xd7, 0x5f, 0xd7, 0x5f, 0xd7, 0x7a, 0x6d, 0x1a, 0x4d, 0x1a, 0x4d, + 0x7a, 0x6d, 0x5f, 0xd7, 0x5f, 0xd7, 0x7a, 0x6d, 0x1a, 0x4d, 0x1a, 0x4d, + 0x7a, 0x6d, 0x5f, 0xd7, 0x5f, 0xd7, 0x5f, 0xd7, 0x5f, 0xd7, 0x5f, 0xd7, + 0x5f, 0xd7, 0x5f, 0xd7, 0xbf, 0xe7, 0x7d, 0xa6, 0x5d, 0xa6, 0x9f, 0xe7, + 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, + 0x5f, 0xcf, 0xf9, 0x4c, 0x7c, 0x55, 0x7c, 0x55, 0xf9, 0x4c, 0x5f, 0xcf, + 0x5f, 0xcf, 0xf9, 0x4c, 0x7c, 0x55, 0x7c, 0x55, 0xf9, 0x4c, 0x5f, 0xcf, + 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, + 0x9f, 0xe7, 0x5d, 0xa6, 0x5d, 0xa6, 0x9f, 0xdf, 0x5f, 0xcf, 0x5f, 0xcf, + 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, 0xf9, 0x4c, + 0x5b, 0x55, 0x5b, 0x55, 0xf9, 0x4c, 0x5f, 0xcf, 0x5f, 0xcf, 0xf9, 0x4c, + 0x5b, 0x55, 0x5b, 0x55, 0xf9, 0x4c, 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, + 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, 0x9f, 0xdf, 0x5d, 0xa6, + 0x5c, 0xa6, 0x9f, 0xdf, 0x3f, 0xc7, 0x3f, 0xc7, 0x3f, 0xc7, 0x3f, 0xc7, + 0x3f, 0xc7, 0x3f, 0xc7, 0x3f, 0xc7, 0xd9, 0x4c, 0x3b, 0x4d, 0x3b, 0x4d, + 0xd9, 0x4c, 0x3f, 0xc7, 0x3f, 0xc7, 0xd9, 0x4c, 0x3b, 0x4d, 0x3b, 0x4d, + 0xd9, 0x4c, 0x3f, 0xc7, 0x3f, 0xc7, 0x3f, 0xc7, 0x3f, 0xc7, 0x3f, 0xc7, + 0x3f, 0xc7, 0x3f, 0xc7, 0x9f, 0xdf, 0x5c, 0xa6, 0x3c, 0xa6, 0x7f, 0xdf, + 0x3e, 0xc7, 0x3e, 0xc7, 0x3e, 0xc7, 0x3e, 0xc7, 0x3e, 0xc7, 0x3e, 0xc7, + 0x3e, 0xc7, 0xb8, 0x44, 0x1a, 0x4d, 0x1a, 0x4d, 0xb8, 0x44, 0x3e, 0xc7, + 0x3e, 0xc7, 0xb8, 0x44, 0x1a, 0x4d, 0x1a, 0x4d, 0xb8, 0x44, 0x3e, 0xc7, + 0x3e, 0xc7, 0x3e, 0xc7, 0x3e, 0xc7, 0x3e, 0xc7, 0x3e, 0xc7, 0x3e, 0xc7, + 0x7f, 0xdf, 0x3c, 0xa6, 0x3c, 0x9e, 0x7f, 0xd7, 0x1e, 0xbf, 0x1e, 0xbf, + 0x1e, 0xbf, 0x1e, 0xbf, 0x1e, 0xbf, 0x1e, 0xbf, 0x1e, 0xbf, 0x98, 0x3c, + 0xfa, 0x44, 0xfa, 0x44, 0x98, 0x3c, 0x1e, 0xbf, 0x1e, 0xbf, 0x98, 0x3c, + 0xfa, 0x44, 0xfa, 0x44, 0x98, 0x3c, 0x1e, 0xbf, 0x1e, 0xbf, 0x1e, 0xbf, + 0x1e, 0xbf, 0x1e, 0xbf, 0x1e, 0xbf, 0x1e, 0xbf, 0x7f, 0xd7, 0x3c, 0x9e, + 0x1c, 0x9e, 0x7f, 0xd7, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, + 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0x77, 0x3c, 0xd9, 0x3c, 0xd9, 0x3c, + 0x77, 0x3c, 0xfe, 0xbe, 0xfe, 0xbe, 0x77, 0x3c, 0xd9, 0x3c, 0xd9, 0x3c, + 0x77, 0x3c, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, + 0xfe, 0xbe, 0xfe, 0xbe, 0x7f, 0xd7, 0x1c, 0x9e, 0x1c, 0x9e, 0x5e, 0xcf, + 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, + 0xfe, 0xbe, 0x56, 0x34, 0x98, 0x3c, 0x98, 0x3c, 0x56, 0x34, 0xfe, 0xbe, + 0xfe, 0xbe, 0x56, 0x34, 0x98, 0x3c, 0x98, 0x3c, 0x56, 0x34, 0xfe, 0xbe, + 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, + 0x5e, 0xcf, 0x1c, 0x9e, 0xfc, 0x95, 0x5e, 0xcf, 0xfe, 0xb6, 0xfe, 0xb6, + 0xfe, 0xb6, 0xfe, 0xb6, 0xfe, 0xb6, 0xfe, 0xb6, 0xfe, 0xb6, 0x36, 0x34, + 0x78, 0x34, 0x78, 0x34, 0x36, 0x34, 0xfe, 0xb6, 0xfe, 0xb6, 0x36, 0x34, + 0x78, 0x34, 0x78, 0x34, 0x36, 0x34, 0xfe, 0xb6, 0xfe, 0xb6, 0xfe, 0xb6, + 0xfe, 0xb6, 0xfe, 0xb6, 0xfe, 0xb6, 0xfe, 0xb6, 0x5e, 0xcf, 0xfc, 0x95, + 0xfb, 0x95, 0x3e, 0xcf, 0xde, 0xb6, 0xde, 0xb6, 0xde, 0xb6, 0xde, 0xb6, + 0xde, 0xb6, 0xde, 0xb6, 0xde, 0xb6, 0xf5, 0x2b, 0x57, 0x34, 0x57, 0x34, + 0xf5, 0x2b, 0xde, 0xb6, 0xde, 0xb6, 0xf5, 0x2b, 0x57, 0x34, 0x57, 0x34, + 0xf5, 0x2b, 0xde, 0xb6, 0xde, 0xb6, 0xde, 0xb6, 0xde, 0xb6, 0xde, 0xb6, + 0xde, 0xb6, 0xde, 0xb6, 0x3e, 0xcf, 0xfb, 0x95, 0xdb, 0x95, 0x3e, 0xc7, + 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, + 0xbe, 0xae, 0xd5, 0x2b, 0x36, 0x2c, 0x36, 0x2c, 0xd5, 0x2b, 0xbe, 0xae, + 0xbe, 0xae, 0xd5, 0x2b, 0x36, 0x2c, 0x36, 0x2c, 0xd5, 0x2b, 0xbe, 0xae, + 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, + 0x3e, 0xc7, 0xdb, 0x95, 0xdb, 0x95, 0x3e, 0xc7, 0xbe, 0xae, 0xbe, 0xae, + 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, 0x56, 0x44, + 0xd4, 0x23, 0xd4, 0x23, 0x56, 0x44, 0xbe, 0xae, 0xbe, 0xae, 0x56, 0x44, + 0xd4, 0x23, 0xd4, 0x23, 0x56, 0x44, 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, + 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, 0x3e, 0xc7, 0xdb, 0x95, + 0xdb, 0x8d, 0x1e, 0xc7, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, + 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, + 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, + 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, + 0x9d, 0xa6, 0x9d, 0xa6, 0x1e, 0xc7, 0xdb, 0x8d, 0xbb, 0x8d, 0x1e, 0xbf, + 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, + 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, + 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, + 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, + 0x1e, 0xbf, 0xbb, 0x8d, 0xbb, 0x8d, 0x1e, 0xbf, 0x9d, 0xa6, 0x9d, 0xa6, + 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, + 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, + 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, + 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x1e, 0xbf, 0xbb, 0x8d, + 0xbb, 0x8d, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, + 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, + 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, + 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, + 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xbb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, + 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, + 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, + 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, + 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, + 0xdb, 0x8d, 0xdb, 0x8d, +}; diff --git a/examples/gui/stop.hdh b/examples/gui/stop.hdh index 9271b7ec9a..83f9e60b78 100644 --- a/examples/gui/stop.hdh +++ b/examples/gui/stop.hdh @@ -1,107 +1,107 @@ -static const unsigned char stop_hdh[] = { - 0x48, 0x44, 0x43, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdb, 0x8d, 0xdb, 0x8d, - 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, - 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, - 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, - 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, - 0xdb, 0x8d, 0xdb, 0x8d, 0x9d, 0xae, 0xdf, 0xef, 0xbf, 0xe7, 0xbf, 0xe7, - 0xbf, 0xe7, 0xbf, 0xe7, 0xbf, 0xe7, 0xbf, 0xe7, 0xbf, 0xe7, 0xbf, 0xe7, - 0xbf, 0xe7, 0xbf, 0xe7, 0xbf, 0xe7, 0xbf, 0xe7, 0xbf, 0xe7, 0xbf, 0xe7, - 0xbf, 0xe7, 0xbf, 0xe7, 0xbf, 0xe7, 0xbf, 0xe7, 0xbf, 0xe7, 0xbf, 0xe7, - 0xbf, 0xe7, 0xbf, 0xe7, 0xbf, 0xe7, 0xbf, 0xe7, 0xbf, 0xe7, 0x9d, 0xae, - 0x9d, 0xae, 0xdf, 0xef, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, - 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, - 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, - 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, - 0x9f, 0xdf, 0x9f, 0xdf, 0xdf, 0xef, 0x9d, 0xae, 0x7d, 0xae, 0xbf, 0xef, - 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, - 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, - 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, - 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, - 0xbf, 0xef, 0x7d, 0xae, 0x7d, 0xae, 0xbf, 0xe7, 0x7f, 0xd7, 0x7f, 0xd7, - 0x7f, 0xd7, 0x7f, 0xd7, 0x7f, 0xd7, 0x7f, 0xd7, 0x7f, 0xd7, 0x7f, 0xd7, - 0x7f, 0xd7, 0x7f, 0xd7, 0x7f, 0xd7, 0x7f, 0xd7, 0x7f, 0xd7, 0x7f, 0xd7, - 0x7f, 0xd7, 0x7f, 0xd7, 0x7f, 0xd7, 0x7f, 0xd7, 0x7f, 0xd7, 0x7f, 0xd7, - 0x7f, 0xd7, 0x7f, 0xd7, 0x7f, 0xd7, 0x7f, 0xd7, 0xbf, 0xe7, 0x7d, 0xae, - 0x7d, 0xa6, 0xbf, 0xe7, 0x5f, 0xd7, 0x5f, 0xd7, 0x5f, 0xd7, 0x5f, 0xd7, - 0x5f, 0xd7, 0x5f, 0xd7, 0x5f, 0xd7, 0x5f, 0xd7, 0xfb, 0x8d, 0x3c, 0x96, - 0x5f, 0xd7, 0x5f, 0xd7, 0x5f, 0xd7, 0x5f, 0xd7, 0x5f, 0xd7, 0x5f, 0xd7, - 0x5f, 0xd7, 0x5f, 0xd7, 0x5f, 0xd7, 0x5f, 0xd7, 0x5f, 0xd7, 0x5f, 0xd7, - 0x5f, 0xd7, 0x5f, 0xd7, 0xbf, 0xe7, 0x7d, 0xa6, 0x5d, 0xa6, 0x9f, 0xe7, - 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, - 0x5f, 0xcf, 0x5f, 0xcf, 0xf9, 0x4c, 0x3a, 0x55, 0x5a, 0x65, 0x9d, 0xae, - 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, - 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, - 0x9f, 0xe7, 0x5d, 0xa6, 0x5d, 0xa6, 0x9f, 0xdf, 0x5f, 0xcf, 0x5f, 0xcf, - 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, - 0xf9, 0x4c, 0x5b, 0x55, 0x3b, 0x55, 0x1a, 0x4d, 0xba, 0x7d, 0x1e, 0xc7, - 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, - 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, 0x9f, 0xdf, 0x5d, 0xa6, - 0x5c, 0xa6, 0x9f, 0xdf, 0x3f, 0xc7, 0x3f, 0xc7, 0x3f, 0xc7, 0x3f, 0xc7, - 0x3f, 0xc7, 0x3f, 0xc7, 0x3f, 0xc7, 0x3f, 0xc7, 0xd9, 0x4c, 0x3b, 0x4d, - 0x3b, 0x4d, 0x3b, 0x4d, 0x1a, 0x4d, 0xf9, 0x4c, 0xfb, 0x8d, 0x3f, 0xc7, - 0x3f, 0xc7, 0x3f, 0xc7, 0x3f, 0xc7, 0x3f, 0xc7, 0x3f, 0xc7, 0x3f, 0xc7, - 0x3f, 0xc7, 0x3f, 0xc7, 0x9f, 0xdf, 0x5c, 0xa6, 0x3c, 0xa6, 0x7f, 0xdf, - 0x3e, 0xc7, 0x3e, 0xc7, 0x3e, 0xc7, 0x3e, 0xc7, 0x3e, 0xc7, 0x3e, 0xc7, - 0x3e, 0xc7, 0x3e, 0xc7, 0xb8, 0x44, 0x1a, 0x4d, 0x1a, 0x4d, 0x1a, 0x4d, - 0x1a, 0x4d, 0x1a, 0x4d, 0xd9, 0x44, 0x19, 0x5d, 0x7c, 0xa6, 0x3e, 0xc7, - 0x3e, 0xc7, 0x3e, 0xc7, 0x3e, 0xc7, 0x3e, 0xc7, 0x3e, 0xc7, 0x3e, 0xc7, - 0x7f, 0xdf, 0x3c, 0xa6, 0x3c, 0x9e, 0x7f, 0xd7, 0x1e, 0xbf, 0x1e, 0xbf, - 0x1e, 0xbf, 0x1e, 0xbf, 0x1e, 0xbf, 0x1e, 0xbf, 0x1e, 0xbf, 0x1e, 0xbf, - 0x98, 0x44, 0xfa, 0x44, 0xfa, 0x44, 0xfa, 0x44, 0xfa, 0x44, 0xfa, 0x44, - 0xf9, 0x44, 0xd9, 0x44, 0x98, 0x44, 0x39, 0x6d, 0x1e, 0xbf, 0x1e, 0xbf, - 0x1e, 0xbf, 0x1e, 0xbf, 0x1e, 0xbf, 0x1e, 0xbf, 0x7f, 0xd7, 0x3c, 0x9e, - 0x1c, 0x9e, 0x7f, 0xd7, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, - 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0x77, 0x3c, 0xd9, 0x44, - 0xd9, 0x44, 0xd9, 0x44, 0xd9, 0x44, 0xd9, 0x44, 0xb9, 0x44, 0xb8, 0x3c, - 0x77, 0x3c, 0x38, 0x6d, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, - 0xfe, 0xbe, 0xfe, 0xbe, 0x7f, 0xd7, 0x1c, 0x9e, 0x1c, 0x9e, 0x5e, 0xcf, - 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, - 0xfe, 0xbe, 0xfe, 0xbe, 0x56, 0x34, 0x98, 0x3c, 0x98, 0x3c, 0x98, 0x3c, - 0x98, 0x3c, 0x98, 0x3c, 0x77, 0x3c, 0xb7, 0x4c, 0x3c, 0x96, 0xfe, 0xbe, - 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, - 0x5e, 0xcf, 0x1c, 0x9e, 0xfc, 0x95, 0x5e, 0xcf, 0xfe, 0xb6, 0xfe, 0xb6, - 0xfe, 0xb6, 0xfe, 0xb6, 0xfe, 0xb6, 0xfe, 0xb6, 0xfe, 0xb6, 0xfe, 0xb6, - 0x36, 0x34, 0x78, 0x34, 0x78, 0x34, 0x78, 0x34, 0x57, 0x34, 0x56, 0x3c, - 0x9a, 0x7d, 0xfe, 0xb6, 0xfe, 0xb6, 0xfe, 0xb6, 0xfe, 0xb6, 0xfe, 0xb6, - 0xfe, 0xb6, 0xfe, 0xb6, 0xfe, 0xb6, 0xfe, 0xb6, 0x5e, 0xcf, 0xfc, 0x95, - 0xfb, 0x95, 0x3e, 0xcf, 0xde, 0xb6, 0xde, 0xb6, 0xde, 0xb6, 0xde, 0xb6, - 0xde, 0xb6, 0xde, 0xb6, 0xde, 0xb6, 0xde, 0xb6, 0x15, 0x2c, 0x57, 0x34, - 0x37, 0x34, 0x16, 0x2c, 0xf8, 0x5c, 0x9d, 0xae, 0xde, 0xb6, 0xde, 0xb6, - 0xde, 0xb6, 0xde, 0xb6, 0xde, 0xb6, 0xde, 0xb6, 0xde, 0xb6, 0xde, 0xb6, - 0xde, 0xb6, 0xde, 0xb6, 0x3e, 0xcf, 0xfb, 0x95, 0xdb, 0x95, 0x3e, 0xc7, - 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, - 0xbe, 0xae, 0xbe, 0xae, 0xd4, 0x2b, 0xf5, 0x2b, 0x56, 0x44, 0xfb, 0x8d, - 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, - 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, - 0x3e, 0xc7, 0xdb, 0x95, 0xdb, 0x95, 0x3e, 0xc7, 0xbe, 0xae, 0xbe, 0xae, - 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, - 0xf8, 0x64, 0x39, 0x6d, 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, - 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, - 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, 0x3e, 0xc7, 0xdb, 0x95, - 0xdb, 0x8d, 0x1e, 0xc7, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, - 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, - 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, - 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, - 0x9d, 0xa6, 0x9d, 0xa6, 0x1e, 0xc7, 0xdb, 0x8d, 0xbb, 0x8d, 0x1e, 0xbf, - 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, - 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, - 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, - 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, - 0x1e, 0xbf, 0xbb, 0x8d, 0xbb, 0x8d, 0x1e, 0xbf, 0x9d, 0xa6, 0x9d, 0xa6, - 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, - 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, - 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, - 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x1e, 0xbf, 0xbb, 0x8d, - 0xbb, 0x8d, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, - 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, - 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, - 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, - 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xbb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, - 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, - 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, - 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, - 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, - 0xdb, 0x8d, 0xdb, 0x8d, -}; +static const unsigned char stop_hdh[] = { + 0x48, 0x44, 0x43, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdb, 0x8d, 0xdb, 0x8d, + 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, + 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, + 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, + 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, + 0xdb, 0x8d, 0xdb, 0x8d, 0x9d, 0xae, 0xdf, 0xef, 0xbf, 0xe7, 0xbf, 0xe7, + 0xbf, 0xe7, 0xbf, 0xe7, 0xbf, 0xe7, 0xbf, 0xe7, 0xbf, 0xe7, 0xbf, 0xe7, + 0xbf, 0xe7, 0xbf, 0xe7, 0xbf, 0xe7, 0xbf, 0xe7, 0xbf, 0xe7, 0xbf, 0xe7, + 0xbf, 0xe7, 0xbf, 0xe7, 0xbf, 0xe7, 0xbf, 0xe7, 0xbf, 0xe7, 0xbf, 0xe7, + 0xbf, 0xe7, 0xbf, 0xe7, 0xbf, 0xe7, 0xbf, 0xe7, 0xbf, 0xe7, 0x9d, 0xae, + 0x9d, 0xae, 0xdf, 0xef, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, + 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, + 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, + 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, + 0x9f, 0xdf, 0x9f, 0xdf, 0xdf, 0xef, 0x9d, 0xae, 0x7d, 0xae, 0xbf, 0xef, + 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, + 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, + 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, + 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, 0x9f, 0xdf, + 0xbf, 0xef, 0x7d, 0xae, 0x7d, 0xae, 0xbf, 0xe7, 0x7f, 0xd7, 0x7f, 0xd7, + 0x7f, 0xd7, 0x7f, 0xd7, 0x7f, 0xd7, 0x7f, 0xd7, 0x7f, 0xd7, 0x7f, 0xd7, + 0x7f, 0xd7, 0x7f, 0xd7, 0x7f, 0xd7, 0x7f, 0xd7, 0x7f, 0xd7, 0x7f, 0xd7, + 0x7f, 0xd7, 0x7f, 0xd7, 0x7f, 0xd7, 0x7f, 0xd7, 0x7f, 0xd7, 0x7f, 0xd7, + 0x7f, 0xd7, 0x7f, 0xd7, 0x7f, 0xd7, 0x7f, 0xd7, 0xbf, 0xe7, 0x7d, 0xae, + 0x7d, 0xa6, 0xbf, 0xe7, 0x5f, 0xd7, 0x5f, 0xd7, 0x5f, 0xd7, 0x5f, 0xd7, + 0x5f, 0xd7, 0x5f, 0xd7, 0x5f, 0xd7, 0x5f, 0xd7, 0xfb, 0x8d, 0x3c, 0x96, + 0x5f, 0xd7, 0x5f, 0xd7, 0x5f, 0xd7, 0x5f, 0xd7, 0x5f, 0xd7, 0x5f, 0xd7, + 0x5f, 0xd7, 0x5f, 0xd7, 0x5f, 0xd7, 0x5f, 0xd7, 0x5f, 0xd7, 0x5f, 0xd7, + 0x5f, 0xd7, 0x5f, 0xd7, 0xbf, 0xe7, 0x7d, 0xa6, 0x5d, 0xa6, 0x9f, 0xe7, + 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, + 0x5f, 0xcf, 0x5f, 0xcf, 0xf9, 0x4c, 0x3a, 0x55, 0x5a, 0x65, 0x9d, 0xae, + 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, + 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, + 0x9f, 0xe7, 0x5d, 0xa6, 0x5d, 0xa6, 0x9f, 0xdf, 0x5f, 0xcf, 0x5f, 0xcf, + 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, + 0xf9, 0x4c, 0x5b, 0x55, 0x3b, 0x55, 0x1a, 0x4d, 0xba, 0x7d, 0x1e, 0xc7, + 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, + 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, 0x5f, 0xcf, 0x9f, 0xdf, 0x5d, 0xa6, + 0x5c, 0xa6, 0x9f, 0xdf, 0x3f, 0xc7, 0x3f, 0xc7, 0x3f, 0xc7, 0x3f, 0xc7, + 0x3f, 0xc7, 0x3f, 0xc7, 0x3f, 0xc7, 0x3f, 0xc7, 0xd9, 0x4c, 0x3b, 0x4d, + 0x3b, 0x4d, 0x3b, 0x4d, 0x1a, 0x4d, 0xf9, 0x4c, 0xfb, 0x8d, 0x3f, 0xc7, + 0x3f, 0xc7, 0x3f, 0xc7, 0x3f, 0xc7, 0x3f, 0xc7, 0x3f, 0xc7, 0x3f, 0xc7, + 0x3f, 0xc7, 0x3f, 0xc7, 0x9f, 0xdf, 0x5c, 0xa6, 0x3c, 0xa6, 0x7f, 0xdf, + 0x3e, 0xc7, 0x3e, 0xc7, 0x3e, 0xc7, 0x3e, 0xc7, 0x3e, 0xc7, 0x3e, 0xc7, + 0x3e, 0xc7, 0x3e, 0xc7, 0xb8, 0x44, 0x1a, 0x4d, 0x1a, 0x4d, 0x1a, 0x4d, + 0x1a, 0x4d, 0x1a, 0x4d, 0xd9, 0x44, 0x19, 0x5d, 0x7c, 0xa6, 0x3e, 0xc7, + 0x3e, 0xc7, 0x3e, 0xc7, 0x3e, 0xc7, 0x3e, 0xc7, 0x3e, 0xc7, 0x3e, 0xc7, + 0x7f, 0xdf, 0x3c, 0xa6, 0x3c, 0x9e, 0x7f, 0xd7, 0x1e, 0xbf, 0x1e, 0xbf, + 0x1e, 0xbf, 0x1e, 0xbf, 0x1e, 0xbf, 0x1e, 0xbf, 0x1e, 0xbf, 0x1e, 0xbf, + 0x98, 0x44, 0xfa, 0x44, 0xfa, 0x44, 0xfa, 0x44, 0xfa, 0x44, 0xfa, 0x44, + 0xf9, 0x44, 0xd9, 0x44, 0x98, 0x44, 0x39, 0x6d, 0x1e, 0xbf, 0x1e, 0xbf, + 0x1e, 0xbf, 0x1e, 0xbf, 0x1e, 0xbf, 0x1e, 0xbf, 0x7f, 0xd7, 0x3c, 0x9e, + 0x1c, 0x9e, 0x7f, 0xd7, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, + 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0x77, 0x3c, 0xd9, 0x44, + 0xd9, 0x44, 0xd9, 0x44, 0xd9, 0x44, 0xd9, 0x44, 0xb9, 0x44, 0xb8, 0x3c, + 0x77, 0x3c, 0x38, 0x6d, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, + 0xfe, 0xbe, 0xfe, 0xbe, 0x7f, 0xd7, 0x1c, 0x9e, 0x1c, 0x9e, 0x5e, 0xcf, + 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, + 0xfe, 0xbe, 0xfe, 0xbe, 0x56, 0x34, 0x98, 0x3c, 0x98, 0x3c, 0x98, 0x3c, + 0x98, 0x3c, 0x98, 0x3c, 0x77, 0x3c, 0xb7, 0x4c, 0x3c, 0x96, 0xfe, 0xbe, + 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, + 0x5e, 0xcf, 0x1c, 0x9e, 0xfc, 0x95, 0x5e, 0xcf, 0xfe, 0xb6, 0xfe, 0xb6, + 0xfe, 0xb6, 0xfe, 0xb6, 0xfe, 0xb6, 0xfe, 0xb6, 0xfe, 0xb6, 0xfe, 0xb6, + 0x36, 0x34, 0x78, 0x34, 0x78, 0x34, 0x78, 0x34, 0x57, 0x34, 0x56, 0x3c, + 0x9a, 0x7d, 0xfe, 0xb6, 0xfe, 0xb6, 0xfe, 0xb6, 0xfe, 0xb6, 0xfe, 0xb6, + 0xfe, 0xb6, 0xfe, 0xb6, 0xfe, 0xb6, 0xfe, 0xb6, 0x5e, 0xcf, 0xfc, 0x95, + 0xfb, 0x95, 0x3e, 0xcf, 0xde, 0xb6, 0xde, 0xb6, 0xde, 0xb6, 0xde, 0xb6, + 0xde, 0xb6, 0xde, 0xb6, 0xde, 0xb6, 0xde, 0xb6, 0x15, 0x2c, 0x57, 0x34, + 0x37, 0x34, 0x16, 0x2c, 0xf8, 0x5c, 0x9d, 0xae, 0xde, 0xb6, 0xde, 0xb6, + 0xde, 0xb6, 0xde, 0xb6, 0xde, 0xb6, 0xde, 0xb6, 0xde, 0xb6, 0xde, 0xb6, + 0xde, 0xb6, 0xde, 0xb6, 0x3e, 0xcf, 0xfb, 0x95, 0xdb, 0x95, 0x3e, 0xc7, + 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, + 0xbe, 0xae, 0xbe, 0xae, 0xd4, 0x2b, 0xf5, 0x2b, 0x56, 0x44, 0xfb, 0x8d, + 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, + 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, + 0x3e, 0xc7, 0xdb, 0x95, 0xdb, 0x95, 0x3e, 0xc7, 0xbe, 0xae, 0xbe, 0xae, + 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, + 0xf8, 0x64, 0x39, 0x6d, 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, + 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, + 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, 0xbe, 0xae, 0x3e, 0xc7, 0xdb, 0x95, + 0xdb, 0x8d, 0x1e, 0xc7, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, + 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, + 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, + 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, + 0x9d, 0xa6, 0x9d, 0xa6, 0x1e, 0xc7, 0xdb, 0x8d, 0xbb, 0x8d, 0x1e, 0xbf, + 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, + 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, + 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, + 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, + 0x1e, 0xbf, 0xbb, 0x8d, 0xbb, 0x8d, 0x1e, 0xbf, 0x9d, 0xa6, 0x9d, 0xa6, + 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, + 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, + 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, + 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x9d, 0xa6, 0x1e, 0xbf, 0xbb, 0x8d, + 0xbb, 0x8d, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, + 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, + 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, + 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, + 0xfe, 0xbe, 0xfe, 0xbe, 0xfe, 0xbe, 0xbb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, + 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, + 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, + 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, + 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, 0xdb, 0x8d, + 0xdb, 0x8d, 0xdb, 0x8d, +}; -- cgit v1.3.1