mirror of
https://github.com/RT-Thread/rt-thread.git
synced 2026-09-20 17:44:20 +08:00
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
This commit is contained in:
+46
-40
@@ -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')
|
||||
|
||||
@@ -0,0 +1,147 @@
|
||||
#include <rtgui/rtgui.h>
|
||||
#include <rtgui/rtgui_system.h>
|
||||
#include <rtgui/rtgui_application.h>
|
||||
|
||||
#include <rtgui/widgets/window.h>
|
||||
#include <rtgui/widgets/notebook.h>
|
||||
|
||||
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 <finsh.h>
|
||||
void application()
|
||||
{
|
||||
application_init();
|
||||
}
|
||||
/* finsh的命令输出,可以直接执行application()函数以执行上面的函数 */
|
||||
FINSH_FUNCTION_EXPORT(application, application demo)
|
||||
#endif
|
||||
+90
-90
@@ -1,90 +1,90 @@
|
||||
/*
|
||||
* 程序清单:文件列表视图演示
|
||||
*
|
||||
* 这个例子会先创建出一个演示用的view,当点击上面的按钮时会按照模式显示的形式显示
|
||||
* 新的文件列表视图。
|
||||
*/
|
||||
#include "demo_view.h"
|
||||
#include <rtgui/widgets/label.h>
|
||||
#include <rtgui/widgets/button.h>
|
||||
#include <rtgui/widgets/filelist_view.h>
|
||||
|
||||
#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 <rtgui/widgets/label.h>
|
||||
#include <rtgui/widgets/button.h>
|
||||
#include <rtgui/widgets/filelist_view.h>
|
||||
|
||||
#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
|
||||
|
||||
+107
-115
@@ -1,115 +1,107 @@
|
||||
/*
|
||||
* 程序清单:列表视图演示
|
||||
*
|
||||
* 这个例子会先创建出一个演示用的view,当点击上面的按钮时会按照模式显示的形式显示
|
||||
* 新的列表视图
|
||||
*/
|
||||
#include "demo_view.h"
|
||||
#include <rtgui/widgets/label.h>
|
||||
#include <rtgui/widgets/button.h>
|
||||
#include <rtgui/widgets/window.h>
|
||||
#include <rtgui/widgets/list_view.h>
|
||||
|
||||
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 <rtgui/widgets/label.h>
|
||||
#include <rtgui/widgets/button.h>
|
||||
#include <rtgui/widgets/window.h>
|
||||
#include <rtgui/widgets/list_view.h>
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
+350
-354
File diff suppressed because it is too large
Load Diff
+27
-27
@@ -1,27 +1,27 @@
|
||||
#include <rtgui/rtgui.h>
|
||||
#include <rtgui/rtgui_server.h>
|
||||
|
||||
/*
|
||||
* 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 <rtgui/rtgui.h>
|
||||
#include <rtgui/rtgui_server.h>
|
||||
|
||||
/*
|
||||
* 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");
|
||||
}
|
||||
|
||||
@@ -1,19 +1,19 @@
|
||||
#include <rtgui/rtgui.h>
|
||||
#include <rtgui/driver.h>
|
||||
#include <rtgui/rtgui_server.h>
|
||||
|
||||
/*
|
||||
* 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 <rtgui/rtgui.h>
|
||||
#include <rtgui/driver.h>
|
||||
#include <rtgui/rtgui_server.h>
|
||||
|
||||
/*
|
||||
* 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");
|
||||
}
|
||||
|
||||
@@ -1,60 +1,60 @@
|
||||
/*
|
||||
* A simple workbench
|
||||
*/
|
||||
#include <rtthread.h>
|
||||
#include <rtgui/rtgui_server.h>
|
||||
#include <rtgui/rtgui_system.h>
|
||||
#include <rtgui/widgets/label.h>
|
||||
#include <rtgui/widgets/workbench.h>
|
||||
|
||||
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 <rtthread.h>
|
||||
#include <rtgui/rtgui_server.h>
|
||||
#include <rtgui/rtgui_system.h>
|
||||
#include <rtgui/widgets/label.h>
|
||||
#include <rtgui/widgets/workbench.h>
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
+150
-172
@@ -1,172 +1,150 @@
|
||||
#include <rtgui/rtgui.h>
|
||||
#include <rtgui/widgets/view.h>
|
||||
#include <rtgui/widgets/button.h>
|
||||
#include <rtgui/widgets/workbench.h>
|
||||
#include <rtgui/widgets/staticline.h>
|
||||
|
||||
/* 用于存放演示视图的数组,最多可创建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 <rtgui/rtgui.h>
|
||||
#include <rtgui/rtgui_application.h>
|
||||
|
||||
#include <rtgui/widgets/container.h>
|
||||
#include <rtgui/widgets/notebook.h>
|
||||
#include <rtgui/widgets/button.h>
|
||||
#include <rtgui/widgets/staticline.h>
|
||||
|
||||
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
|
||||
|
||||
+39
-39
@@ -1,39 +1,39 @@
|
||||
/*
|
||||
* 程序清单:view演示
|
||||
*
|
||||
* 这是一个视图的演示,也是为了配合整个GUI演示而制作的视图,或者说,其他大多数控件的演示
|
||||
* 都是采用,先创建一个demo_view(演示视图),然后再在这个演示视图上添加相应的控件。
|
||||
*
|
||||
* 这个演示视图默认上方带一个演示标题,下方带两个按钮,点击它切换到前一个视图或后一个视图。
|
||||
* 针对控件演示而言,这个演示视图最重要的是提供了一个可显示的区域,只需要在这块区域上添加
|
||||
* 控件即可达到演示的目的。
|
||||
*
|
||||
* 获得这个显示区域的函数是:
|
||||
* demo_view_get_rect函数。
|
||||
*/
|
||||
#ifndef __DEMO_VIEW_H__
|
||||
#define __DEMO_VIEW_H__
|
||||
|
||||
#include <rtgui/rtgui.h>
|
||||
#include <rtgui/widgets/view.h>
|
||||
#include <rtgui/widgets/workbench.h>
|
||||
|
||||
/* 如果是标准版本,可以启用box自动布局引擎 */
|
||||
#ifndef RTGUI_USING_SMALL_SIZE
|
||||
#include <rtgui/widgets/box.h>
|
||||
#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
|
||||
|
||||
/*
|
||||
* 程序清单:view演示
|
||||
*
|
||||
* 这是一个视图的演示,也是为了配合整个GUI演示而制作的视图,或者说,其他大多数控件的演示
|
||||
* 都是采用,先创建一个demo_view(演示视图),然后再在这个演示视图上添加相应的控件。
|
||||
*
|
||||
* 这个演示视图默认上方带一个演示标题,下方带两个按钮,点击它切换到前一个视图或后一个视图。
|
||||
* 针对控件演示而言,这个演示视图最重要的是提供了一个可显示的区域,只需要在这块区域上添加
|
||||
* 控件即可达到演示的目的。
|
||||
*
|
||||
* 获得这个显示区域的函数是:
|
||||
* demo_view_get_rect函数。
|
||||
*/
|
||||
#ifndef __DEMO_VIEW_H__
|
||||
#define __DEMO_VIEW_H__
|
||||
|
||||
#include <rtgui/rtgui.h>
|
||||
#include <rtgui/rtgui_application.h>
|
||||
#include <rtgui/widgets/container.h>
|
||||
|
||||
/* 如果是标准版本,可以启用box自动布局引擎 */
|
||||
#ifndef RTGUI_USING_SMALL_SIZE
|
||||
#include <rtgui/widgets/box.h>
|
||||
#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
|
||||
|
||||
|
||||
+132
-113
@@ -1,113 +1,132 @@
|
||||
#include <rtgui/dc.h>
|
||||
#include <rtgui/rtgui_system.h>
|
||||
#include <rtgui/widgets/view.h>
|
||||
#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 <rtgui/dc.h>
|
||||
#include <rtgui/rtgui_system.h>
|
||||
#include <rtgui/widgets/container.h>
|
||||
#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;
|
||||
}
|
||||
|
||||
+111
-111
@@ -1,111 +1,111 @@
|
||||
#include <rtgui/dc.h>
|
||||
#include <rtgui/dc_hw.h>
|
||||
#include <rtgui/rtgui_system.h>
|
||||
#include <rtgui/widgets/view.h>
|
||||
#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 <rtgui/dc.h>
|
||||
#include <rtgui/dc_hw.h>
|
||||
#include <rtgui/rtgui_system.h>
|
||||
#include <rtgui/widgets/container.h>
|
||||
#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;
|
||||
}
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
#include "demo_view.h"
|
||||
#ifndef RTGUI_USING_SMALL_SIZE
|
||||
#include <rtgui/widgets/box.h>
|
||||
|
||||
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/widgets/box.h>
|
||||
|
||||
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
|
||||
|
||||
@@ -1,124 +1,144 @@
|
||||
#include <rtgui/dc.h>
|
||||
#include <rtgui/rtgui_system.h>
|
||||
#include <rtgui/widgets/view.h>
|
||||
#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 <rtgui/dc.h>
|
||||
#include <rtgui/rtgui_system.h>
|
||||
#include <rtgui/widgets/container.h>
|
||||
#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;
|
||||
}
|
||||
|
||||
@@ -1,84 +1,80 @@
|
||||
/*
|
||||
* 程序清单:button控件演示
|
||||
*
|
||||
* 这个例子会在创建出的view上添加几个不同类型的button控件
|
||||
*/
|
||||
|
||||
#include "demo_view.h"
|
||||
#include <rtgui/widgets/button.h>
|
||||
|
||||
/* 创建用于演示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;
|
||||
/* 创建一个button控件 */
|
||||
button = rtgui_button_create("Red");
|
||||
/* 设置label控件的前景色为红色 */
|
||||
RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(button)) = red;
|
||||
/* 设置button的位置 */
|
||||
rtgui_widget_set_rect(RTGUI_WIDGET(button), &rect);
|
||||
/* view是一个container控件,调用add_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;
|
||||
/* 创建一个button控件 */
|
||||
button = rtgui_button_create("Blue");
|
||||
/* 设置label控件的前景色为蓝色 */
|
||||
RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(button)) = blue;
|
||||
/* 设置button的位置 */
|
||||
rtgui_widget_set_rect(RTGUI_WIDGET(button), &rect);
|
||||
/* view是一个container控件,调用add_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;
|
||||
/* 创建一个button控件 */
|
||||
button = rtgui_button_create("12 font");
|
||||
/* 设置字体为12点阵的asc字体 */
|
||||
font = rtgui_font_refer("asc", 12);
|
||||
RTGUI_WIDGET_FONT(RTGUI_WIDGET(button)) = font;
|
||||
/* 设置button的位置 */
|
||||
rtgui_widget_set_rect(RTGUI_WIDGET(button), &rect);
|
||||
/* view是一个container控件,调用add_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;
|
||||
/* 创建一个button控件 */
|
||||
button = rtgui_button_create("16 font");
|
||||
/* 设置字体为16点阵的asc字体 */
|
||||
font = rtgui_font_refer("asc", 16);
|
||||
RTGUI_WIDGET_FONT(RTGUI_WIDGET(button)) = font;
|
||||
/* 设置button的位置 */
|
||||
rtgui_widget_set_rect(RTGUI_WIDGET(button), &rect);
|
||||
/* view是一个container控件,调用add_child方法添加这个button控件 */
|
||||
rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(button));
|
||||
|
||||
return view;
|
||||
}
|
||||
/*
|
||||
* 程序清单:button控件演示
|
||||
*
|
||||
* 这个例子会在创建出的container上添加几个不同类型的button控件
|
||||
*/
|
||||
|
||||
#include "demo_view.h"
|
||||
#include <rtgui/widgets/button.h>
|
||||
|
||||
/* 创建用于演示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;
|
||||
/* 创建一个button控件 */
|
||||
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;
|
||||
/* 创建一个button控件 */
|
||||
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;
|
||||
/* 创建一个button控件 */
|
||||
button = rtgui_button_create("12 font");
|
||||
/* 设置字体为12点阵的asc字体 */
|
||||
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;
|
||||
/* 创建一个button控件 */
|
||||
button = rtgui_button_create("16 font");
|
||||
/* 设置字体为16点阵的asc字体 */
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -1,84 +1,80 @@
|
||||
/*
|
||||
* 程序清单:checkbox控件演示
|
||||
*
|
||||
* 这个例子会在创建出的view上添加几个checkbox控件
|
||||
*/
|
||||
|
||||
#include "demo_view.h"
|
||||
#include <rtgui/widgets/checkbox.h>
|
||||
|
||||
/* 创建用于演示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;
|
||||
/* 创建一个checkbox控件 */
|
||||
checkbox = rtgui_checkbox_create("Red",RT_TRUE);
|
||||
/* 设置前景色为红色 */
|
||||
RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(checkbox)) = red;
|
||||
/* 设置checkbox的位置 */
|
||||
rtgui_widget_set_rect(RTGUI_WIDGET(checkbox), &rect);
|
||||
/* view是一个container控件,调用add_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;
|
||||
/* 创建一个checkbox控件 */
|
||||
checkbox = rtgui_checkbox_create("Blue",RT_TRUE);
|
||||
/* 设置前景色为蓝色 */
|
||||
RTGUI_WIDGET_FOREGROUND(RTGUI_WIDGET(checkbox)) = blue;
|
||||
/* 设置checkbox的位置 */
|
||||
rtgui_widget_set_rect(RTGUI_WIDGET(checkbox), &rect);
|
||||
/* view是一个container控件,调用add_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;
|
||||
/* 创建一个checkbox控件 */
|
||||
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是一个container控件,调用add_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;
|
||||
/* 创建一个checkbox控件 */
|
||||
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是一个container控件,调用add_child方法添加这个checkbox控件 */
|
||||
rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(checkbox));
|
||||
|
||||
return view;
|
||||
}
|
||||
/*
|
||||
* 程序清单:checkbox控件演示
|
||||
*
|
||||
* 这个例子会在创建出的container上添加几个checkbox控件
|
||||
*/
|
||||
|
||||
#include "demo_view.h"
|
||||
#include <rtgui/widgets/checkbox.h>
|
||||
|
||||
/* 创建用于演示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;
|
||||
/* 创建一个checkbox控件 */
|
||||
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;
|
||||
/* 创建一个checkbox控件 */
|
||||
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;
|
||||
/* 创建一个checkbox控件 */
|
||||
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;
|
||||
/* 创建一个checkbox控件 */
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -1,40 +1,40 @@
|
||||
/*
|
||||
* 程序清单:label控件演示
|
||||
*
|
||||
* 这个例子会在创建出的view上添加几个不同类型的label控件
|
||||
*/
|
||||
#include "demo_view.h"
|
||||
#include <rtgui/widgets/combobox.h>
|
||||
|
||||
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;
|
||||
/* 创建一个label控件 */
|
||||
box = rtgui_combobox_create(items, sizeof(items)/sizeof(items[0]), &rect);
|
||||
/* view是一个container控件,调用add_child方法添加这个box控件 */
|
||||
rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(box));
|
||||
|
||||
return view;
|
||||
}
|
||||
/*
|
||||
* 程序清单:label控件演示
|
||||
*
|
||||
* 这个例子会在创建出的container上添加几个不同类型的label控件
|
||||
*/
|
||||
#include "demo_view.h"
|
||||
#include <rtgui/widgets/combobox.h>
|
||||
|
||||
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;
|
||||
/* 创建一个label控件 */
|
||||
box = rtgui_combobox_create(items, sizeof(items)/sizeof(items[0]), &rect);
|
||||
/* container是一个container控件,调用add_child方法添加这个box控件 */
|
||||
rtgui_container_add_child(container, RTGUI_WIDGET(box));
|
||||
|
||||
return container;
|
||||
}
|
||||
|
||||
+192
-190
@@ -1,190 +1,192 @@
|
||||
/*
|
||||
* 程序清单:DC操作演示
|
||||
*
|
||||
* 这个例子会在创建出的view上进行DC操作的演示
|
||||
*/
|
||||
|
||||
#include "demo_view.h"
|
||||
#include <rtgui/dc.h>
|
||||
#include <rtgui/rtgui_system.h>
|
||||
#include <rtgui/widgets/label.h>
|
||||
#include <rtgui/widgets/slider.h>
|
||||
#include <rtgui/image_hdc.h>
|
||||
|
||||
#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 <rtgui/dc.h>
|
||||
#include <rtgui/rtgui_system.h>
|
||||
#include <rtgui/widgets/label.h>
|
||||
#include <rtgui/widgets/slider.h>
|
||||
#include <rtgui/image_hdc.h>
|
||||
|
||||
#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;
|
||||
}
|
||||
|
||||
@@ -1,83 +1,84 @@
|
||||
/*
|
||||
* 程序清单:DC Buffer演示
|
||||
*
|
||||
* 这个例子会在创建出的view上进行DC Buffer的演示
|
||||
*/
|
||||
|
||||
#include "demo_view.h"
|
||||
#include <rtgui/rtgui_system.h>
|
||||
#include <rtgui/widgets/label.h>
|
||||
#include <rtgui/widgets/slider.h>
|
||||
#include <rtgui/image.h>
|
||||
|
||||
// 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 <rtgui/rtgui_system.h>
|
||||
#include <rtgui/widgets/label.h>
|
||||
#include <rtgui/widgets/slider.h>
|
||||
#include <rtgui/image.h>
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
+126
-131
@@ -1,131 +1,126 @@
|
||||
/*
|
||||
* 程序清单:DC上显示图像演示
|
||||
*
|
||||
* 这个例子会在创建出的view上显示图像
|
||||
*/
|
||||
|
||||
#include "demo_view.h"
|
||||
#include <rtgui/widgets/button.h>
|
||||
#include <rtgui/widgets/filelist_view.h>
|
||||
#include <string.h>
|
||||
|
||||
#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 <rtgui/widgets/button.h>
|
||||
#include <rtgui/widgets/filelist_view.h>
|
||||
#include <string.h>
|
||||
|
||||
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
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* 程序清单:DC操作演示
|
||||
*
|
||||
* 这个例子会在创建出的view上进行DC操作的演示
|
||||
* 这个例子会在创建出的container上进行DC操作的演示
|
||||
*/
|
||||
|
||||
#include "demo_view.h"
|
||||
@@ -13,10 +13,11 @@
|
||||
#include <math.h>
|
||||
|
||||
/*
|
||||
* 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;
|
||||
}
|
||||
|
||||
+104
-104
@@ -1,104 +1,104 @@
|
||||
/*
|
||||
* 程序清单:label控件演示
|
||||
*
|
||||
* 这个例子会在创建出的view上添加几个不同类型的label控件
|
||||
*/
|
||||
#include "demo_view.h"
|
||||
#include <rtgui/widgets/label.h>
|
||||
|
||||
/* 创建用于演示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;
|
||||
/* 创建一个label控件 */
|
||||
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是一个container控件,调用add_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;
|
||||
/* 创建一个label控件 */
|
||||
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是一个container控件,调用add_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;
|
||||
/* 创建一个label控件 */
|
||||
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是一个container控件,调用add_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;
|
||||
/* 创建一个label控件 */
|
||||
label = rtgui_label_create("12 font");
|
||||
/* 设置字体为12点阵的asc字体 */
|
||||
font = rtgui_font_refer("asc", 12);
|
||||
RTGUI_WIDGET_FONT(RTGUI_WIDGET(label)) = font;
|
||||
/* 设置label的位置 */
|
||||
rtgui_widget_set_rect(RTGUI_WIDGET(label), &rect);
|
||||
/* view是一个container控件,调用add_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;
|
||||
/* 创建一个label控件 */
|
||||
label = rtgui_label_create("16 font");
|
||||
/* 设置字体为16点阵的asc字体 */
|
||||
font = rtgui_font_refer("asc", 16);
|
||||
RTGUI_WIDGET_FONT(RTGUI_WIDGET(label)) = font;
|
||||
/* 设置label的位置 */
|
||||
rtgui_widget_set_rect(RTGUI_WIDGET(label), &rect);
|
||||
/* view是一个container控件,调用add_child方法添加这个label控件 */
|
||||
rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(label));
|
||||
|
||||
return view;
|
||||
}
|
||||
|
||||
/*
|
||||
* 程序清单:label控件演示
|
||||
*
|
||||
* 这个例子会在创建出的container上添加几个不同类型的label控件
|
||||
*/
|
||||
#include "demo_view.h"
|
||||
#include <rtgui/widgets/label.h>
|
||||
|
||||
/* 创建用于演示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;
|
||||
/* 创建一个label控件 */
|
||||
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是一个container控件,调用add_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;
|
||||
/* 创建一个label控件 */
|
||||
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是一个container控件,调用add_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;
|
||||
/* 创建一个label控件 */
|
||||
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是一个container控件,调用add_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;
|
||||
/* 创建一个label控件 */
|
||||
label = rtgui_label_create("12 font");
|
||||
/* 设置字体为12点阵的asc字体 */
|
||||
font = rtgui_font_refer("asc", 12);
|
||||
RTGUI_WIDGET_FONT(RTGUI_WIDGET(label)) = font;
|
||||
/* 设置label的位置 */
|
||||
rtgui_widget_set_rect(RTGUI_WIDGET(label), &rect);
|
||||
/* container是一个container控件,调用add_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;
|
||||
/* 创建一个label控件 */
|
||||
label = rtgui_label_create("16 font");
|
||||
/* 设置字体为16点阵的asc字体 */
|
||||
font = rtgui_font_refer("asc", 16);
|
||||
RTGUI_WIDGET_FONT(RTGUI_WIDGET(label)) = font;
|
||||
/* 设置label的位置 */
|
||||
rtgui_widget_set_rect(RTGUI_WIDGET(label), &rect);
|
||||
/* container是一个container控件,调用add_child方法添加这个label控件 */
|
||||
rtgui_container_add_child(container, RTGUI_WIDGET(label));
|
||||
|
||||
return container;
|
||||
}
|
||||
|
||||
|
||||
+191
-191
@@ -1,191 +1,191 @@
|
||||
/*
|
||||
* 程序清单:label控件演示
|
||||
*
|
||||
* 这个例子会在创建出的view上添加几个不同类型的label控件
|
||||
*/
|
||||
#include "demo_view.h"
|
||||
#include <rtgui/widgets/label.h>
|
||||
#include <rtgui/widgets/listbox.h>
|
||||
|
||||
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;
|
||||
/* 创建一个label控件 */
|
||||
label = rtgui_label_create("listbox: ");
|
||||
/* 设置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_listbox_create(items, sizeof(items)/sizeof(struct rtgui_listbox_item), &rect);
|
||||
rtgui_listbox_set_onitem(box, on_items);
|
||||
/* view是一个container控件,调用add_child方法添加这个listbox控件 */
|
||||
rtgui_container_add_child(RTGUI_CONTAINER(view), RTGUI_WIDGET(box));
|
||||
|
||||
return view;
|
||||
}
|
||||
/*
|
||||
* 程序清单:label控件演示
|
||||
*
|
||||
* 这个例子会在创建出的container上添加几个不同类型的label控件
|
||||
*/
|
||||
#include "demo_view.h"
|
||||
#include <rtgui/widgets/label.h>
|
||||
#include <rtgui/widgets/listbox.h>
|
||||
|
||||
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;
|
||||
/* 创建一个label控件 */
|
||||
label = rtgui_label_create("listbox: ");
|
||||
/* 设置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_listbox_create(items, sizeof(items)/sizeof(struct rtgui_listbox_item), &rect);
|
||||
rtgui_listbox_set_onitem(box, on_items);
|
||||
/* container是一个container控件,调用add_child方法添加这个listbox控件 */
|
||||
rtgui_container_add_child(container, RTGUI_WIDGET(box));
|
||||
|
||||
return container;
|
||||
}
|
||||
|
||||
+255
-252
File diff suppressed because it is too large
Load Diff
@@ -1,70 +1,72 @@
|
||||
/*
|
||||
* 程序清单:menu控件演示
|
||||
*
|
||||
* 这个例子会在创建出的view上添加几个不同类型的label控件
|
||||
*/
|
||||
#include "demo_view.h"
|
||||
#include <rtgui/widgets/menu.h>
|
||||
#include <rtgui/widgets/button.h>
|
||||
|
||||
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;
|
||||
/* 创建一个button控件 */
|
||||
button = rtgui_button_create("Pop Menu");
|
||||
/* 设置button的位置 */
|
||||
rtgui_widget_set_rect(RTGUI_WIDGET(button), &rect);
|
||||
/* view是一个container控件,调用add_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;
|
||||
}
|
||||
/*
|
||||
* 程序清单:menu控件演示
|
||||
*
|
||||
* 这个例子会在创建出的container上添加几个不同类型的label控件
|
||||
*/
|
||||
#include "demo_view.h"
|
||||
#include <rtgui/widgets/menu.h>
|
||||
#include <rtgui/widgets/button.h>
|
||||
|
||||
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;
|
||||
/* 创建一个button控件 */
|
||||
button = rtgui_button_create("Pop Menu");
|
||||
/* 设置button的位置 */
|
||||
rtgui_widget_set_rect(RTGUI_WIDGET(button), &rect);
|
||||
/* container是一个container控件,调用add_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;
|
||||
}
|
||||
|
||||
@@ -1,77 +1,77 @@
|
||||
/*
|
||||
* 程序清单:DC上显示图像演示
|
||||
*
|
||||
* 这个例子会在创建出的view上显示图像
|
||||
*/
|
||||
|
||||
#include "demo_view.h"
|
||||
#include <rtgui/widgets/button.h>
|
||||
#include <rtgui/widgets/filelist_view.h>
|
||||
#include <string.h>
|
||||
|
||||
#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 <rtgui/widgets/button.h>
|
||||
#include <rtgui/widgets/filelist_view.h>
|
||||
#include <string.h>
|
||||
|
||||
#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
|
||||
|
||||
|
||||
@@ -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是一个container控件,调用add_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是一个container控件,调用add_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是一个container控件,调用add_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是一个container控件,调用add_child方法添加这个自控件 */
|
||||
rtgui_container_add_child(container, RTGUI_WIDGET(mywidget));
|
||||
|
||||
return container;
|
||||
}
|
||||
|
||||
@@ -1,53 +1,53 @@
|
||||
/*
|
||||
* 程序清单:notebook控件演示
|
||||
*
|
||||
* 这个例子会在创建出的view上演示notebook控件
|
||||
*/
|
||||
|
||||
#include "demo_view.h"
|
||||
#include <rtgui/widgets/notebook.h>
|
||||
#include <rtgui/widgets/listbox.h>
|
||||
|
||||
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是一个container控件,调用add_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;
|
||||
}
|
||||
/*
|
||||
* 程序清单:notebook控件演示
|
||||
*
|
||||
* 这个例子会在创建出的container上演示notebook控件
|
||||
*/
|
||||
|
||||
#include "demo_view.h"
|
||||
#include <rtgui/widgets/notebook.h>
|
||||
#include <rtgui/widgets/listbox.h>
|
||||
|
||||
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是一个container控件,调用add_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;
|
||||
}
|
||||
|
||||
@@ -1,59 +1,76 @@
|
||||
#include "demo_view.h"
|
||||
#include <rtgui/rtgui_system.h>
|
||||
#include <rtgui/widgets/label.h>
|
||||
#include <rtgui/widgets/progressbar.h>
|
||||
|
||||
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 <rtgui/rtgui_system.h>
|
||||
#include <rtgui/widgets/label.h>
|
||||
#include <rtgui/widgets/progressbar.h>
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,69 +1,69 @@
|
||||
/*
|
||||
* 程序清单:radiobox控件演示
|
||||
*
|
||||
* 这个例子会在创建出的view上添加两个不同方向的radiobox控件
|
||||
*/
|
||||
|
||||
#include "demo_view.h"
|
||||
#include <rtgui/widgets/radiobox.h>
|
||||
|
||||
/* 用于显示垂直方向的radio文本项数组 */
|
||||
static char* radio_item_v[5] =
|
||||
{
|
||||
"one",
|
||||
"two",
|
||||
"three",
|
||||
"item 1",
|
||||
"item 2"
|
||||
};
|
||||
|
||||
/* 用于显示水平方向的radio文本项数组 */
|
||||
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控件,文本项是radio_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控件,文本项是radio_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;
|
||||
}
|
||||
/*
|
||||
* 程序清单:radiobox控件演示
|
||||
*
|
||||
* 这个例子会在创建出的container上添加两个不同方向的radiobox控件
|
||||
*/
|
||||
|
||||
#include "demo_view.h"
|
||||
#include <rtgui/widgets/radiobox.h>
|
||||
|
||||
/* 用于显示垂直方向的radio文本项数组 */
|
||||
static char* radio_item_v[5] =
|
||||
{
|
||||
"one",
|
||||
"two",
|
||||
"three",
|
||||
"item 1",
|
||||
"item 2"
|
||||
};
|
||||
|
||||
/* 用于显示水平方向的radio文本项数组 */
|
||||
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控件,文本项是radio_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控件,文本项是radio_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;
|
||||
}
|
||||
|
||||
@@ -1,43 +1,43 @@
|
||||
#include "demo_view.h"
|
||||
#include <rtgui/rtgui_system.h>
|
||||
#include <rtgui/widgets/label.h>
|
||||
#include <rtgui/widgets/scrollbar.h>
|
||||
|
||||
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 <rtgui/rtgui_system.h>
|
||||
#include <rtgui/widgets/label.h>
|
||||
#include <rtgui/widgets/scrollbar.h>
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -1,42 +1,42 @@
|
||||
#include "demo_view.h"
|
||||
#include <rtgui/rtgui_system.h>
|
||||
#include <rtgui/widgets/label.h>
|
||||
#include <rtgui/widgets/slider.h>
|
||||
|
||||
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 <rtgui/rtgui_system.h>
|
||||
#include <rtgui/widgets/label.h>
|
||||
#include <rtgui/widgets/slider.h>
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
+102
-103
@@ -1,103 +1,102 @@
|
||||
/*
|
||||
* 程序清单:texbox控件演示
|
||||
*
|
||||
* 这个例子会在创建出的view上添加几个不同类型的textbox控件
|
||||
*/
|
||||
#include "demo_view.h"
|
||||
#include <rtgui/widgets/label.h>
|
||||
#include <rtgui/widgets/textbox.h>
|
||||
|
||||
/* 创建用于演示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 <rtgui/widgets/label.h>
|
||||
#include <rtgui/widgets/textbox.h>
|
||||
|
||||
/* 创建用于演示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;
|
||||
}
|
||||
|
||||
@@ -1,96 +1,98 @@
|
||||
/*
|
||||
* 程序清单:TTF字体显示演示
|
||||
*
|
||||
* 这个例子会在创建出的view上进行TTF字体显示的演示
|
||||
*/
|
||||
|
||||
#include "demo_view.h"
|
||||
#include <rtgui/dc.h>
|
||||
#include <rtgui/font.h>
|
||||
#include <rtgui/rtgui_system.h>
|
||||
|
||||
#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 <rtgui/dc.h>
|
||||
#include <rtgui/font.h>
|
||||
#include <rtgui/rtgui_system.h>
|
||||
|
||||
#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
|
||||
|
||||
+296
-280
File diff suppressed because it is too large
Load Diff
@@ -1,139 +0,0 @@
|
||||
#include <rtgui/rtgui.h>
|
||||
#include <rtgui/rtgui_system.h>
|
||||
|
||||
#include <rtgui/widgets/view.h>
|
||||
#include <rtgui/widgets/workbench.h>
|
||||
|
||||
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 <finsh.h>
|
||||
void workbench()
|
||||
{
|
||||
workbench_init();
|
||||
}
|
||||
/* finsh的命令输出,可以直接执行workbench()函数以执行上面的函数 */
|
||||
FINSH_FUNCTION_EXPORT(workbench, workbench demo)
|
||||
#endif
|
||||
+26
-26
@@ -1,26 +1,26 @@
|
||||
#include <rtthread.h>
|
||||
|
||||
#include <rtgui/rtgui_xml.h>
|
||||
|
||||
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[] = "<?xml version=\"1.0\"?><note><to>Tove</to><from>Jani</from><heading>Reminder</heading><body>Don't forget me this weekend!</body></note>";
|
||||
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.h>
|
||||
FINSH_FUNCTION_EXPORT(demo_xml, show the demo of xml parser);
|
||||
#endif
|
||||
#include <rtthread.h>
|
||||
|
||||
#include <rtgui/rtgui_xml.h>
|
||||
|
||||
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[] = "<?xml version=\"1.0\"?><note><to>Tove</to><from>Jani</from><heading>Reminder</heading><body>Don't forget me this weekend!</body></note>";
|
||||
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.h>
|
||||
FINSH_FUNCTION_EXPORT(demo_xml, show the demo of xml parser);
|
||||
#endif
|
||||
|
||||
+19
-19
@@ -1,19 +1,19 @@
|
||||
#include <rtgui/rtgui.h>
|
||||
#include <rtgui/rtgui_server.h>
|
||||
#include <rtgui/rtgui_system.h>
|
||||
|
||||
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 <rtgui/rtgui.h>
|
||||
#include <rtgui/rtgui_server.h>
|
||||
#include <rtgui/rtgui_system.h>
|
||||
|
||||
extern void workbench_init(void);
|
||||
extern void panel_init(void);
|
||||
|
||||
/* GUI相关演示入口,需放在线程中进行初始化 */
|
||||
void rtgui_startup()
|
||||
{
|
||||
/* GUI系统初始化 */
|
||||
rtgui_system_server_init();
|
||||
|
||||
/* 各个面板初始化 */
|
||||
panel_init();
|
||||
|
||||
/* 启动workbench */
|
||||
workbench_init();
|
||||
}
|
||||
|
||||
+136
-136
@@ -1,136 +1,136 @@
|
||||
#include <rtgui/dc.h>
|
||||
#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;
|
||||
|
||||
/* 让rtgui_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 <rtgui/dc.h>
|
||||
#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;
|
||||
|
||||
/* 让rtgui_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));
|
||||
}
|
||||
|
||||
+46
-46
@@ -1,50 +1,50 @@
|
||||
/*
|
||||
* 程�清�:自定义控件
|
||||
*
|
||||
* 这个例å�是è¦�实现一个自定义控件,外观大致如
|
||||
* |
|
||||
* --o--
|
||||
* |
|
||||
/*
|
||||
* 程�清�:自定义控件
|
||||
*
|
||||
* 这个例å�是è¦�实现一个自定义控件,外观大致如
|
||||
* |
|
||||
* --o--
|
||||
* |
|
||||
* 的形状,ä¸é—´çš„o色彩表示了当å‰�的状æ€�,ON状æ€�时是绿色,OFF状æ€�时是红色ã€?
|
||||
* 并且,这个oä½�置接å�—é¼ æ ‡ç‚¹å‡»ï¼Œç‚¹å‡»ä¸‹åˆ‡æ�¢ä¸‹ç›¸åº”的状æ€�ã€?
|
||||
*/
|
||||
#ifndef __MY_WIDGET_H__
|
||||
#define __MY_WIDGET_H__
|
||||
|
||||
#include <rtgui/rtgui.h>
|
||||
#include <rtgui/widgets/widget.h>
|
||||
|
||||
/* 自定义控件的状�值定�*/
|
||||
#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�OFF */
|
||||
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 <rtgui/rtgui.h>
|
||||
#include <rtgui/widgets/widget.h>
|
||||
|
||||
/* 自定义控件的状�值定�*/
|
||||
#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�OFF */
|
||||
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
|
||||
|
||||
+107
-107
@@ -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,
|
||||
};
|
||||
|
||||
+107
-107
@@ -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,
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user