add realtouch ui code to bsp/simulator
git-svn-id: https://rt-thread.googlecode.com/svn/trunk@2442 bbd45198-f89e-11dd-88c7-29a3b14d5316
This commit is contained in:
parent
12e47d0497
commit
c1f7aa1ca7
|
@ -0,0 +1,8 @@
|
||||||
|
Import('RTT_ROOT')
|
||||||
|
from building import *
|
||||||
|
|
||||||
|
src = Glob('*.c')
|
||||||
|
|
||||||
|
group = DefineGroup('ui', src, depend = [''])
|
||||||
|
|
||||||
|
Return('group')
|
|
@ -0,0 +1,31 @@
|
||||||
|
#include <rtthread.h>
|
||||||
|
|
||||||
|
#include "appmgr.h"
|
||||||
|
#include "statusbar.h"
|
||||||
|
|
||||||
|
int rt_application_init()
|
||||||
|
{
|
||||||
|
rt_device_t device;
|
||||||
|
struct rt_device_rect_info info;
|
||||||
|
|
||||||
|
device = rt_device_find("sdl");
|
||||||
|
if (device != RT_NULL)
|
||||||
|
{
|
||||||
|
info.width = 800;
|
||||||
|
info.height = 480;
|
||||||
|
|
||||||
|
/* set graphic resolution */
|
||||||
|
rt_device_control(device, RTGRAPHIC_CTRL_SET_MODE, &info);
|
||||||
|
}
|
||||||
|
/* re-set graphic device */
|
||||||
|
rtgui_graphic_set_device(device);
|
||||||
|
/* re-init mouse */
|
||||||
|
rtgui_mouse_init();
|
||||||
|
|
||||||
|
app_mgr_init();
|
||||||
|
rt_thread_delay(10);
|
||||||
|
app_init();
|
||||||
|
picture_app_create();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -0,0 +1,133 @@
|
||||||
|
#include "appmgr.h"
|
||||||
|
#include <rtgui/widgets/panel.h>
|
||||||
|
#include <rtgui/widgets/notebook.h>
|
||||||
|
#include <rtgui/widgets/listbox.h>
|
||||||
|
|
||||||
|
#include "apps_list.h"
|
||||||
|
#include "block_panel.h"
|
||||||
|
#include "statusbar.h"
|
||||||
|
|
||||||
|
#include "xpm/home.xpm"
|
||||||
|
#include "xpm/home_gray.xpm"
|
||||||
|
|
||||||
|
rt_bool_t event_handler(struct rtgui_object* object, rtgui_event_t* event)
|
||||||
|
{
|
||||||
|
rt_bool_t result;
|
||||||
|
|
||||||
|
RT_ASSERT(object != RT_NULL);
|
||||||
|
RT_ASSERT(event != RT_NULL);
|
||||||
|
|
||||||
|
result = RT_TRUE;
|
||||||
|
switch (event->type)
|
||||||
|
{
|
||||||
|
case RTGUI_EVENT_APP_CREATE:
|
||||||
|
case RTGUI_EVENT_APP_DESTROY:
|
||||||
|
return apps_list_event_handler(object, event);
|
||||||
|
|
||||||
|
default:
|
||||||
|
/* invoke parent event handler */
|
||||||
|
result = rtgui_app_event_handler(object, event);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
void app_mgr_win_init(void)
|
||||||
|
{
|
||||||
|
struct rtgui_win* win;
|
||||||
|
rtgui_rect_t rect;
|
||||||
|
struct rtgui_notebook *notebook;
|
||||||
|
struct rtgui_image* pressed_image;
|
||||||
|
struct rtgui_image* unpressed_image;
|
||||||
|
int font_size;
|
||||||
|
struct block_panel* block;
|
||||||
|
int angle_y;
|
||||||
|
|
||||||
|
/* create main window of Application Manager */
|
||||||
|
win = rtgui_mainwin_create(RT_NULL, "AppMgr", RTGUI_WIN_STYLE_MAINWIN);
|
||||||
|
RTGUI_WIDGET_BACKGROUND(win) = RTGUI_RGB(241, 241, 241);
|
||||||
|
|
||||||
|
/* create icon image */
|
||||||
|
pressed_image = rtgui_image_create_from_mem("xpm", (const rt_uint8_t*)home_xpm, sizeof(home_xpm), RT_FALSE);
|
||||||
|
unpressed_image = rtgui_image_create_from_mem("xpm", (const rt_uint8_t*)home_gray_xpm, sizeof(home_gray_xpm), RT_FALSE);
|
||||||
|
rtgui_font_get_metrics(RTGUI_WIDGET_FONT(win), "AppMgr", &rect);
|
||||||
|
font_size = rtgui_rect_height(rect);
|
||||||
|
|
||||||
|
/* create notebook */
|
||||||
|
rtgui_widget_get_extent(RTGUI_WIDGET(win), &rect);
|
||||||
|
notebook = rtgui_notebook_create(&rect, RTGUI_NOTEBOOK_LEFT);
|
||||||
|
RTGUI_WIDGET_BACKGROUND(notebook) = RTGUI_RGB(241, 241, 241);
|
||||||
|
rtgui_notebook_set_tab_height(notebook, pressed_image->h + font_size + 4 * RTGUI_WIDGET_DEFAULT_MARGIN);
|
||||||
|
rtgui_notebook_set_tab_width(notebook, 80);
|
||||||
|
angle_y = rect.x1;
|
||||||
|
|
||||||
|
/* create navigation */
|
||||||
|
block = block_panel_create(angle_y + notebook->tab_h/2, &rect);
|
||||||
|
RTGUI_WIDGET_BACKGROUND(block) = RTGUI_RGB(241, 241, 241);
|
||||||
|
#ifdef _WIN32
|
||||||
|
rtgui_notebook_add_image(notebook, "Programs", RTGUI_WIDGET(block),
|
||||||
|
pressed_image, unpressed_image);
|
||||||
|
#endif
|
||||||
|
#ifndef _WIN32
|
||||||
|
program_create(RTGUI_PANEL(block));
|
||||||
|
#endif
|
||||||
|
angle_y += notebook->tab_h;
|
||||||
|
|
||||||
|
rtgui_notebook_get_client_rect(notebook, &rect);
|
||||||
|
block = block_panel_create(angle_y + notebook->tab_h/2, &rect);
|
||||||
|
RTGUI_WIDGET_BACKGROUND(block) = RTGUI_RGB(241, 241, 241);
|
||||||
|
#ifdef _WIN32
|
||||||
|
rtgui_notebook_add_image(notebook, "Task", RTGUI_WIDGET(block),
|
||||||
|
pressed_image, unpressed_image);
|
||||||
|
#endif
|
||||||
|
apps_list_create(RTGUI_PANEL(block));
|
||||||
|
angle_y += notebook->tab_h;
|
||||||
|
|
||||||
|
block = block_panel_create(angle_y + notebook->tab_h/2, &rect);
|
||||||
|
RTGUI_WIDGET_BACKGROUND(block) = RTGUI_RGB(241, 241, 241);
|
||||||
|
#ifdef _WIN32
|
||||||
|
rtgui_notebook_add_image(notebook, "Setting", RTGUI_WIDGET(block),
|
||||||
|
pressed_image, unpressed_image);
|
||||||
|
#endif
|
||||||
|
angle_y += notebook->tab_h;
|
||||||
|
|
||||||
|
rtgui_container_add_child(RTGUI_CONTAINER(win), RTGUI_WIDGET(notebook));
|
||||||
|
|
||||||
|
rtgui_win_show(win, RT_FALSE);
|
||||||
|
|
||||||
|
/* set as main window */
|
||||||
|
rtgui_app_set_main_win(win);
|
||||||
|
}
|
||||||
|
|
||||||
|
void app_mgr_entry(void* parameter)
|
||||||
|
{
|
||||||
|
struct rtgui_app* application;
|
||||||
|
|
||||||
|
application = rtgui_app_create(rt_thread_self(), "AppMgr");
|
||||||
|
if (application != RT_NULL)
|
||||||
|
{
|
||||||
|
/* set as window manager */
|
||||||
|
rtgui_app_set_as_wm();
|
||||||
|
|
||||||
|
/* initialize status bar */
|
||||||
|
statusbar_init();
|
||||||
|
app_mgr_win_init();
|
||||||
|
|
||||||
|
/* set our event handler */
|
||||||
|
rtgui_object_set_event_handler(RTGUI_OBJECT(application),
|
||||||
|
event_handler);
|
||||||
|
rtgui_app_run(application);
|
||||||
|
rtgui_app_destroy(application);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void app_mgr_init(void)
|
||||||
|
{
|
||||||
|
rt_thread_t tid;
|
||||||
|
|
||||||
|
tid = rt_thread_create("app_mgr", app_mgr_entry, RT_NULL, 4096, 20, 20);
|
||||||
|
if (tid != RT_NULL)
|
||||||
|
rt_thread_startup(tid);
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
#ifndef __APPMGR_H__
|
||||||
|
#define __APPMGR_H__
|
||||||
|
|
||||||
|
#include <rtgui/rtgui_app.h>
|
||||||
|
#include <rtgui/widgets/window.h>
|
||||||
|
#include <rtgui/widgets/label.h>
|
||||||
|
#include <rtgui/widgets/box.h>
|
||||||
|
#include <rtgui/widgets/panel.h>
|
||||||
|
|
||||||
|
void app_mgr_win_init(void);
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,268 @@
|
||||||
|
#include "apps_list.h"
|
||||||
|
#include <rtgui/rtgui_app.h>
|
||||||
|
#include <rtgui/widgets/listctrl.h>
|
||||||
|
|
||||||
|
#include "xpm/exec.xpm"
|
||||||
|
#include "xpm/close.xpm"
|
||||||
|
|
||||||
|
/* application manager */
|
||||||
|
struct rtgui_application_item
|
||||||
|
{
|
||||||
|
struct rtgui_app* app;
|
||||||
|
};
|
||||||
|
static struct rtgui_application_item *app_items = RT_NULL;
|
||||||
|
static rt_uint16_t app_count = 0;
|
||||||
|
static struct rtgui_listctrl* app_list;
|
||||||
|
static struct rtgui_image* app_default_icon = RT_NULL;
|
||||||
|
static struct rtgui_image* app_close = RT_NULL;
|
||||||
|
|
||||||
|
static void _handle_app_create(struct rtgui_event_application* event)
|
||||||
|
{
|
||||||
|
rt_uint32_t index;
|
||||||
|
rt_int32_t status;
|
||||||
|
struct rtgui_app* app;
|
||||||
|
|
||||||
|
status = RTGUI_STATUS_OK;
|
||||||
|
for (index = 0; index < app_count; index ++)
|
||||||
|
{
|
||||||
|
app = (struct rtgui_app*)app_items[index].app;
|
||||||
|
if (app == event->app)
|
||||||
|
{
|
||||||
|
/* application is created already */
|
||||||
|
status = RTGUI_STATUS_ERROR;
|
||||||
|
goto __exit;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
app_count += 1;
|
||||||
|
if (app_items == RT_NULL)
|
||||||
|
app_items = (struct rtgui_application_item*) rtgui_malloc(sizeof(struct rtgui_application_item));
|
||||||
|
else
|
||||||
|
app_items = (struct rtgui_application_item*) rtgui_realloc(app_items, sizeof(struct rtgui_application_item) * app_count);
|
||||||
|
|
||||||
|
if (app_items == RT_NULL)
|
||||||
|
{
|
||||||
|
status = RTGUI_STATUS_ERROR;
|
||||||
|
goto __exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
app = event->app;
|
||||||
|
|
||||||
|
app_items[app_count - 1].app = app;
|
||||||
|
rtgui_listctrl_set_items(app_list, (rt_uint32_t)app_items, app_count);
|
||||||
|
|
||||||
|
__exit:
|
||||||
|
/* send ack to the application */
|
||||||
|
rtgui_ack(RTGUI_EVENT(event), status);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void _handle_app_destroy(struct rtgui_event_application* event)
|
||||||
|
{
|
||||||
|
rt_uint32_t index;
|
||||||
|
struct rtgui_app* app;
|
||||||
|
|
||||||
|
for (index = 0; index < app_count; index ++)
|
||||||
|
{
|
||||||
|
app = (struct rtgui_app*)app_items[index].app;
|
||||||
|
if (app == event->app)
|
||||||
|
{
|
||||||
|
/* remove this application */
|
||||||
|
app_count --;
|
||||||
|
if (app_count == 0)
|
||||||
|
{
|
||||||
|
rtgui_free(app_items);
|
||||||
|
app_items = RT_NULL;
|
||||||
|
}
|
||||||
|
else if (index == app_count)
|
||||||
|
{
|
||||||
|
app_items = rtgui_realloc(app_items, app_count * sizeof(struct rtgui_application_item));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rt_uint32_t j;
|
||||||
|
for (j = index; j < app_count; j ++)
|
||||||
|
{
|
||||||
|
app_items[j] = app_items[j + 1];
|
||||||
|
}
|
||||||
|
app_items = rtgui_realloc(app_items, app_count * sizeof(struct rtgui_application_item));
|
||||||
|
}
|
||||||
|
rtgui_listctrl_set_items(app_list, (rt_uint32_t)app_items, app_count);
|
||||||
|
rtgui_ack(RTGUI_EVENT(event), RTGUI_STATUS_OK);
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* send ack to the application */
|
||||||
|
rtgui_ack(RTGUI_EVENT(event), RTGUI_STATUS_ERROR);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
static rt_bool_t _handle_app_activate(struct rtgui_object* object, struct rtgui_event* event)
|
||||||
|
{
|
||||||
|
struct rtgui_application_item *item;
|
||||||
|
|
||||||
|
if (app_list->current_item == -1) return RT_TRUE;
|
||||||
|
item = &app_items[app_list->current_item];
|
||||||
|
|
||||||
|
rtgui_app_activate(item->app);
|
||||||
|
|
||||||
|
return RT_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
rt_bool_t apps_list_event_handler(struct rtgui_object* object, struct rtgui_event* event)
|
||||||
|
{
|
||||||
|
RT_ASSERT(object != RT_NULL);
|
||||||
|
RT_ASSERT(event != RT_NULL);
|
||||||
|
|
||||||
|
switch (event->type)
|
||||||
|
{
|
||||||
|
case RTGUI_EVENT_APP_CREATE:
|
||||||
|
_handle_app_create((struct rtgui_event_application*) event);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case RTGUI_EVENT_APP_DESTROY:
|
||||||
|
_handle_app_destroy((struct rtgui_event_application*) event);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return RT_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static rt_bool_t apps_listctrl_event_handler(struct rtgui_object* object, struct rtgui_event* event)
|
||||||
|
{
|
||||||
|
struct rtgui_listctrl* ctrl;
|
||||||
|
|
||||||
|
ctrl = RTGUI_LISTCTRL(object);
|
||||||
|
if (event->type == RTGUI_EVENT_MOUSE_BUTTON)
|
||||||
|
{
|
||||||
|
struct rtgui_rect rect, close_rect;
|
||||||
|
struct rtgui_event_mouse* emouse;
|
||||||
|
|
||||||
|
emouse = (struct rtgui_event_mouse*)event;
|
||||||
|
if (emouse->button & RTGUI_MOUSE_BUTTON_UP)
|
||||||
|
{
|
||||||
|
/* get physical extent information */
|
||||||
|
rtgui_widget_get_extent(RTGUI_WIDGET(ctrl), &rect);
|
||||||
|
close_rect = rect;
|
||||||
|
close_rect.x1 = close_rect.x2 - 50;
|
||||||
|
|
||||||
|
if ((rtgui_rect_contains_point(&close_rect, emouse->x, emouse->y) == RT_EOK) &&
|
||||||
|
(ctrl->items_count > 0))
|
||||||
|
{
|
||||||
|
rt_uint16_t index;
|
||||||
|
index = (emouse->y - rect.y1) / (2 + ctrl->item_height);
|
||||||
|
|
||||||
|
if ((index < ctrl->page_items) &&
|
||||||
|
(ctrl->current_item/ctrl->page_items)* ctrl->page_items + index < ctrl->items_count)
|
||||||
|
{
|
||||||
|
rt_uint16_t cur_item;
|
||||||
|
|
||||||
|
/* get current item */
|
||||||
|
cur_item = (ctrl->current_item/ctrl->page_items) * ctrl->page_items + index;
|
||||||
|
if (cur_item == ctrl->current_item)
|
||||||
|
{
|
||||||
|
rt_kprintf("close app\n");
|
||||||
|
rtgui_app_close(app_items[ctrl->current_item].app);
|
||||||
|
return RT_TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return rtgui_listctrl_event_handler(object, event);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void _app_info_draw(struct rtgui_listctrl *list, struct rtgui_dc* dc, rtgui_rect_t* rect, rt_uint16_t index)
|
||||||
|
{
|
||||||
|
struct rtgui_image *image;
|
||||||
|
rtgui_rect_t item_rect, image_rect;
|
||||||
|
struct rtgui_application_item *item, *items;
|
||||||
|
|
||||||
|
item_rect = *rect;
|
||||||
|
item_rect.x1 += 5;
|
||||||
|
|
||||||
|
/* draw item */
|
||||||
|
items = (struct rtgui_application_item*)list->items;
|
||||||
|
item = &items[index];
|
||||||
|
|
||||||
|
/* draw image */
|
||||||
|
if (item->app->icon != RT_NULL) image = item->app->icon;
|
||||||
|
else image = app_default_icon;
|
||||||
|
|
||||||
|
if (image != RT_NULL)
|
||||||
|
{
|
||||||
|
image_rect.x1 = image_rect.y1 = 0;
|
||||||
|
image_rect.x2 = app_default_icon->w;
|
||||||
|
image_rect.y2 = app_default_icon->h;
|
||||||
|
|
||||||
|
rtgui_rect_moveto_align(&item_rect, &image_rect, RTGUI_ALIGN_CENTER_VERTICAL);
|
||||||
|
rtgui_image_blit(image, dc, &image_rect);
|
||||||
|
}
|
||||||
|
item_rect.x1 += app_default_icon->w + RTGUI_WIDGET_DEFAULT_MARGIN;
|
||||||
|
|
||||||
|
/* draw text */
|
||||||
|
rtgui_dc_draw_text(dc, (const char*)item->app->name, &item_rect); item_rect.x1 += 60;
|
||||||
|
|
||||||
|
if (list->current_item == index)
|
||||||
|
{
|
||||||
|
/* draw close button */
|
||||||
|
image_rect.x1 = image_rect.y1 = 0;
|
||||||
|
image_rect.x2 = app_close->w;
|
||||||
|
image_rect.y2 = app_close->h;
|
||||||
|
|
||||||
|
item_rect.x1 = item_rect.x2 - 50;
|
||||||
|
rtgui_rect_moveto_align(&item_rect, &image_rect, RTGUI_ALIGN_CENTER_VERTICAL);
|
||||||
|
rtgui_image_blit(app_close, dc, &image_rect);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
struct rtgui_panel* apps_list_create(struct rtgui_panel* panel)
|
||||||
|
{
|
||||||
|
struct rtgui_rect rect;
|
||||||
|
|
||||||
|
RT_ASSERT(panel != RT_NULL);
|
||||||
|
|
||||||
|
if (app_default_icon == RT_NULL)
|
||||||
|
{
|
||||||
|
app_default_icon = rtgui_image_create_from_mem("xpm", (const rt_uint8_t*)exec_xpm, sizeof(exec_xpm), RT_FALSE);
|
||||||
|
}
|
||||||
|
if (app_close == RT_NULL)
|
||||||
|
{
|
||||||
|
app_close = rtgui_image_create_from_mem("xpm", (const rt_uint8_t *)close_xpm, sizeof(close_xpm), RT_FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
rtgui_widget_get_extent(RTGUI_WIDGET(panel), &rect);
|
||||||
|
|
||||||
|
/* create application list */
|
||||||
|
rtgui_rect_inflate(&rect, -15);
|
||||||
|
|
||||||
|
app_list = rtgui_listctrl_create((rt_uint32_t)app_items, app_count, &rect, _app_info_draw);
|
||||||
|
rtgui_listctrl_set_itemheight(app_list, app_default_icon->h + 2);
|
||||||
|
rtgui_listctrl_set_onitem(app_list, _handle_app_activate);
|
||||||
|
rtgui_object_set_event_handler(RTGUI_OBJECT(app_list), apps_listctrl_event_handler);
|
||||||
|
|
||||||
|
rtgui_container_add_child(RTGUI_CONTAINER(panel), RTGUI_WIDGET(app_list));
|
||||||
|
|
||||||
|
return RTGUI_PANEL(panel);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef RT_USING_FINSH
|
||||||
|
#include <finsh.h>
|
||||||
|
void list_apps(void)
|
||||||
|
{
|
||||||
|
rt_uint32_t index;
|
||||||
|
struct rtgui_app* app;
|
||||||
|
|
||||||
|
rt_kprintf("GUI Applications:\n");
|
||||||
|
rt_kprintf("=================\n");
|
||||||
|
|
||||||
|
for (index = 0; index < app_count; index ++)
|
||||||
|
{
|
||||||
|
app = (struct rtgui_app*) app_items[index].app;
|
||||||
|
rt_kprintf("%s\n", app->name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FINSH_FUNCTION_EXPORT(list_apps,show the application list);
|
||||||
|
#endif
|
|
@ -0,0 +1,11 @@
|
||||||
|
#ifndef __APPS_LIST_H__
|
||||||
|
#define __APPS_LIST_H__
|
||||||
|
|
||||||
|
#include <rtgui/event.h>
|
||||||
|
#include <rtgui/rtgui_object.h>
|
||||||
|
#include <rtgui/widgets/panel.h>
|
||||||
|
|
||||||
|
rt_bool_t apps_list_event_handler(struct rtgui_object* object, struct rtgui_event* event);
|
||||||
|
struct rtgui_panel* apps_list_create(struct rtgui_panel* panel);
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,118 @@
|
||||||
|
#include <rtgui/dc.h>
|
||||||
|
#include "block_panel.h"
|
||||||
|
|
||||||
|
static void dc_render_block(struct rtgui_dc* dc, struct rtgui_rect *rect, int angle_y)
|
||||||
|
{
|
||||||
|
#define BLOCK_BORDER_SZ 5
|
||||||
|
#define BLOCK_ANGLE_SZ 10
|
||||||
|
int rect_y[12];
|
||||||
|
int rect_x[12];
|
||||||
|
int ri = 0;
|
||||||
|
rtgui_color_t line_color = RTGUI_RGB(215, 215, 215);
|
||||||
|
// rtgui_color_t external_color = RTGUI_RGB(241, 241, 241);
|
||||||
|
// rtgui_color_t angle_color = RTGUI_RGB(229, 229, 229);
|
||||||
|
rtgui_color_t fg, bg;
|
||||||
|
struct rtgui_gc *gc;
|
||||||
|
|
||||||
|
rect_x[ri] = rect->x1 + BLOCK_ANGLE_SZ + 3; rect_y[ri] = rect->y1 + BLOCK_BORDER_SZ; ri ++;
|
||||||
|
rect_x[ri] = rect->x2 - BLOCK_BORDER_SZ - 3; rect_y[ri] = rect->y1 + BLOCK_BORDER_SZ; ri ++;
|
||||||
|
rect_x[ri] = rect->x2 - BLOCK_BORDER_SZ; rect_y[ri] = rect->y1 + BLOCK_BORDER_SZ + 3; ri ++;
|
||||||
|
rect_x[ri] = rect->x2 - BLOCK_BORDER_SZ; rect_y[ri] = rect->y2 - BLOCK_BORDER_SZ - 3; ri ++;
|
||||||
|
rect_x[ri] = rect->x2 - BLOCK_BORDER_SZ - 3; rect_y[ri] = rect->y2 - BLOCK_BORDER_SZ; ri ++;
|
||||||
|
rect_x[ri] = rect->x1 + BLOCK_ANGLE_SZ + 3; rect_y[ri] = rect->y2 - BLOCK_BORDER_SZ; ri ++;
|
||||||
|
rect_x[ri] = rect->x1 + BLOCK_ANGLE_SZ ; rect_y[ri] = rect->y2 - BLOCK_BORDER_SZ - 3; ri ++;
|
||||||
|
|
||||||
|
/* angle */
|
||||||
|
rect_x[ri] = rect->x1 + BLOCK_ANGLE_SZ ; rect_y[ri] = angle_y + BLOCK_ANGLE_SZ; ri ++;
|
||||||
|
rect_x[ri] = rect->x1; rect_y[ri] = angle_y; ri ++;
|
||||||
|
rect_x[ri] = rect->x1 + BLOCK_ANGLE_SZ ; rect_y[ri] = angle_y - BLOCK_ANGLE_SZ; ri ++;
|
||||||
|
|
||||||
|
rect_x[ri] = rect->x1 + BLOCK_ANGLE_SZ ; rect_y[ri] = rect->y1 + BLOCK_BORDER_SZ + 3; ri ++;
|
||||||
|
rect_x[ri] = rect->x1 + BLOCK_ANGLE_SZ + 3; rect_y[ri] = rect->y1 + BLOCK_BORDER_SZ; ri ++;
|
||||||
|
|
||||||
|
gc = rtgui_dc_get_gc(dc);
|
||||||
|
fg = gc->foreground;
|
||||||
|
bg = gc->background;
|
||||||
|
gc->foreground = white;
|
||||||
|
rtgui_dc_fill_polygon(dc, rect_x, rect_y, 12);
|
||||||
|
gc->foreground = line_color;
|
||||||
|
rtgui_dc_draw_polygon(dc, rect_x, rect_y, 12);
|
||||||
|
gc->foreground = fg;
|
||||||
|
gc->background = bg;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void _block_panel_constructor(block_panel_t *panel)
|
||||||
|
{
|
||||||
|
/* init widget and set event handler */
|
||||||
|
rtgui_object_set_event_handler(RTGUI_OBJECT(panel), block_panel_event_handler);
|
||||||
|
|
||||||
|
/* set field */
|
||||||
|
panel->angle_y = 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
DEFINE_CLASS_TYPE(block_panel, "block_panel",
|
||||||
|
RTGUI_PANEL_TYPE,
|
||||||
|
_block_panel_constructor,
|
||||||
|
RT_NULL,
|
||||||
|
sizeof(struct block_panel));
|
||||||
|
|
||||||
|
struct block_panel *block_panel_create(int angle_y, struct rtgui_rect *rect)
|
||||||
|
{
|
||||||
|
struct block_panel* panel;
|
||||||
|
|
||||||
|
panel = (struct block_panel*) rtgui_widget_create(BLOCK_PANEL_TYPE);
|
||||||
|
if (panel != RT_NULL)
|
||||||
|
{
|
||||||
|
panel->angle_y = angle_y;
|
||||||
|
|
||||||
|
rtgui_widget_set_rect(RTGUI_WIDGET(panel), rect);
|
||||||
|
rtgui_object_set_event_handler(RTGUI_OBJECT(panel), block_panel_event_handler);
|
||||||
|
}
|
||||||
|
|
||||||
|
return panel;
|
||||||
|
}
|
||||||
|
|
||||||
|
void block_panel_destroy(block_panel_t* panel)
|
||||||
|
{
|
||||||
|
rtgui_object_destroy(RTGUI_OBJECT(panel));
|
||||||
|
}
|
||||||
|
|
||||||
|
rt_bool_t block_panel_event_handler(struct rtgui_object* object, struct rtgui_event* event)
|
||||||
|
{
|
||||||
|
struct block_panel *panel;
|
||||||
|
|
||||||
|
panel = BLOCK_PANEL(object);
|
||||||
|
if (event->type == RTGUI_EVENT_PAINT)
|
||||||
|
{
|
||||||
|
struct rtgui_dc* dc;
|
||||||
|
struct rtgui_rect rect;
|
||||||
|
|
||||||
|
rtgui_widget_get_rect(RTGUI_WIDGET(object), &rect);
|
||||||
|
dc = rtgui_dc_begin_drawing(RTGUI_WIDGET(object));
|
||||||
|
|
||||||
|
rtgui_dc_fill_rect(dc, &rect);
|
||||||
|
rtgui_rect_inflate(&rect, - 3);
|
||||||
|
dc_render_block(dc, &rect, panel->angle_y);
|
||||||
|
|
||||||
|
/* paint on each child */
|
||||||
|
rtgui_container_dispatch_event(RTGUI_CONTAINER(panel), event);
|
||||||
|
rtgui_dc_end_drawing(dc);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return rtgui_panel_event_handler(object, event);
|
||||||
|
}
|
||||||
|
|
||||||
|
return RT_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void block_panel_get_client_extent(struct block_panel *panel, struct rtgui_rect *rect)
|
||||||
|
{
|
||||||
|
RT_ASSERT(panel != RT_NULL);
|
||||||
|
RT_ASSERT(rect != RT_NULL);
|
||||||
|
|
||||||
|
rtgui_widget_get_extent(RTGUI_WIDGET(panel), rect);
|
||||||
|
rect->x1 += 20; rect->y1 += 10;
|
||||||
|
rect->x2 -= 10; rect->y2 -= 10;
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
#ifndef __BLOCK_PANEL_H__
|
||||||
|
#define __BLOCK_PANEL_H__
|
||||||
|
#include <rtgui/widgets/panel.h>
|
||||||
|
|
||||||
|
DECLARE_CLASS_TYPE(block_panel);
|
||||||
|
|
||||||
|
/** Gets the type of a block panel */
|
||||||
|
#define BLOCK_PANEL_TYPE (RTGUI_TYPE(block_panel))
|
||||||
|
/** Casts the object to an block panel */
|
||||||
|
#define BLOCK_PANEL(obj) (RTGUI_OBJECT_CAST((obj), BLOCK_PANEL_TYPE, block_panel_t))
|
||||||
|
/** Checks if the object is an block panel */
|
||||||
|
#define RTGUI_IS_BLOCK_PANEL(obj) (RTGUI_OBJECT_CHECK_TYPE((obj), BLOCK_PANEL_TYPE))
|
||||||
|
|
||||||
|
/*
|
||||||
|
* the block panel widget
|
||||||
|
*/
|
||||||
|
struct block_panel
|
||||||
|
{
|
||||||
|
struct rtgui_panel parent;
|
||||||
|
|
||||||
|
int angle_y;
|
||||||
|
};
|
||||||
|
typedef struct block_panel block_panel_t;
|
||||||
|
|
||||||
|
struct block_panel *block_panel_create(int angle_y, struct rtgui_rect *rect);
|
||||||
|
void block_panel_destroy(block_panel_t* panel);
|
||||||
|
|
||||||
|
rt_bool_t block_panel_event_handler(struct rtgui_object *object, struct rtgui_event* event);
|
||||||
|
void block_panel_get_client_extent(struct block_panel *panel, struct rtgui_rect *rect);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
@ -0,0 +1,322 @@
|
||||||
|
#include <rtgui/rtgui.h>
|
||||||
|
#include <rtgui/dc.h>
|
||||||
|
#include <rtgui/rtgui_system.h>
|
||||||
|
#include <rtgui/widgets/window.h>
|
||||||
|
#include <rtgui/rtgui_app.h>
|
||||||
|
|
||||||
|
#include "touch.h"
|
||||||
|
#include "setup.h"
|
||||||
|
|
||||||
|
#define CALIBRATION_STEP_LEFTTOP 0
|
||||||
|
#define CALIBRATION_STEP_RIGHTTOP 1
|
||||||
|
#define CALIBRATION_STEP_RIGHTBOTTOM 2
|
||||||
|
#define CALIBRATION_STEP_LEFTBOTTOM 3
|
||||||
|
#define CALIBRATION_STEP_CENTER 4
|
||||||
|
|
||||||
|
#define TOUCH_WIN_UPDATE 1
|
||||||
|
#define TOUCH_WIN_CLOSE 2
|
||||||
|
|
||||||
|
#define CALIBRATION_WIDTH 15
|
||||||
|
#define CALIBRATION_HEIGHT 15
|
||||||
|
|
||||||
|
struct calibration_session
|
||||||
|
{
|
||||||
|
rt_uint8_t step;
|
||||||
|
|
||||||
|
struct calibration_data data;
|
||||||
|
|
||||||
|
rt_uint16_t width; rt_uint16_t height;
|
||||||
|
|
||||||
|
rtgui_win_t* win;
|
||||||
|
|
||||||
|
rt_device_t device;
|
||||||
|
rt_thread_t tid;
|
||||||
|
};
|
||||||
|
static struct calibration_session* calibration_ptr = RT_NULL;
|
||||||
|
|
||||||
|
static void calibration_data_post(rt_uint16_t x, rt_uint16_t y)
|
||||||
|
{
|
||||||
|
rt_kprintf("calibration_data_post x %d y %d\n", x, y);
|
||||||
|
|
||||||
|
if (calibration_ptr != RT_NULL)
|
||||||
|
{
|
||||||
|
switch (calibration_ptr->step)
|
||||||
|
{
|
||||||
|
case CALIBRATION_STEP_LEFTTOP:
|
||||||
|
calibration_ptr->data.min_x = x;
|
||||||
|
calibration_ptr->data.min_y = y;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CALIBRATION_STEP_RIGHTTOP:
|
||||||
|
calibration_ptr->data.max_x = x;
|
||||||
|
calibration_ptr->data.min_y = (calibration_ptr->data.min_y + y)/2;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CALIBRATION_STEP_LEFTBOTTOM:
|
||||||
|
calibration_ptr->data.min_x = (calibration_ptr->data.min_x + x)/2;
|
||||||
|
calibration_ptr->data.max_y = y;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CALIBRATION_STEP_RIGHTBOTTOM:
|
||||||
|
calibration_ptr->data.max_x = (calibration_ptr->data.max_x + x)/2;
|
||||||
|
calibration_ptr->data.max_y = (calibration_ptr->data.max_y + y)/2;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CALIBRATION_STEP_CENTER:
|
||||||
|
/* calibration done */
|
||||||
|
{
|
||||||
|
rt_uint16_t w, h;
|
||||||
|
|
||||||
|
struct rtgui_event_command ecmd;
|
||||||
|
RTGUI_EVENT_COMMAND_INIT(&ecmd);
|
||||||
|
ecmd.wid = calibration_ptr->win;
|
||||||
|
ecmd.command_id = TOUCH_WIN_CLOSE;
|
||||||
|
|
||||||
|
/* calculate calibrated data */
|
||||||
|
if (calibration_ptr->data.max_x > calibration_ptr->data.min_x)
|
||||||
|
w = calibration_ptr->data.max_x - calibration_ptr->data.min_x;
|
||||||
|
else
|
||||||
|
w = calibration_ptr->data.min_x - calibration_ptr->data.max_x;
|
||||||
|
w = (w/(calibration_ptr->width - 2 * CALIBRATION_WIDTH)) * CALIBRATION_WIDTH;
|
||||||
|
|
||||||
|
if (calibration_ptr->data.max_y > calibration_ptr->data.min_y)
|
||||||
|
h = calibration_ptr->data.max_y - calibration_ptr->data.min_y;
|
||||||
|
else
|
||||||
|
h = calibration_ptr->data.min_y - calibration_ptr->data.max_y;
|
||||||
|
h = (h/(calibration_ptr->height - 2 * CALIBRATION_HEIGHT)) * CALIBRATION_HEIGHT;
|
||||||
|
|
||||||
|
rt_kprintf("w: %d, h: %d\n", w, h);
|
||||||
|
|
||||||
|
if (calibration_ptr->data.max_x > calibration_ptr->data.min_x)
|
||||||
|
{
|
||||||
|
calibration_ptr->data.min_x -= w;
|
||||||
|
calibration_ptr->data.max_x += w;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
calibration_ptr->data.min_x += w;
|
||||||
|
calibration_ptr->data.max_x -= w;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (calibration_ptr->data.max_y > calibration_ptr->data.min_y)
|
||||||
|
{
|
||||||
|
calibration_ptr->data.min_y -= h;
|
||||||
|
calibration_ptr->data.max_y += h;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
calibration_ptr->data.min_y += h;
|
||||||
|
calibration_ptr->data.max_y -= h;
|
||||||
|
}
|
||||||
|
|
||||||
|
rt_kprintf("calibration data: (%d, %d), (%d, %d)\n",
|
||||||
|
calibration_ptr->data.min_x,
|
||||||
|
calibration_ptr->data.max_x,
|
||||||
|
calibration_ptr->data.min_y,
|
||||||
|
calibration_ptr->data.max_y);
|
||||||
|
rtgui_send(calibration_ptr->tid, &ecmd.parent, sizeof(struct rtgui_event_command));
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
calibration_ptr->step ++;
|
||||||
|
|
||||||
|
/* post command event */
|
||||||
|
{
|
||||||
|
struct rtgui_event_command ecmd;
|
||||||
|
RTGUI_EVENT_COMMAND_INIT(&ecmd);
|
||||||
|
ecmd.wid = calibration_ptr->win;
|
||||||
|
ecmd.command_id = TOUCH_WIN_UPDATE;
|
||||||
|
|
||||||
|
rtgui_send(calibration_ptr->tid, &ecmd.parent, sizeof(struct rtgui_event_command));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
rt_bool_t calibration_event_handler(struct rtgui_object* object, struct rtgui_event* event)
|
||||||
|
{
|
||||||
|
struct rtgui_widget *widget = RTGUI_WIDGET(object);
|
||||||
|
|
||||||
|
switch (event->type)
|
||||||
|
{
|
||||||
|
case RTGUI_EVENT_PAINT:
|
||||||
|
{
|
||||||
|
struct rtgui_dc* dc;
|
||||||
|
struct rtgui_rect rect;
|
||||||
|
|
||||||
|
dc = rtgui_dc_begin_drawing(widget);
|
||||||
|
if (dc == RT_NULL) break;
|
||||||
|
|
||||||
|
/* get rect information */
|
||||||
|
rtgui_widget_get_rect(widget, &rect);
|
||||||
|
|
||||||
|
/* clear whole window */
|
||||||
|
RTGUI_WIDGET_BACKGROUND(widget) = white;
|
||||||
|
rtgui_dc_fill_rect(dc, &rect);
|
||||||
|
|
||||||
|
/* reset color */
|
||||||
|
RTGUI_WIDGET_BACKGROUND(widget) = green;
|
||||||
|
RTGUI_WIDGET_FOREGROUND(widget) = black;
|
||||||
|
|
||||||
|
switch (calibration_ptr->step)
|
||||||
|
{
|
||||||
|
case CALIBRATION_STEP_LEFTTOP:
|
||||||
|
rtgui_dc_draw_hline(dc, 0, 2 * CALIBRATION_WIDTH, CALIBRATION_HEIGHT);
|
||||||
|
rtgui_dc_draw_vline(dc, CALIBRATION_WIDTH, 0, 2 * CALIBRATION_HEIGHT);
|
||||||
|
RTGUI_WIDGET_FOREGROUND(widget) = red;
|
||||||
|
rtgui_dc_fill_circle(dc, CALIBRATION_WIDTH, CALIBRATION_HEIGHT, 4);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CALIBRATION_STEP_RIGHTTOP:
|
||||||
|
rtgui_dc_draw_hline(dc, calibration_ptr->width - 2 * CALIBRATION_WIDTH,
|
||||||
|
calibration_ptr->width, CALIBRATION_HEIGHT);
|
||||||
|
rtgui_dc_draw_vline(dc, calibration_ptr->width - CALIBRATION_WIDTH, 0, 2 * CALIBRATION_HEIGHT);
|
||||||
|
RTGUI_WIDGET_FOREGROUND(widget) = red;
|
||||||
|
rtgui_dc_fill_circle(dc, calibration_ptr->width - CALIBRATION_WIDTH, CALIBRATION_HEIGHT, 4);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CALIBRATION_STEP_LEFTBOTTOM:
|
||||||
|
rtgui_dc_draw_hline(dc, 0, 2 * CALIBRATION_WIDTH, calibration_ptr->height - CALIBRATION_HEIGHT);
|
||||||
|
rtgui_dc_draw_vline(dc, CALIBRATION_WIDTH, calibration_ptr->height - 2 * CALIBRATION_HEIGHT, calibration_ptr->height);
|
||||||
|
RTGUI_WIDGET_FOREGROUND(widget) = red;
|
||||||
|
rtgui_dc_fill_circle(dc, CALIBRATION_WIDTH, calibration_ptr->height - CALIBRATION_HEIGHT, 4);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CALIBRATION_STEP_RIGHTBOTTOM:
|
||||||
|
rtgui_dc_draw_hline(dc, calibration_ptr->width - 2 * CALIBRATION_WIDTH,
|
||||||
|
calibration_ptr->width, calibration_ptr->height - CALIBRATION_HEIGHT);
|
||||||
|
rtgui_dc_draw_vline(dc, calibration_ptr->width - CALIBRATION_WIDTH, calibration_ptr->height - 2 * CALIBRATION_HEIGHT, calibration_ptr->height);
|
||||||
|
RTGUI_WIDGET_FOREGROUND(widget) = red;
|
||||||
|
rtgui_dc_fill_circle(dc, calibration_ptr->width - CALIBRATION_WIDTH, calibration_ptr->height - CALIBRATION_HEIGHT, 4);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CALIBRATION_STEP_CENTER:
|
||||||
|
rtgui_dc_draw_hline(dc, calibration_ptr->width/2 - CALIBRATION_WIDTH, calibration_ptr->width/2 + CALIBRATION_WIDTH, calibration_ptr->height/2);
|
||||||
|
rtgui_dc_draw_vline(dc, calibration_ptr->width/2, calibration_ptr->height/2 - CALIBRATION_HEIGHT, calibration_ptr->height/2 + CALIBRATION_HEIGHT);
|
||||||
|
RTGUI_WIDGET_FOREGROUND(widget) = red;
|
||||||
|
rtgui_dc_fill_circle(dc, calibration_ptr->width/2, calibration_ptr->height/2, 4);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
rtgui_dc_end_drawing(dc);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case RTGUI_EVENT_COMMAND:
|
||||||
|
{
|
||||||
|
struct rtgui_event_command* ecmd = (struct rtgui_event_command*)event;
|
||||||
|
|
||||||
|
switch (ecmd->command_id)
|
||||||
|
{
|
||||||
|
case TOUCH_WIN_UPDATE:
|
||||||
|
rtgui_widget_update(widget);
|
||||||
|
break;
|
||||||
|
case TOUCH_WIN_CLOSE:
|
||||||
|
rtgui_win_close(RTGUI_WIN(widget));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return RT_TRUE;
|
||||||
|
|
||||||
|
default:
|
||||||
|
rtgui_win_event_handler(RTGUI_OBJECT(widget), event);
|
||||||
|
}
|
||||||
|
|
||||||
|
return RT_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void calibration_entry(void* parameter)
|
||||||
|
{
|
||||||
|
rt_device_t device;
|
||||||
|
struct rtgui_rect rect;
|
||||||
|
struct rtgui_app* application;
|
||||||
|
struct setup_items setup;
|
||||||
|
|
||||||
|
device = rt_device_find("touch");
|
||||||
|
if (device == RT_NULL) return; /* no this device */
|
||||||
|
|
||||||
|
calibration_ptr = (struct calibration_session*)
|
||||||
|
rt_malloc(sizeof(struct calibration_session));
|
||||||
|
rt_memset(calibration_ptr, 0, sizeof(struct calibration_data));
|
||||||
|
calibration_ptr->device = device;
|
||||||
|
calibration_ptr->tid = rt_thread_self();
|
||||||
|
|
||||||
|
rt_device_control(calibration_ptr->device, RT_TOUCH_CALIBRATION,
|
||||||
|
(void*)calibration_data_post);
|
||||||
|
|
||||||
|
rtgui_graphic_driver_get_rect(rtgui_graphic_driver_get_default(), &rect);
|
||||||
|
|
||||||
|
/* set screen rect */
|
||||||
|
calibration_ptr->width = rect.x2;
|
||||||
|
calibration_ptr->height = rect.y2;
|
||||||
|
|
||||||
|
application = rtgui_app_create(rt_thread_self(), "calibration");
|
||||||
|
if (application != RT_NULL)
|
||||||
|
{
|
||||||
|
/* create calibration window */
|
||||||
|
calibration_ptr->win = rtgui_win_create(RT_NULL,
|
||||||
|
"calibration", &rect,
|
||||||
|
RTGUI_WIN_STYLE_NO_TITLE | RTGUI_WIN_STYLE_NO_BORDER |
|
||||||
|
RTGUI_WIN_STYLE_ONTOP | RTGUI_WIN_STYLE_DESTROY_ON_CLOSE);
|
||||||
|
if (calibration_ptr->win != RT_NULL)
|
||||||
|
{
|
||||||
|
rtgui_object_set_event_handler(RTGUI_OBJECT(calibration_ptr->win),
|
||||||
|
calibration_event_handler);
|
||||||
|
rtgui_win_show(calibration_ptr->win, RT_TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
|
rtgui_app_destroy(application);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* set calibration data */
|
||||||
|
rt_device_control(calibration_ptr->device, RT_TOUCH_CALIBRATION_DATA,
|
||||||
|
&calibration_ptr->data);
|
||||||
|
|
||||||
|
//save setup
|
||||||
|
setup.touch_min_x = calibration_ptr->data.min_x;
|
||||||
|
setup.touch_max_x = calibration_ptr->data.max_x;
|
||||||
|
setup.touch_min_y = calibration_ptr->data.min_y;
|
||||||
|
setup.touch_max_y = calibration_ptr->data.max_y;
|
||||||
|
setup_save(&setup);
|
||||||
|
|
||||||
|
/* recover to normal */
|
||||||
|
rt_device_control(calibration_ptr->device, RT_TOUCH_NORMAL, RT_NULL);
|
||||||
|
|
||||||
|
/* release memory */
|
||||||
|
rt_free(calibration_ptr);
|
||||||
|
calibration_ptr = RT_NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
void calibration_init(void)
|
||||||
|
{
|
||||||
|
rt_thread_t tid;
|
||||||
|
struct setup_items setup;
|
||||||
|
|
||||||
|
if(setup_load(&setup) == RT_EOK)
|
||||||
|
{
|
||||||
|
struct calibration_data data;
|
||||||
|
rt_device_t device;
|
||||||
|
|
||||||
|
data.min_x = setup.touch_min_x;
|
||||||
|
data.max_x = setup.touch_max_x;
|
||||||
|
data.min_y = setup.touch_min_y;
|
||||||
|
data.max_y = setup.touch_max_y;
|
||||||
|
|
||||||
|
device = rt_device_find("touch");
|
||||||
|
if(device != RT_NULL)
|
||||||
|
rt_device_control(device, RT_TOUCH_CALIBRATION_DATA, &data);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
tid = rt_thread_create("cali", calibration_entry, RT_NULL, 1024, 20, 20);
|
||||||
|
if (tid != RT_NULL)
|
||||||
|
rt_thread_startup(tid);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef RT_USING_FINSH
|
||||||
|
#include <finsh.h>
|
||||||
|
void calibration(void)
|
||||||
|
{
|
||||||
|
calibration_init();
|
||||||
|
}
|
||||||
|
FINSH_FUNCTION_EXPORT(calibration, perform touch calibration);
|
||||||
|
#endif
|
|
@ -0,0 +1,57 @@
|
||||||
|
#include <rtthread.h>
|
||||||
|
#include <rtgui/rtgui_app.h>
|
||||||
|
#include <rtgui/widgets/window.h>
|
||||||
|
#include <rtgui/widgets/label.h>
|
||||||
|
|
||||||
|
void app1_entry(void* parameter)
|
||||||
|
{
|
||||||
|
struct rtgui_app* application;
|
||||||
|
struct rtgui_win* win;
|
||||||
|
|
||||||
|
application = rtgui_app_create(rt_thread_self(), "ExApp1");
|
||||||
|
if (application != RT_NULL)
|
||||||
|
{
|
||||||
|
struct rtgui_label *label;
|
||||||
|
struct rtgui_box *box;
|
||||||
|
|
||||||
|
box = rtgui_box_create(RTGUI_VERTICAL, 10);
|
||||||
|
label = rtgui_label_create("Hello World");
|
||||||
|
win = rtgui_mainwin_create(RT_NULL, "MainWin", RTGUI_WIN_STYLE_MAINWIN);
|
||||||
|
rtgui_container_set_box(RTGUI_CONTAINER(win), box);
|
||||||
|
rtgui_container_add_child(RTGUI_CONTAINER(win), RTGUI_WIDGET(label));
|
||||||
|
rtgui_container_layout(RTGUI_CONTAINER(win));
|
||||||
|
|
||||||
|
rtgui_win_show(win, RT_TRUE);
|
||||||
|
|
||||||
|
rtgui_app_destroy(application);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void app2_entry(void* parameter)
|
||||||
|
{
|
||||||
|
struct rtgui_app* application;
|
||||||
|
struct rtgui_win* win;
|
||||||
|
|
||||||
|
application = rtgui_app_create(rt_thread_self(), "ExApp2");
|
||||||
|
if (application != RT_NULL)
|
||||||
|
{
|
||||||
|
rtgui_rect_t rect = {220, 250, 400, 450};
|
||||||
|
win = rtgui_win_create(RT_NULL, "Window #2", &rect, RTGUI_WIN_STYLE_DEFAULT);
|
||||||
|
rtgui_win_show(win, RT_TRUE);
|
||||||
|
|
||||||
|
rtgui_app_destroy(application);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void app_init(void)
|
||||||
|
{
|
||||||
|
rt_thread_t tid;
|
||||||
|
|
||||||
|
tid = rt_thread_create("app1", app1_entry, RT_NULL, 2048, 20, 20);
|
||||||
|
if (tid != RT_NULL)
|
||||||
|
rt_thread_startup(tid);
|
||||||
|
|
||||||
|
tid = rt_thread_create("app2", app2_entry, RT_NULL, 2048, 20, 20);
|
||||||
|
if (tid != RT_NULL)
|
||||||
|
rt_thread_startup(tid);
|
||||||
|
}
|
|
@ -0,0 +1,248 @@
|
||||||
|
#include <rtgui/rtgui.h>
|
||||||
|
#include <rtgui/image.h>
|
||||||
|
#include <rtgui/rtgui_system.h>
|
||||||
|
#include <rtgui/widgets/window.h>
|
||||||
|
#include <rtgui/rtgui_app.h>
|
||||||
|
|
||||||
|
#include <dfs_posix.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#define PICTURE_DIR "/picture"
|
||||||
|
|
||||||
|
/* current picture file name */
|
||||||
|
rt_bool_t key_pressed = RT_FALSE;
|
||||||
|
static char current_fn[32] = {0};
|
||||||
|
static struct rtgui_win *win;
|
||||||
|
|
||||||
|
static void picture_show_prev(struct rtgui_widget* widget)
|
||||||
|
{
|
||||||
|
DIR* dir;
|
||||||
|
struct dirent* entry;
|
||||||
|
rt_bool_t is_last;
|
||||||
|
char fn[32];
|
||||||
|
struct rtgui_image_engine* engine;
|
||||||
|
|
||||||
|
fn[0] = '\0';
|
||||||
|
is_last = RT_FALSE;
|
||||||
|
|
||||||
|
dir = opendir(PICTURE_DIR);
|
||||||
|
if (dir == RT_NULL)
|
||||||
|
{
|
||||||
|
rt_kprintf("open directory failed\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
entry = readdir(dir);
|
||||||
|
if (entry != RT_NULL)
|
||||||
|
{
|
||||||
|
engine = rtgui_image_get_engine_by_filename(entry->d_name);
|
||||||
|
if (engine != RT_NULL)
|
||||||
|
{
|
||||||
|
/* it's a HDC image */
|
||||||
|
if ((strcmp(entry->d_name, current_fn) == 0) &&
|
||||||
|
is_last != RT_TRUE)
|
||||||
|
{
|
||||||
|
if (fn[0] == '\0')
|
||||||
|
{
|
||||||
|
/* it should be the last image */
|
||||||
|
is_last = RT_TRUE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* display image */
|
||||||
|
strcpy(current_fn, fn);
|
||||||
|
rtgui_widget_update(widget);
|
||||||
|
closedir(dir);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
strcpy(fn, entry->d_name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} while(entry != RT_NULL);
|
||||||
|
|
||||||
|
/* close directory */
|
||||||
|
closedir(dir);
|
||||||
|
|
||||||
|
if ((is_last == RT_TRUE) && fn[0] != '\0')
|
||||||
|
{
|
||||||
|
strcpy(current_fn, fn);
|
||||||
|
rtgui_widget_update(widget);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void picture_show_next(struct rtgui_widget* widget)
|
||||||
|
{
|
||||||
|
DIR* dir;
|
||||||
|
struct dirent* entry;
|
||||||
|
rt_bool_t found, has_image;
|
||||||
|
struct rtgui_image_engine* engine;
|
||||||
|
|
||||||
|
found = RT_FALSE; has_image = RT_FALSE;
|
||||||
|
|
||||||
|
__restart:
|
||||||
|
dir = opendir(PICTURE_DIR);
|
||||||
|
if (dir == RT_NULL)
|
||||||
|
{
|
||||||
|
rt_kprintf("open directory failed\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
entry = readdir(dir);
|
||||||
|
if (entry != RT_NULL)
|
||||||
|
{
|
||||||
|
engine = rtgui_image_get_engine_by_filename(entry->d_name);
|
||||||
|
if (engine != RT_NULL)
|
||||||
|
{
|
||||||
|
/* this directory includes image */
|
||||||
|
has_image = RT_TRUE;
|
||||||
|
|
||||||
|
if (found == RT_TRUE || current_fn[0] == '\0')
|
||||||
|
{
|
||||||
|
strcpy(current_fn, entry->d_name);
|
||||||
|
rtgui_widget_update(widget);
|
||||||
|
|
||||||
|
closedir(dir);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* it's a HDC image */
|
||||||
|
if (strcmp(entry->d_name, current_fn) == 0)
|
||||||
|
found = RT_TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} while(entry != RT_NULL);
|
||||||
|
|
||||||
|
/* close directory */
|
||||||
|
closedir(dir);
|
||||||
|
|
||||||
|
if (has_image != RT_TRUE) return;
|
||||||
|
current_fn[0] = '\0';
|
||||||
|
goto __restart;
|
||||||
|
}
|
||||||
|
|
||||||
|
static rt_bool_t onkey_handle(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)
|
||||||
|
{
|
||||||
|
key_pressed = RT_TRUE;
|
||||||
|
picture_show_next(RTGUI_WIDGET(object));
|
||||||
|
return RT_TRUE;
|
||||||
|
}
|
||||||
|
else if (ekbd->key == RTGUIK_LEFT)
|
||||||
|
{
|
||||||
|
key_pressed = RT_TRUE;
|
||||||
|
picture_show_prev(RTGUI_WIDGET(object));
|
||||||
|
return RT_TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return RT_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static rt_bool_t picture_view_event_handler(rtgui_object_t *object, rtgui_event_t *event)
|
||||||
|
{
|
||||||
|
if (event->type == RTGUI_EVENT_PAINT)
|
||||||
|
{
|
||||||
|
struct rtgui_dc* dc;
|
||||||
|
struct rtgui_rect rect;
|
||||||
|
struct rtgui_image* image = RT_NULL;
|
||||||
|
char fn[32];
|
||||||
|
|
||||||
|
dc = rtgui_dc_begin_drawing(RTGUI_WIDGET(object));
|
||||||
|
if (dc == RT_NULL) return RT_FALSE;
|
||||||
|
rtgui_widget_get_rect(RTGUI_WIDGET(object), &rect);
|
||||||
|
|
||||||
|
/* open image */
|
||||||
|
rt_snprintf(fn, sizeof(fn), "%s/%s", PICTURE_DIR, current_fn);
|
||||||
|
rt_kprintf("pic fn: %s\n", fn);
|
||||||
|
image = rtgui_image_create(fn, RT_FALSE);
|
||||||
|
|
||||||
|
if (image != RT_NULL)
|
||||||
|
{
|
||||||
|
/* blit image */
|
||||||
|
rtgui_image_blit(image, dc, &rect);
|
||||||
|
/* destroy image */
|
||||||
|
rtgui_image_destroy(image);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rtgui_dc_fill_rect(dc, &rect);
|
||||||
|
rtgui_dc_draw_text(dc, "ûÓÐÎļþ±»´ò¿ª", &rect);
|
||||||
|
}
|
||||||
|
rtgui_dc_end_drawing(dc);
|
||||||
|
|
||||||
|
return RT_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return rtgui_win_event_handler(object, event);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void timeout(struct rtgui_timer* timer, void* parameter)
|
||||||
|
{
|
||||||
|
struct rtgui_widget* widget;
|
||||||
|
|
||||||
|
widget = (struct rtgui_widget*)parameter;
|
||||||
|
|
||||||
|
if (key_pressed == RT_TRUE)
|
||||||
|
key_pressed = RT_FALSE;
|
||||||
|
else
|
||||||
|
picture_show_next(widget);
|
||||||
|
}
|
||||||
|
|
||||||
|
void picture_show(void* parameter)
|
||||||
|
{
|
||||||
|
/* create application */
|
||||||
|
struct rtgui_app *app;
|
||||||
|
struct rtgui_rect rect1;
|
||||||
|
rtgui_timer_t *timer;
|
||||||
|
|
||||||
|
app = rtgui_app_create(rt_thread_self(), "picture");
|
||||||
|
if (app == RT_NULL)
|
||||||
|
{
|
||||||
|
rt_kprintf("Create application \"picture\" failed!\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
rtgui_graphic_driver_get_rect(rtgui_graphic_driver_get_default(), &rect1);
|
||||||
|
|
||||||
|
/* create main window */
|
||||||
|
win = rtgui_mainwin_create(RT_NULL, "main",
|
||||||
|
RTGUI_WIN_STYLE_NO_BORDER | RTGUI_WIN_STYLE_NO_TITLE);
|
||||||
|
if (win == RT_NULL)
|
||||||
|
{
|
||||||
|
rt_kprintf("Create window \"main\" failed!\n");
|
||||||
|
rtgui_app_destroy(app);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
timer = rtgui_timer_create(500, RT_TIMER_FLAG_PERIODIC, timeout, (void*)win);
|
||||||
|
rtgui_timer_start(timer);
|
||||||
|
|
||||||
|
rtgui_object_set_event_handler(RTGUI_OBJECT(win), picture_view_event_handler);
|
||||||
|
rtgui_win_set_onkey(win, onkey_handle);
|
||||||
|
rtgui_win_show(win, RT_FALSE);
|
||||||
|
|
||||||
|
/* show next picture */
|
||||||
|
picture_show_next(RTGUI_WIDGET(win));
|
||||||
|
|
||||||
|
rtgui_app_run(app);
|
||||||
|
rtgui_app_destroy(app);
|
||||||
|
}
|
||||||
|
|
||||||
|
void picture_app_create(void)
|
||||||
|
{
|
||||||
|
rt_thread_t tid;
|
||||||
|
|
||||||
|
tid = rt_thread_create("pic", picture_show, RT_NULL,
|
||||||
|
2048, 20, 8);
|
||||||
|
if (tid != RT_NULL) rt_thread_startup(tid);
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,187 @@
|
||||||
|
#include <rtthread.h>
|
||||||
|
#include <rtgui/rtgui_server.h>
|
||||||
|
#include <rtgui/rtgui_system.h>
|
||||||
|
#include <rtgui/rtgui_app.h>
|
||||||
|
#include <rtgui/widgets/window.h>
|
||||||
|
#include <rtgui/widgets/list_view.h>
|
||||||
|
#include <rtgui/rtgui_xml.h>
|
||||||
|
#include <rtgui/widgets/panel.h>
|
||||||
|
|
||||||
|
#ifdef _WIN32_NATIVE
|
||||||
|
#include <io.h>
|
||||||
|
#include <dirent.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#define PATH_SEPARATOR '\\'
|
||||||
|
#else
|
||||||
|
#include <dfs_posix.h>
|
||||||
|
#define PATH_SEPARATOR '/'
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define APP_PATH "/programs"
|
||||||
|
#define ITEM_MAX 10
|
||||||
|
|
||||||
|
static struct rtgui_list_item *items = RT_NULL;
|
||||||
|
static rtgui_list_view_t* _view = RT_NULL;
|
||||||
|
static int pos = -1;
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
IDLE,
|
||||||
|
READ_NAME,
|
||||||
|
READ_ICON,
|
||||||
|
READ_AUTHOR,
|
||||||
|
READ_LICENSE,
|
||||||
|
}XML_STATUS;
|
||||||
|
|
||||||
|
static int xml_event_handler(rt_uint8_t event, const char* text, rt_size_t len, void* user)
|
||||||
|
{
|
||||||
|
static XML_STATUS status = IDLE;
|
||||||
|
char fn[64];
|
||||||
|
|
||||||
|
if(event == EVENT_START)
|
||||||
|
{
|
||||||
|
if(strcmp(text, "name") == 0)
|
||||||
|
status = READ_NAME;
|
||||||
|
else if(strcmp(text, "image") == 0)
|
||||||
|
status = READ_ICON;
|
||||||
|
else if(strcmp(text, "author") == 0)
|
||||||
|
status = READ_AUTHOR;
|
||||||
|
else if(strcmp(text, "license") == 0)
|
||||||
|
status = READ_LICENSE;
|
||||||
|
}
|
||||||
|
else if(event == EVENT_TEXT)
|
||||||
|
{
|
||||||
|
switch(status)
|
||||||
|
{
|
||||||
|
case READ_NAME:
|
||||||
|
items[++pos].name = rt_strdup(text);
|
||||||
|
items[pos].parameter = items[pos].name;
|
||||||
|
break;
|
||||||
|
case READ_ICON:
|
||||||
|
rt_snprintf(fn, sizeof(fn), "%s/%s", APP_PATH, text);
|
||||||
|
items[pos].image = rtgui_image_create(fn, RT_TRUE);
|
||||||
|
if(items[pos].image == RT_NULL) rt_kprintf("image create failed\n");
|
||||||
|
break;
|
||||||
|
case READ_AUTHOR:
|
||||||
|
break;
|
||||||
|
case READ_LICENSE:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
status = IDLE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int xml_load_items(const char* filename)
|
||||||
|
{
|
||||||
|
struct rtgui_filerw* filerw;
|
||||||
|
char buffer[512];
|
||||||
|
rtgui_xml_t *xml;
|
||||||
|
int length;
|
||||||
|
|
||||||
|
/* create filerw context */
|
||||||
|
filerw = rtgui_filerw_create_file(filename, "rb");
|
||||||
|
if (filerw == RT_NULL)
|
||||||
|
{
|
||||||
|
rt_kprintf("read file fail %s\n", filename);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
length = rtgui_filerw_read(filerw, buffer, 512, 1);
|
||||||
|
if(length <= 0)
|
||||||
|
{
|
||||||
|
rt_kprintf("read fail\n");
|
||||||
|
rtgui_filerw_close(filerw);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
xml = rtgui_xml_create(512, xml_event_handler, RT_NULL);
|
||||||
|
if (xml != RT_NULL)
|
||||||
|
{
|
||||||
|
rtgui_xml_parse(xml, buffer, length);
|
||||||
|
rtgui_xml_destroy(xml);
|
||||||
|
}
|
||||||
|
|
||||||
|
rtgui_filerw_close(filerw);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void exec_app(rtgui_widget_t* widget, void* parameter)
|
||||||
|
{
|
||||||
|
char path[64];
|
||||||
|
rt_module_t module;
|
||||||
|
|
||||||
|
RT_ASSERT(parameter != RT_NULL);
|
||||||
|
|
||||||
|
rt_snprintf(path, sizeof(path), "%s/%s/%s.mo", APP_PATH,
|
||||||
|
(char*)parameter, (char*)parameter);
|
||||||
|
|
||||||
|
#ifndef _WIN32
|
||||||
|
module = rt_module_find((const char*)parameter);
|
||||||
|
if(module == RT_NULL)
|
||||||
|
rt_module_open(path);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
struct rtgui_app* app;
|
||||||
|
RT_ASSERT(module->module_thread);
|
||||||
|
app = (struct rtgui_app*)(module->module_thread->user_data);
|
||||||
|
|
||||||
|
if(app != RT_NULL) rtgui_app_activate(app);
|
||||||
|
else rt_kprintf("application is null\n");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
static void scan_app_dir(const char* path)
|
||||||
|
{
|
||||||
|
DIR* dir;
|
||||||
|
struct dirent* entry;
|
||||||
|
char fn[32];
|
||||||
|
|
||||||
|
dir = opendir(path);
|
||||||
|
if (dir == RT_NULL)
|
||||||
|
{
|
||||||
|
rt_kprintf("open directory %s failed\n", path);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
entry = readdir(dir);
|
||||||
|
if (entry != RT_NULL)
|
||||||
|
{
|
||||||
|
if(entry->d_type == DFS_DT_REG) break;
|
||||||
|
rt_sprintf(fn, "%s/%s/%s.xml", path, entry->d_name, entry->d_name);
|
||||||
|
xml_load_items(fn);
|
||||||
|
}
|
||||||
|
} while(entry != RT_NULL);
|
||||||
|
|
||||||
|
/* close directory */
|
||||||
|
closedir(dir);
|
||||||
|
}
|
||||||
|
|
||||||
|
struct rtgui_panel* program_create(struct rtgui_panel* panel)
|
||||||
|
{
|
||||||
|
int i = 0;
|
||||||
|
struct rtgui_rect rect;
|
||||||
|
|
||||||
|
RT_ASSERT(panel != RT_NULL);
|
||||||
|
rtgui_widget_get_extent(RTGUI_WIDGET(panel), &rect);
|
||||||
|
|
||||||
|
items = (struct rtgui_list_item *) rtgui_malloc((ITEM_MAX) * sizeof(struct rtgui_list_item));
|
||||||
|
for(i=0; i< ITEM_MAX; i++) items[i].action = exec_app;
|
||||||
|
|
||||||
|
/* create application list */
|
||||||
|
rtgui_rect_inflate(&rect, -15);
|
||||||
|
|
||||||
|
scan_app_dir(APP_PATH);
|
||||||
|
if(pos >= 0)
|
||||||
|
{
|
||||||
|
_view = rtgui_list_view_create(items, pos + 1, &rect, RTGUI_LIST_VIEW_ICON);
|
||||||
|
rtgui_container_add_child(RTGUI_CONTAINER(panel), RTGUI_WIDGET(_view));
|
||||||
|
}
|
||||||
|
|
||||||
|
return RTGUI_PANEL(panel);
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
#include <rtthread.h>
|
||||||
|
#include <rtgui/rtgui_server.h>
|
||||||
|
#include <rtgui/rtgui_system.h>
|
||||||
|
#include <rtgui/rtgui_app.h>
|
||||||
|
#include "appmgr.h"
|
||||||
|
#include "statusbar.h"
|
||||||
|
|
||||||
|
void realtouch_ui_init(void)
|
||||||
|
{
|
||||||
|
rt_device_t device;
|
||||||
|
struct rt_device_rect_info info;
|
||||||
|
#ifndef _WIN32
|
||||||
|
device = rt_device_find("lcd");
|
||||||
|
{
|
||||||
|
info.width = 800;
|
||||||
|
info.height = 480;
|
||||||
|
/* set graphic resolution */
|
||||||
|
rt_device_control(device, RTGRAPHIC_CTRL_SET_MODE, &info);
|
||||||
|
}
|
||||||
|
if (device != RT_NULL)
|
||||||
|
|
||||||
|
/* re-set graphic device */
|
||||||
|
rtgui_graphic_set_device(device);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
app_mgr_init();
|
||||||
|
rt_thread_delay(10);
|
||||||
|
|
||||||
|
#ifndef _WIN32
|
||||||
|
calibration_init();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,166 @@
|
||||||
|
#include "statusbar.h"
|
||||||
|
#include <rtgui/dc.h>
|
||||||
|
#include <rtgui/image.h>
|
||||||
|
#include "xpm/start.xpm"
|
||||||
|
|
||||||
|
static const rtgui_color_t _status_bar_pixels[] =
|
||||||
|
{
|
||||||
|
RTGUI_RGB(228,228,228),
|
||||||
|
RTGUI_RGB(182,186,192),
|
||||||
|
RTGUI_RGB(92,158,200),
|
||||||
|
RTGUI_RGB(30,117,176),
|
||||||
|
RTGUI_RGB(30,116,175),
|
||||||
|
RTGUI_RGB(29,115,174),
|
||||||
|
RTGUI_RGB(29,114,173),
|
||||||
|
RTGUI_RGB(29,114,172),
|
||||||
|
RTGUI_RGB(29,113,171),
|
||||||
|
RTGUI_RGB(28,112,170),
|
||||||
|
RTGUI_RGB(28,111,170),
|
||||||
|
RTGUI_RGB(28,111,169),
|
||||||
|
RTGUI_RGB(28,110,168),
|
||||||
|
RTGUI_RGB(27,109,167),
|
||||||
|
RTGUI_RGB(27,108,166),
|
||||||
|
RTGUI_RGB(27,108,165),
|
||||||
|
RTGUI_RGB(26,107,164),
|
||||||
|
RTGUI_RGB(26,106,163),
|
||||||
|
RTGUI_RGB(26,105,163),
|
||||||
|
RTGUI_RGB(26,105,162),
|
||||||
|
RTGUI_RGB(25,104,161),
|
||||||
|
RTGUI_RGB(25,103,160),
|
||||||
|
RTGUI_RGB(25,102,159),
|
||||||
|
RTGUI_RGB(25,101,158),
|
||||||
|
RTGUI_RGB(24,101,157),
|
||||||
|
RTGUI_RGB(24,100,156),
|
||||||
|
RTGUI_RGB(24,99,156),
|
||||||
|
RTGUI_RGB(24,98,155),
|
||||||
|
RTGUI_RGB(23,98,154),
|
||||||
|
RTGUI_RGB(23,97,153),
|
||||||
|
RTGUI_RGB(23,96,153),
|
||||||
|
RTGUI_RGB(23,95,152),
|
||||||
|
RTGUI_RGB(22,94,150),
|
||||||
|
RTGUI_RGB(22,94,149),
|
||||||
|
RTGUI_RGB(22,93,148),
|
||||||
|
RTGUI_RGB(21,92,147),
|
||||||
|
RTGUI_RGB(21,91,146),
|
||||||
|
RTGUI_RGB(21,91,145),
|
||||||
|
RTGUI_RGB(20,90,143),
|
||||||
|
RTGUI_RGB(20,89,142),
|
||||||
|
RTGUI_RGB(20,88,141),
|
||||||
|
RTGUI_RGB(19,87,139),
|
||||||
|
RTGUI_RGB(19,86,138),
|
||||||
|
RTGUI_RGB(19,85,136),
|
||||||
|
RTGUI_RGB(18,85,138),
|
||||||
|
RTGUI_RGB(18,84,137),
|
||||||
|
RTGUI_RGB(18,83,137),
|
||||||
|
RTGUI_RGB(18,82,136),
|
||||||
|
RTGUI_RGB(47,91,135),
|
||||||
|
RTGUI_RGB(255,255,255),
|
||||||
|
};
|
||||||
|
|
||||||
|
void dc_draw_bar(struct rtgui_dc* dc, const rtgui_color_t *bar_pixel, struct rtgui_rect *rect, int style)
|
||||||
|
{
|
||||||
|
rt_uint32_t index;
|
||||||
|
struct rtgui_gc *gc;
|
||||||
|
rtgui_color_t fg;
|
||||||
|
|
||||||
|
gc = rtgui_dc_get_gc(dc);
|
||||||
|
fg = gc->foreground;
|
||||||
|
|
||||||
|
if (style == RTGUI_HORIZONTAL)
|
||||||
|
{
|
||||||
|
/* horizontal */
|
||||||
|
for (index = rect->y1; index < rect->y2; index ++)
|
||||||
|
{
|
||||||
|
gc->foreground = bar_pixel[index - rect->y1];
|
||||||
|
rtgui_dc_draw_hline(dc, rect->x1, rect->x2, index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* vertical */
|
||||||
|
for (index = rect->x1; index < rect->x2; index ++)
|
||||||
|
{
|
||||||
|
gc->foreground = bar_pixel[index - rect->x1];
|
||||||
|
rtgui_dc_draw_vline(dc, index, rect->y1, rect->y2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
gc->foreground = fg;
|
||||||
|
}
|
||||||
|
|
||||||
|
rt_bool_t statusbar_event_handler(struct rtgui_object* object, struct rtgui_event* event)
|
||||||
|
{
|
||||||
|
switch (event->type)
|
||||||
|
{
|
||||||
|
case RTGUI_EVENT_PAINT:
|
||||||
|
{
|
||||||
|
struct rtgui_dc *dc;
|
||||||
|
struct rtgui_rect rect;
|
||||||
|
struct rtgui_image *image;
|
||||||
|
|
||||||
|
/* create start image */
|
||||||
|
image = rtgui_image_create_from_mem("xpm", (const rt_uint8_t*)start_xpm, sizeof(start_xpm), RT_FALSE);
|
||||||
|
rtgui_widget_get_rect(RTGUI_WIDGET(object), &rect);
|
||||||
|
|
||||||
|
dc = rtgui_dc_begin_drawing(RTGUI_WIDGET(object));
|
||||||
|
dc_draw_bar(dc, _status_bar_pixels, &rect, RTGUI_HORIZONTAL);
|
||||||
|
|
||||||
|
rect.x1 += 15;
|
||||||
|
rtgui_image_blit(image, dc, &rect);
|
||||||
|
|
||||||
|
/* dispatch event */
|
||||||
|
rtgui_container_dispatch_event(RTGUI_CONTAINER(object), event);
|
||||||
|
|
||||||
|
rtgui_dc_end_drawing(dc);
|
||||||
|
rtgui_image_destroy(image);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case RTGUI_EVENT_MOUSE_BUTTON:
|
||||||
|
{
|
||||||
|
struct rtgui_event_mouse* emouse = (struct rtgui_event_mouse*)event;
|
||||||
|
struct rtgui_rect start_rect;
|
||||||
|
|
||||||
|
rtgui_widget_get_extent(RTGUI_WIDGET(object), &start_rect);
|
||||||
|
start_rect.x1 += 15;
|
||||||
|
start_rect.x2 = start_rect.x1 + 48;
|
||||||
|
|
||||||
|
/* it's not this widget event, clean status */
|
||||||
|
if (rtgui_rect_contains_point(&start_rect, emouse->x, emouse->y) == RT_EOK &&
|
||||||
|
emouse->button & (RTGUI_MOUSE_BUTTON_UP))
|
||||||
|
{
|
||||||
|
rtgui_app_activate(rtgui_app_self());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return RT_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
default:
|
||||||
|
return rtgui_win_event_handler(object, event);
|
||||||
|
}
|
||||||
|
|
||||||
|
return RT_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void statusbar_init(void)
|
||||||
|
{
|
||||||
|
rtgui_rect_t rect;
|
||||||
|
struct rtgui_win* win;
|
||||||
|
|
||||||
|
/* get scree rect */
|
||||||
|
rtgui_get_screen_rect(&rect);
|
||||||
|
rect.y2 = rect.y1 + 50;
|
||||||
|
|
||||||
|
/* create status bar window */
|
||||||
|
win = rtgui_win_create(RT_NULL, "StatusBar", &rect, RTGUI_WIN_STYLE_NO_BORDER |
|
||||||
|
RTGUI_WIN_STYLE_NO_TITLE | RTGUI_WIN_STYLE_ONTOP);
|
||||||
|
rtgui_object_set_event_handler(RTGUI_OBJECT(win), statusbar_event_handler);
|
||||||
|
|
||||||
|
rtgui_get_screen_rect(&rect);
|
||||||
|
rect.y1 = 50;
|
||||||
|
/* set the rect information of main window */
|
||||||
|
rtgui_set_mainwin_rect(&rect);
|
||||||
|
|
||||||
|
rtgui_win_show(win, RT_FALSE);
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
#ifndef __STATUS_BAR_H__
|
||||||
|
#define __STATUS_BAR_H__
|
||||||
|
|
||||||
|
#include <rtthread.h>
|
||||||
|
#include <rtgui/rtgui_app.h>
|
||||||
|
#include <rtgui/widgets/window.h>
|
||||||
|
#include <rtgui/widgets/label.h>
|
||||||
|
#include <rtgui/widgets/box.h>
|
||||||
|
#include <rtgui/widgets/panel.h>
|
||||||
|
|
||||||
|
void statusbar_init(void);
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,188 @@
|
||||||
|
/* XPM */
|
||||||
|
static const char *close_xpm[] = {
|
||||||
|
/* columns rows colors chars-per-pixel */
|
||||||
|
"24 24 158 2",
|
||||||
|
" c #6D0F14",
|
||||||
|
". c #8F141A",
|
||||||
|
"X c #92151B",
|
||||||
|
"o c #A1171D",
|
||||||
|
"O c #A3171E",
|
||||||
|
"+ c #A4171E",
|
||||||
|
"@ c #A5171E",
|
||||||
|
"# c #A7181E",
|
||||||
|
"$ c #A8181F",
|
||||||
|
"% c #A11D24",
|
||||||
|
"& c #A81E25",
|
||||||
|
"* c #B41A21",
|
||||||
|
"= c #B51A21",
|
||||||
|
"- c #BE1B23",
|
||||||
|
"; c #AE282E",
|
||||||
|
": c #BC2129",
|
||||||
|
"> c #AE2E34",
|
||||||
|
", c #B82D33",
|
||||||
|
"< c #C01D24",
|
||||||
|
"1 c #C01D25",
|
||||||
|
"2 c #C31C24",
|
||||||
|
"3 c #C51E26",
|
||||||
|
"4 c #C61F27",
|
||||||
|
"5 c #C71F27",
|
||||||
|
"6 c #C12027",
|
||||||
|
"7 c #C3222A",
|
||||||
|
"8 c #C72029",
|
||||||
|
"9 c #C5242C",
|
||||||
|
"0 c #C5262E",
|
||||||
|
"q c #C82028",
|
||||||
|
"w c #C92029",
|
||||||
|
"e c #C8232B",
|
||||||
|
"r c #CB222A",
|
||||||
|
"t c #CB222B",
|
||||||
|
"y c #CD232C",
|
||||||
|
"u c #CA242C",
|
||||||
|
"i c #C9272F",
|
||||||
|
"p c #CD242D",
|
||||||
|
"a c #CE242C",
|
||||||
|
"s c #CE242D",
|
||||||
|
"d c #CF252E",
|
||||||
|
"f c #D0262E",
|
||||||
|
"g c #D1272F",
|
||||||
|
"h c #C82931",
|
||||||
|
"j c #CD2830",
|
||||||
|
"k c #CB2D34",
|
||||||
|
"l c #C82E35",
|
||||||
|
"z c #D32931",
|
||||||
|
"x c #D52A33",
|
||||||
|
"c c #D52B33",
|
||||||
|
"v c #D62A33",
|
||||||
|
"b c #D62B33",
|
||||||
|
"n c #D22D36",
|
||||||
|
"m c #D72C34",
|
||||||
|
"M c #D82D35",
|
||||||
|
"N c #D92D36",
|
||||||
|
"B c #D82F37",
|
||||||
|
"V c #DB2F38",
|
||||||
|
"C c #D53239",
|
||||||
|
"Z c #D93139",
|
||||||
|
"A c #DD3139",
|
||||||
|
"S c #DD313A",
|
||||||
|
"D c #DE313A",
|
||||||
|
"F c #DE323A",
|
||||||
|
"G c #DF323B",
|
||||||
|
"H c #DE333C",
|
||||||
|
"J c #E0333C",
|
||||||
|
"K c #E1343C",
|
||||||
|
"L c #E1343D",
|
||||||
|
"P c #E3363F",
|
||||||
|
"I c #D93C44",
|
||||||
|
"U c #E53841",
|
||||||
|
"Y c #E63841",
|
||||||
|
"T c #E83A42",
|
||||||
|
"R c #EB3C45",
|
||||||
|
"E c #EB3D46",
|
||||||
|
"W c #EC3D46",
|
||||||
|
"Q c #ED3D46",
|
||||||
|
"! c #EE3E47",
|
||||||
|
"~ c #B65A5F",
|
||||||
|
"^ c #BD5D61",
|
||||||
|
"/ c #B7696C",
|
||||||
|
"( c #BD6C70",
|
||||||
|
") c #D2454C",
|
||||||
|
"_ c #D8454C",
|
||||||
|
"` c #DD474E",
|
||||||
|
"' c #D0494F",
|
||||||
|
"] c #D14B51",
|
||||||
|
"[ c #DB4A51",
|
||||||
|
"{ c #DB4A52",
|
||||||
|
"} c #DC4A52",
|
||||||
|
"| c #DC4B52",
|
||||||
|
" . c #D35157",
|
||||||
|
".. c #D55259",
|
||||||
|
"X. c #D6535A",
|
||||||
|
"o. c #D4555B",
|
||||||
|
"O. c #D7545B",
|
||||||
|
"+. c #DF5259",
|
||||||
|
"@. c #DE555B",
|
||||||
|
"#. c #D9565C",
|
||||||
|
"$. c #DA575D",
|
||||||
|
"%. c #DB585E",
|
||||||
|
"&. c #E7464F",
|
||||||
|
"*. c #EE4049",
|
||||||
|
"=. c #ED464E",
|
||||||
|
"-. c #E3484F",
|
||||||
|
";. c #E64D54",
|
||||||
|
":. c #EE4B54",
|
||||||
|
">. c #E94F57",
|
||||||
|
",. c #F04D56",
|
||||||
|
"<. c #F14E57",
|
||||||
|
"1. c #E45158",
|
||||||
|
"2. c #E7545B",
|
||||||
|
"3. c #F1545D",
|
||||||
|
"4. c #DD5960",
|
||||||
|
"5. c #DE5A61",
|
||||||
|
"6. c #E05B62",
|
||||||
|
"7. c #E15D63",
|
||||||
|
"8. c #E25E64",
|
||||||
|
"9. c #E45F65",
|
||||||
|
"0. c #E55F66",
|
||||||
|
"q. c #EA5D64",
|
||||||
|
"w. c #EB5E65",
|
||||||
|
"e. c #F15E66",
|
||||||
|
"r. c #C46C71",
|
||||||
|
"t. c #C1797D",
|
||||||
|
"y. c #D37277",
|
||||||
|
"u. c #E56066",
|
||||||
|
"i. c #E9636A",
|
||||||
|
"p. c #EC676D",
|
||||||
|
"a. c #E1696F",
|
||||||
|
"s. c #E5696F",
|
||||||
|
"d. c #F0636B",
|
||||||
|
"f. c #E2747A",
|
||||||
|
"g. c #C7898C",
|
||||||
|
"h. c #DE8488",
|
||||||
|
"j. c #F1B8BB",
|
||||||
|
"k. c #F5BABD",
|
||||||
|
"l. c #EDC6C8",
|
||||||
|
"z. c #F3CACC",
|
||||||
|
"x. c #F6CBCD",
|
||||||
|
"c. c #F6CFD2",
|
||||||
|
"v. c #EFD5D6",
|
||||||
|
"b. c #EFDDDD",
|
||||||
|
"n. c #EFDDDE",
|
||||||
|
"m. c #F8D1D3",
|
||||||
|
"M. c #F0D8D9",
|
||||||
|
"N. c #F2DEDF",
|
||||||
|
"B. c #F3DEE0",
|
||||||
|
"V. c #FAE0E1",
|
||||||
|
"C. c #FBE4E5",
|
||||||
|
"Z. c #F4E8E8",
|
||||||
|
"A. c #F4E8E9",
|
||||||
|
"S. c #F7EEEE",
|
||||||
|
"D. c #FBF4F4",
|
||||||
|
"F. c #FEFEFE",
|
||||||
|
"G. c gray100",
|
||||||
|
"H. c None",
|
||||||
|
/* pixels */
|
||||||
|
"H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.",
|
||||||
|
"H.H.H.k _ [ } { } } { } | { | | { | [ _ k H.H.H.",
|
||||||
|
"H.H.i i.d.3.<.<.<.<.<.<.<.<.<.<.<.<.,.:.&.0 H.H.",
|
||||||
|
"H.H.+.e.*.! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! Z H.H.",
|
||||||
|
"H.H.0.=.Q Q Q W Q Q W Q W Q Q W Q Q W Q Q L $ H.",
|
||||||
|
"H.H.u.E R R R R R R R R R R R R R R R R R K @ H.",
|
||||||
|
"H.H.9.T T T T T T T T T T T T T T T T T T G + H.",
|
||||||
|
"H.H.8.Y Y Y Y U Y w.q.Y Y >.p.Y U Y Y U Y A + H.",
|
||||||
|
"H.H.7.P P P P P 2.V.z.1.;.k.C.a.P P P P P V + H.",
|
||||||
|
"H.H.6.J J J J -.x.F.F.B.m.G.G.v.o.H J J J N + H.",
|
||||||
|
"H.H.5.F F F D F s.N.G.G.G.G.S.( , Z F F S m + H.",
|
||||||
|
"H.H.4.V V V V V V f.D.G.G.G.t.; n V V V V x + H.",
|
||||||
|
"H.H.%.M M M M M ` c.G.G.G.G.n.@.B M M M M z + H.",
|
||||||
|
"H.H.$.v c b b I j.G.G.A.b.F.G.l.) x b x b g + H.",
|
||||||
|
"H.H.#.z z z z C h.F.Z./ ^ M.G.g.> j z z z d + H.",
|
||||||
|
"H.H.O.f f f f f f y.~ & f ] r.% 9 f f f f y + H.",
|
||||||
|
"H.H.X.p s s s s p u : e s a 7 7 a s s a s r + H.",
|
||||||
|
"H.H...t t t t t t t t t t t t t t t t t t w + H.",
|
||||||
|
"H.H. .q q q q q q q q q q q q q q q q q q 5 O H.",
|
||||||
|
"H.H.' 8 5 5 5 5 5 5 5 5 5 4 5 5 4 5 5 4 5 1 X H.",
|
||||||
|
"H.H.l h 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 = H.H.",
|
||||||
|
"H.H.H.6 < 2 2 2 2 2 2 2 2 2 2 2 2 2 2 - * H.H.",
|
||||||
|
"H.H.H.H.H.# + + + + + + + + + + + + o . H.H.H.H.",
|
||||||
|
"H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H."
|
||||||
|
};
|
|
@ -0,0 +1,93 @@
|
||||||
|
/* XPM */
|
||||||
|
static const char *exec_xpm[] = {
|
||||||
|
/* columns rows colors chars-per-pixel */
|
||||||
|
"32 32 55 1",
|
||||||
|
" c #1677A6",
|
||||||
|
". c #077AB4",
|
||||||
|
"X c #087AB4",
|
||||||
|
"o c #087BB4",
|
||||||
|
"O c #097BB4",
|
||||||
|
"+ c #087BB5",
|
||||||
|
"@ c #0A7CB5",
|
||||||
|
"# c #0F7EB5",
|
||||||
|
"$ c #0E7EB6",
|
||||||
|
"% c #1280B6",
|
||||||
|
"& c #1481B6",
|
||||||
|
"* c #1681B7",
|
||||||
|
"= c #1682B7",
|
||||||
|
"- c #1B82B6",
|
||||||
|
"; c #1782B8",
|
||||||
|
": c #1783B8",
|
||||||
|
"> c #178BD1",
|
||||||
|
", c #1B8ED2",
|
||||||
|
"< c #1C8ED2",
|
||||||
|
"1 c #399ED9",
|
||||||
|
"2 c #3EA0DA",
|
||||||
|
"3 c #40A1DA",
|
||||||
|
"4 c #51A9E1",
|
||||||
|
"5 c #54ABE1",
|
||||||
|
"6 c #98CDEC",
|
||||||
|
"7 c #9ACEEC",
|
||||||
|
"8 c #9BCFEE",
|
||||||
|
"9 c #A9D6F1",
|
||||||
|
"0 c #B8DDF5",
|
||||||
|
"q c #D5D5D5",
|
||||||
|
"w c #D4D5D6",
|
||||||
|
"e c #D5D6D6",
|
||||||
|
"r c #DBDBDA",
|
||||||
|
"t c #DADCDC",
|
||||||
|
"y c #DFDFDF",
|
||||||
|
"u c #DFE0E1",
|
||||||
|
"i c #C1E1F8",
|
||||||
|
"p c #E3E3E2",
|
||||||
|
"a c #E2E4E4",
|
||||||
|
"s c #E7E6E7",
|
||||||
|
"d c #E6E7E8",
|
||||||
|
"f c #EAEBEB",
|
||||||
|
"g c #ECEBEA",
|
||||||
|
"h c #EEEFEF",
|
||||||
|
"j c #F0EFEE",
|
||||||
|
"k c #F2F2F3",
|
||||||
|
"l c #F4F3F3",
|
||||||
|
"z c #F5F6F6",
|
||||||
|
"x c #F8F7F6",
|
||||||
|
"c c #F9F9FA",
|
||||||
|
"v c #FCFAFB",
|
||||||
|
"b c #FDFDFD",
|
||||||
|
"n c #FFFFFE",
|
||||||
|
"m c gray100",
|
||||||
|
"M c None",
|
||||||
|
/* pixels */
|
||||||
|
"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM",
|
||||||
|
"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM",
|
||||||
|
"M-:=************************=:-M",
|
||||||
|
"M;8677777777777777777777777768;M",
|
||||||
|
"M&9>,<<<<<<<<<<<<<<<<<<<<<<,>9&M",
|
||||||
|
"M%0123333333333333333333333210%M",
|
||||||
|
"M#i45555555555555555555555554i#M",
|
||||||
|
"M@mmmmmmmmmmmmmmmmmmmmmmmmmmmm@M",
|
||||||
|
"M+mqweeeeeeeeeeeeeeeeeeeeeewqm+M",
|
||||||
|
"M+mrttttttttttttttttttttttttrm+M",
|
||||||
|
"MomyuuuuuuuuuuuuuuuuuuuuuuuuymoM",
|
||||||
|
"MompaaaaaaaaaaaaaaaaaaaaaaaapmoM",
|
||||||
|
"MomsddddddddddddddddddddddddsmoM",
|
||||||
|
"MomgffffffffffffffffffffffffgmoM",
|
||||||
|
"MXmjhhhhhhhhhhhhhhhhhhhhhhhhjmXM",
|
||||||
|
"M.mlkkkkkkkkkkkkkkkkkkkkkkkklm.M",
|
||||||
|
"M.mxzzzzzzzzzzzzzzzzzzzzzzzzxm.M",
|
||||||
|
"M.mvccccccccccccccccccccccccvm.M",
|
||||||
|
"M.mnbbbbbbbbbbbbbbbbbbbbbbbbnm.M",
|
||||||
|
"M.mmmmmmmmmmmmmmmmmmmmmmmmmmmm.M",
|
||||||
|
"M.mmmmmmmmmmmmmmmmmmmmmmmmmmmm.M",
|
||||||
|
"M.mmmmmmmmmmmmmmmmmmmmmmmmmmmm.M",
|
||||||
|
"M.mmmmmmmmmmmmmmmmmmmmmmmmmmmm.M",
|
||||||
|
"M.mmmmmmmmmmmmmmmmmmmmmmmmmmmm.M",
|
||||||
|
"M.mmmmmmmmmmmmmmmmmmmmmmmmmmmm.M",
|
||||||
|
"M.mmmmmmmmmmmmmmmmmmmmmmmmmmmm.M",
|
||||||
|
"MOmmmmmmmmmmmmmmmmmmmmmmmmmmmmOM",
|
||||||
|
"M$mmmmmmmmmmmmmmmmmmmmmmmmmmmm$M",
|
||||||
|
"M $O........................O$ M",
|
||||||
|
"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM",
|
||||||
|
"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM",
|
||||||
|
"MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM"
|
||||||
|
};
|
|
@ -0,0 +1,196 @@
|
||||||
|
/* XPM */
|
||||||
|
static const char *home_xpm[] = {
|
||||||
|
/* columns rows colors chars-per-pixel */
|
||||||
|
"48 48 142 2",
|
||||||
|
" c #2D2F31",
|
||||||
|
". c #2F3233",
|
||||||
|
"X c #313436",
|
||||||
|
"o c #3A3F42",
|
||||||
|
"O c #3E4144",
|
||||||
|
"+ c #3F4648",
|
||||||
|
"@ c #1C4365",
|
||||||
|
"# c #355C7C",
|
||||||
|
"$ c #414546",
|
||||||
|
"% c #434748",
|
||||||
|
"& c #44494C",
|
||||||
|
"* c #4C5355",
|
||||||
|
"= c #4F5658",
|
||||||
|
"- c #545555",
|
||||||
|
"; c #505759",
|
||||||
|
": c #525A5C",
|
||||||
|
"> c #5C5E5E",
|
||||||
|
", c #5C6062",
|
||||||
|
"< c #646565",
|
||||||
|
"1 c #6A6B6B",
|
||||||
|
"2 c #6E6F70",
|
||||||
|
"3 c #6F7171",
|
||||||
|
"4 c #707171",
|
||||||
|
"5 c #7A7A7A",
|
||||||
|
"6 c #1B4E82",
|
||||||
|
"7 c #1E5085",
|
||||||
|
"8 c #215286",
|
||||||
|
"9 c #2D588E",
|
||||||
|
"0 c #315D95",
|
||||||
|
"q c #376697",
|
||||||
|
"w c #35629A",
|
||||||
|
"e c #38659F",
|
||||||
|
"r c #3866A0",
|
||||||
|
"t c #2464B9",
|
||||||
|
"y c #2E69BA",
|
||||||
|
"u c #406E98",
|
||||||
|
"i c #4A76A5",
|
||||||
|
"p c #4F7CAB",
|
||||||
|
"a c #2D6AC9",
|
||||||
|
"s c #306AC1",
|
||||||
|
"d c #3367CC",
|
||||||
|
"f c #316DCE",
|
||||||
|
"g c #356DD3",
|
||||||
|
"h c #3472D4",
|
||||||
|
"j c #3378D7",
|
||||||
|
"k c #3E79D2",
|
||||||
|
"l c #457DD3",
|
||||||
|
"z c #7F8080",
|
||||||
|
"x c #5382B2",
|
||||||
|
"c c #5686B8",
|
||||||
|
"v c #598ABD",
|
||||||
|
"b c #2E84DB",
|
||||||
|
"n c #2B8DDF",
|
||||||
|
"m c #3186DC",
|
||||||
|
"M c #3288DC",
|
||||||
|
"N c #269AE4",
|
||||||
|
"B c #1DB5EE",
|
||||||
|
"V c #23A2E7",
|
||||||
|
"C c #21A7E8",
|
||||||
|
"Z c #20A9EA",
|
||||||
|
"A c #32AAE7",
|
||||||
|
"S c #26B8EE",
|
||||||
|
"D c #2BBDEF",
|
||||||
|
"F c #3DB1E9",
|
||||||
|
"G c #35BBED",
|
||||||
|
"H c #3BBEEE",
|
||||||
|
"J c #5E94CD",
|
||||||
|
"K c #5085D5",
|
||||||
|
"L c #4493DF",
|
||||||
|
"P c #559ADF",
|
||||||
|
"I c #6492D7",
|
||||||
|
"U c #6DA4DF",
|
||||||
|
"Y c #7BA3D0",
|
||||||
|
"T c #7CA8D3",
|
||||||
|
"R c #7CA2D9",
|
||||||
|
"E c #4E9DE0",
|
||||||
|
"W c #4DB9EA",
|
||||||
|
"Q c #54BBEA",
|
||||||
|
"! c #61A7E2",
|
||||||
|
"~ c #64AEE1",
|
||||||
|
"^ c #35C0EF",
|
||||||
|
"/ c #43C4EE",
|
||||||
|
"( c #4DC5EE",
|
||||||
|
") c #57C9EE",
|
||||||
|
"_ c #5CC9EE",
|
||||||
|
"` c #63C2EA",
|
||||||
|
"' c #65CEEF",
|
||||||
|
"] c #6EC8EB",
|
||||||
|
"[ c #79C6E9",
|
||||||
|
"{ c #848586",
|
||||||
|
"} c #878989",
|
||||||
|
"| c #8A8B8B",
|
||||||
|
" . c #8C8F90",
|
||||||
|
".. c #8F9090",
|
||||||
|
"X. c #939494",
|
||||||
|
"o. c #9C9D9D",
|
||||||
|
"O. c #9FA0A0",
|
||||||
|
"+. c #A2A3A3",
|
||||||
|
"@. c #ABACAC",
|
||||||
|
"#. c #AFB0B0",
|
||||||
|
"$. c #B0B1B1",
|
||||||
|
"%. c #BBBDBD",
|
||||||
|
"&. c #8AACD0",
|
||||||
|
"*. c #83ABDC",
|
||||||
|
"=. c #92B1DA",
|
||||||
|
"-. c #80B7E4",
|
||||||
|
";. c #85BFE4",
|
||||||
|
":. c #9ABEE0",
|
||||||
|
">. c #BFC0C0",
|
||||||
|
",. c #BBCFDE",
|
||||||
|
"<. c #86CFEB",
|
||||||
|
"1. c #9FC4E9",
|
||||||
|
"2. c #82D5ED",
|
||||||
|
"3. c #89D8EE",
|
||||||
|
"4. c #A4CAE6",
|
||||||
|
"5. c #A4D5E9",
|
||||||
|
"6. c #AEDBEA",
|
||||||
|
"7. c #AEE0EC",
|
||||||
|
"8. c #B3E2EC",
|
||||||
|
"9. c #C4C6C6",
|
||||||
|
"0. c #C7C9C9",
|
||||||
|
"q. c #CBCCCC",
|
||||||
|
"w. c #CFD4D8",
|
||||||
|
"e. c #D4D5D5",
|
||||||
|
"r. c #D6D8DB",
|
||||||
|
"t. c #DADBDB",
|
||||||
|
"y. c #C3D6E0",
|
||||||
|
"u. c #C6D9E3",
|
||||||
|
"i. c #C8DAE2",
|
||||||
|
"p. c #D3DDE4",
|
||||||
|
"a. c #D3DFE8",
|
||||||
|
"s. c #CBE1E8",
|
||||||
|
"d. c #D5E2EA",
|
||||||
|
"f. c #D5E9EA",
|
||||||
|
"g. c #D8EAEB",
|
||||||
|
"h. c #E7EAEE",
|
||||||
|
"j. c #EAEBEB",
|
||||||
|
"k. c #E9EDF1",
|
||||||
|
"l. c #EEF0F3",
|
||||||
|
"z. c #F4F4F4",
|
||||||
|
"x. c #FBFBFB",
|
||||||
|
"c. c None",
|
||||||
|
/* pixels */
|
||||||
|
"c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.",
|
||||||
|
"c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.",
|
||||||
|
"c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.+.o.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.",
|
||||||
|
"c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.X.@.@.X.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.",
|
||||||
|
"c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c...o.X.X.o...c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.",
|
||||||
|
"c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c...o.| 3 4 | o...c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.",
|
||||||
|
"c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c...o.} 1 - - 1 } o...c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.",
|
||||||
|
"c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c...o.} 1 - : = - 1 } o...c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.",
|
||||||
|
"c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c...o.} 1 - ; $ O * - 1 } o.X.+.@.@.@.@.@.@.@.@.@.@.c.c.c.c.c.c.",
|
||||||
|
"c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c...o.} 1 - ; % 5 5 $ * - 1 } o.| X.o.o.o.o.o.o.o.o.o.c.c.c.c.c.c.",
|
||||||
|
"c.c.c.c.c.c.c.c.c.c.c.c.c.c.c...o.| 1 - ; % 5 | | 5 $ * - 1 | o.| { | ..X.X.X.X.X.X.c.c.c.c.c.c.",
|
||||||
|
"c.c.c.c.c.c.c.c.c.c.c.c.c.c.| o.| 1 - ; $ 5 X.+.+.X.5 $ * - 1 | o.} > 3 } .. .| } { c.c.c.c.c.c.",
|
||||||
|
"c.c.c.c.c.c.c.c.c.c.c.c.c...o.} 1 - ; % 5 X.$.e.e.$.X.5 $ = - 1 } o.| 5 #.0.q.q.%.c.c.c.c.c.c.c.",
|
||||||
|
"c.c.c.c.c.c.c.c.c.c.c.c...o.} 1 - ; % 5 X.$.t.z.z.t.$.X.5 % = - 1 } o.| ..9.e.e.0.c.c.c.c.c.c.c.",
|
||||||
|
"c.c.c.c.c.c.c.c.c.c.c.| o.} 1 - ; $ 5 X.@.t.z.x.x.z.t.@.X.5 $ = - 1 } o.| o.0.e.0.c.c.c.c.c.c.c.",
|
||||||
|
"c.c.c.c.c.c.c.c.c.c...o.} 1 - ; % 5 X.$.t.z.x.x.x.x.z.t.$.X.5 % = - 1 } o.| O.0.9.c.c.c.c.c.c.c.",
|
||||||
|
"c.c.c.c.c.c.c.c.c...o.| 1 - ; % 5 X.$.t.z.x.x.x.x.x.x.z.t.$.X.5 % ; - 1 | o.| +.%.c.c.c.c.c.c.c.",
|
||||||
|
"c.c.c.c.c.c.c.c.| o.} 1 - ; $ 5 X.@.t.z.x.x.x.x.x.x.x.x.z.t.@.X.5 $ ; - 1 } o.| o.c.c.c.c.c.c.c.",
|
||||||
|
"c.c.c.c.c.c.c...o.} 1 - ; % 5 X.$.t.z.x.x.x.x.x.x.x.x.x.x.z.t.$.X.5 % ; - 1 } o.| c.c.c.c.c.c.c.",
|
||||||
|
"c.c.c.c.c.c...o.| 1 - ; % 5 X.$.t.z.x.x.x.x.x.x.x.x.x.x.x.x.z.t.$.X.5 % ; - 1 | o...c.c.c.c.c.c.",
|
||||||
|
"c.c.c.c.c...o.} 1 - ; $ 5 X.@.t.z.x.x.x.x.x.x.x.x.x.x.x.x.x.x.z.t.@.X.5 $ ; - 1 } o...c.c.c.c.c.",
|
||||||
|
"c.c.c.c...o.} 1 - ; % 5 X.$.t.z.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.z.t.$.X.5 % ; - 1 } o...c.c.c.c.",
|
||||||
|
"c.c.c...o.| 1 - ; % 5 X.@.t.z.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.z.t.@.X.5 % ; - 1 | o...c.c.c.",
|
||||||
|
"c.c.{ o.} 1 - ; $ 5 X.@.t.z.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.z.t.@.X.5 $ ; - 1 } o.{ c.c.",
|
||||||
|
"c.1 5 z 1 - ; $ 5 X.@.t.z.x.x.x.x.z.w.w.w.w.w.w.w.w.w.w.w.w.r.x.x.x.x.z.t.@.X.5 $ : - 1 z 5 1 c.",
|
||||||
|
"c.1 1 < - , + , X.@.r.z.x.x.x.x.x.w.@ 7 8 8 8 7 7 8 8 8 7 6 # k.x.x.x.x.z.r.@.X.- * : - < 1 1 c.",
|
||||||
|
"c.1 < - & * o 1 @.r.z.x.x.x.x.x.x.p.8 &.,.y.i.T J i.i.y.Y t u l.x.x.x.x.x.z.r.@.> O & % - < 1 c.",
|
||||||
|
"c.c.c.c.c.X X { r.z.x.x.x.x.x.x.x.p.9 =.u.d.f.;.~ g.f.s.*.a i l.x.x.x.x.x.x.z.e.2 . c.c.c.c.c.",
|
||||||
|
"c.c.c.c.c.c.c.%.z.x.x.x.x.x.x.x.x.a.0 R 4.6.8.] Q 8.7.5.U f p l.x.x.x.x.x.x.x.j.$.c.c.c.c.c.c.c.",
|
||||||
|
"c.c.c.c.c.c.c.0.z.z.z.z.z.z.z.z.z.d.w I -.<.3.) / 3.2.[ P f x l.z.z.z.z.z.z.z.z.>.c.c.c.c.c.c.c.",
|
||||||
|
"c.c.c.c.c.c.c.q.z.z.z.z.z.z.z.z.z.d.w K ! ` ' / ^ ' _ Q L f x l.z.z.z.z.z.z.z.z.9.c.c.c.c.c.c.c.",
|
||||||
|
"c.c.c.c.c.c.c.r.z.z.z.z.z.z.z.z.z.d.e l E W ( ^ D / H A M f c k.z.z.z.z.z.z.z.z.e.c.c.c.c.c.c.c.",
|
||||||
|
"c.c.c.c.c.c.c.t.z.z.z.z.z.z.z.z.z.d.e k L F G S B B B V b f v k.z.z.z.z.z.z.z.z.t.c.c.c.c.c.c.c.",
|
||||||
|
"c.c.c.c.c.c.c.t.z.z.z.z.z.z.z.z.z.d.r h m N C Z Z Z C N b f v k.z.z.z.z.z.z.z.z.t.c.c.c.c.c.c.c.",
|
||||||
|
"c.c.c.c.c.c.c.t.z.z.z.z.z.z.z.z.z.d.r f j b n n n n n b j f v k.z.z.z.z.z.z.z.z.t.c.c.c.c.c.c.c.",
|
||||||
|
"c.c.c.c.c.c.c.t.j.j.j.j.j.j.j.j.j.d.e d g h h h h h h g g d v h.j.j.j.j.j.j.j.j.t.c.c.c.c.c.c.c.",
|
||||||
|
"c.c.c.c.c.c.c.t.j.j.j.j.j.j.j.j.j.a.q y s s s s s s s s s y v h.j.j.j.j.j.j.j.j.t.c.c.c.c.c.c.c.",
|
||||||
|
"c.c.c.c.c.c.c.t.j.j.j.j.j.j.j.j.j.a.:.1.1.1.1.1.1.1.1.1.1.1.:.h.j.j.j.j.j.j.j.j.t.c.c.c.c.c.c.c.",
|
||||||
|
"c.c.c.c.c.c.c.t.j.j.j.j.j.j.j.j.j.j.k.k.k.k.k.k.k.k.k.k.k.k.k.j.j.j.j.j.j.j.j.j.t.c.c.c.c.c.c.c.",
|
||||||
|
"c.c.c.c.c.c.c.t.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.t.c.c.c.c.c.c.c.",
|
||||||
|
"c.c.c.c.c.c.c.t.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.t.c.c.c.c.c.c.c.",
|
||||||
|
"c.c.c.c.c.c.c.r.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.e.c.c.c.c.c.c.c.",
|
||||||
|
"c.c.c.c.c.c.c.e.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.9.c.c.c.c.c.c.c.",
|
||||||
|
"c.c.c.c.c.c.c.q.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.%.c.c.c.c.c.c.c.",
|
||||||
|
"c.c.c.c.c.c.c.X.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.5 c.c.c.c.c.c.c.",
|
||||||
|
"c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.",
|
||||||
|
"c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.",
|
||||||
|
"c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c."
|
||||||
|
};
|
|
@ -0,0 +1,224 @@
|
||||||
|
/* XPM */
|
||||||
|
static const char *home_gray_xpm[] = {
|
||||||
|
/* columns rows colors chars-per-pixel */
|
||||||
|
"48 48 170 2",
|
||||||
|
" c gray18",
|
||||||
|
". c #313131",
|
||||||
|
"X c #323232",
|
||||||
|
"o c #343434",
|
||||||
|
"O c gray23",
|
||||||
|
"+ c gray24",
|
||||||
|
"@ c gray25",
|
||||||
|
"# c gray26",
|
||||||
|
"$ c #434343",
|
||||||
|
"% c #444444",
|
||||||
|
"& c gray27",
|
||||||
|
"* c #464646",
|
||||||
|
"= c gray28",
|
||||||
|
"- c #484848",
|
||||||
|
"; c #494949",
|
||||||
|
": c gray30",
|
||||||
|
"> c #4E4E4E",
|
||||||
|
", c #505050",
|
||||||
|
"< c #515151",
|
||||||
|
"1 c gray32",
|
||||||
|
"2 c #535353",
|
||||||
|
"3 c gray33",
|
||||||
|
"4 c #555555",
|
||||||
|
"5 c #565656",
|
||||||
|
"6 c gray34",
|
||||||
|
"7 c #585858",
|
||||||
|
"8 c gray35",
|
||||||
|
"9 c #5A5A5A",
|
||||||
|
"0 c gray36",
|
||||||
|
"q c #5D5D5D",
|
||||||
|
"w c gray37",
|
||||||
|
"e c #5F5F5F",
|
||||||
|
"r c #606060",
|
||||||
|
"t c gray38",
|
||||||
|
"y c #626262",
|
||||||
|
"u c gray39",
|
||||||
|
"i c #646464",
|
||||||
|
"p c #656565",
|
||||||
|
"a c gray40",
|
||||||
|
"s c #676767",
|
||||||
|
"d c #686868",
|
||||||
|
"f c DimGray",
|
||||||
|
"g c #6A6A6A",
|
||||||
|
"h c gray42",
|
||||||
|
"j c #6C6C6C",
|
||||||
|
"k c gray43",
|
||||||
|
"l c gray44",
|
||||||
|
"z c #717171",
|
||||||
|
"x c #727272",
|
||||||
|
"c c gray45",
|
||||||
|
"v c #747474",
|
||||||
|
"b c gray46",
|
||||||
|
"n c #767676",
|
||||||
|
"m c #777777",
|
||||||
|
"M c gray47",
|
||||||
|
"N c #797979",
|
||||||
|
"B c gray48",
|
||||||
|
"V c #7B7B7B",
|
||||||
|
"C c #7C7C7C",
|
||||||
|
"Z c gray49",
|
||||||
|
"A c #7E7E7E",
|
||||||
|
"S c #7F7F7F",
|
||||||
|
"D c #808080",
|
||||||
|
"F c #818181",
|
||||||
|
"G c gray51",
|
||||||
|
"H c #838383",
|
||||||
|
"J c #848484",
|
||||||
|
"K c gray52",
|
||||||
|
"L c #868686",
|
||||||
|
"P c gray53",
|
||||||
|
"I c #888888",
|
||||||
|
"U c #898989",
|
||||||
|
"Y c gray54",
|
||||||
|
"T c #8B8B8B",
|
||||||
|
"R c gray55",
|
||||||
|
"E c #8D8D8D",
|
||||||
|
"W c #8E8E8E",
|
||||||
|
"Q c gray56",
|
||||||
|
"! c #909090",
|
||||||
|
"~ c gray57",
|
||||||
|
"^ c #929292",
|
||||||
|
"/ c #939393",
|
||||||
|
"( c gray58",
|
||||||
|
") c #959595",
|
||||||
|
"_ c #979797",
|
||||||
|
"` c #989898",
|
||||||
|
"' c gray60",
|
||||||
|
"] c #9A9A9A",
|
||||||
|
"[ c #9B9B9B",
|
||||||
|
"{ c gray61",
|
||||||
|
"} c #9D9D9D",
|
||||||
|
"| c gray62",
|
||||||
|
" . c #9F9F9F",
|
||||||
|
".. c #A0A0A0",
|
||||||
|
"X. c gray63",
|
||||||
|
"o. c #A2A2A2",
|
||||||
|
"O. c gray64",
|
||||||
|
"+. c #A4A4A4",
|
||||||
|
"@. c #A5A5A5",
|
||||||
|
"#. c gray66",
|
||||||
|
"$. c #A9A9A9",
|
||||||
|
"%. c #AAAAAA",
|
||||||
|
"&. c gray67",
|
||||||
|
"*. c #ACACAC",
|
||||||
|
"=. c gray68",
|
||||||
|
"-. c #AEAEAE",
|
||||||
|
";. c #AFAFAF",
|
||||||
|
":. c gray69",
|
||||||
|
">. c #B1B1B1",
|
||||||
|
",. c #B2B2B2",
|
||||||
|
"<. c #B6B6B6",
|
||||||
|
"1. c #B7B7B7",
|
||||||
|
"2. c #B9B9B9",
|
||||||
|
"3. c #BCBCBC",
|
||||||
|
"4. c gray74",
|
||||||
|
"5. c gray",
|
||||||
|
"6. c gray75",
|
||||||
|
"7. c #C1C1C1",
|
||||||
|
"8. c gray76",
|
||||||
|
"9. c #C3C3C3",
|
||||||
|
"0. c gray77",
|
||||||
|
"q. c #C5C5C5",
|
||||||
|
"w. c #C6C6C6",
|
||||||
|
"e. c gray78",
|
||||||
|
"r. c #C8C8C8",
|
||||||
|
"t. c gray79",
|
||||||
|
"y. c #CACACA",
|
||||||
|
"u. c gray80",
|
||||||
|
"i. c #CDCDCD",
|
||||||
|
"p. c gray81",
|
||||||
|
"a. c #D0D0D0",
|
||||||
|
"s. c #D2D2D2",
|
||||||
|
"d. c LightGray",
|
||||||
|
"f. c gray83",
|
||||||
|
"g. c #D5D5D5",
|
||||||
|
"h. c gray84",
|
||||||
|
"j. c #D7D7D7",
|
||||||
|
"k. c #D8D8D8",
|
||||||
|
"l. c gray85",
|
||||||
|
"z. c #DADADA",
|
||||||
|
"x. c gray86",
|
||||||
|
"c. c gainsboro",
|
||||||
|
"v. c #DDDDDD",
|
||||||
|
"b. c gray87",
|
||||||
|
"n. c #DFDFDF",
|
||||||
|
"m. c #E2E2E2",
|
||||||
|
"M. c #E4E4E4",
|
||||||
|
"N. c gray91",
|
||||||
|
"B. c #E9E9E9",
|
||||||
|
"V. c #EAEAEA",
|
||||||
|
"C. c gray92",
|
||||||
|
"Z. c #ECECEC",
|
||||||
|
"A. c gray93",
|
||||||
|
"S. c #EEEEEE",
|
||||||
|
"D. c #EFEFEF",
|
||||||
|
"F. c gray94",
|
||||||
|
"G. c #F1F1F1",
|
||||||
|
"H. c gray95",
|
||||||
|
"J. c #F3F3F3",
|
||||||
|
"K. c #F4F4F4",
|
||||||
|
"L. c gray96",
|
||||||
|
"P. c #F6F6F6",
|
||||||
|
"I. c gray97",
|
||||||
|
"U. c #F8F8F8",
|
||||||
|
"Y. c #F9F9F9",
|
||||||
|
"T. c gray98",
|
||||||
|
"R. c #FBFBFB",
|
||||||
|
"E. c gray99",
|
||||||
|
"W. c #FDFDFD",
|
||||||
|
"Q. c None",
|
||||||
|
/* pixels */
|
||||||
|
"Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.",
|
||||||
|
"Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.",
|
||||||
|
"Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.X.{ Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.",
|
||||||
|
"Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.( *.*.^ Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.",
|
||||||
|
"Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q | / ( | Q Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.",
|
||||||
|
"Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q } U l l U } Q Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.",
|
||||||
|
"Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q } I f 4 3 f I } Q Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.",
|
||||||
|
"Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q } U f 2 7 1 2 f U } Q Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.",
|
||||||
|
"Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q } U g 3 4 # @ , 3 g U } ! ..%.&.&.&.&.&.&.&.&.&.Q.Q.Q.Q.Q.Q.",
|
||||||
|
"Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q } I f 3 3 & N N $ , 3 f I } W ~ ' ] [ ] ] [ ] ] ] Q.Q.Q.Q.Q.Q.",
|
||||||
|
"Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q { U f 3 4 & N Q Q N % < 3 f U { E K T Q ^ ^ ^ ^ ^ ^ Q.Q.Q.Q.Q.Q.",
|
||||||
|
"Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W } U g 3 4 $ B / +.+./ B # < 2 g U } P q z I Q W E I J Q.Q.Q.Q.Q.Q.",
|
||||||
|
"Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q } I f 3 4 & B ) :.g.g.:.) B % 1 3 f I } U C ;.t.i.y.5.Q.Q.Q.Q.Q.Q.Q.",
|
||||||
|
"Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q } U f 3 4 & N ( :.z.K.K.z.:.( N & 2 3 f U } Y Q 8.f.f.r.Q.Q.Q.Q.Q.Q.Q.",
|
||||||
|
"Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.W } U g 3 4 $ B ( -.z.L.E.E.L.z.-.( B $ 3 3 g U } T ] e.d.r.Q.Q.Q.Q.Q.Q.Q.",
|
||||||
|
"Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q } P f 3 3 & B ) :.z.P.E.W.W.E.P.z.:.) B & 3 3 f P } E .r.w.Q.Q.Q.Q.Q.Q.Q.",
|
||||||
|
"Q.Q.Q.Q.Q.Q.Q.Q.Q.Q { U f 4 4 & N ( :.z.L.E.W.W.W.W.E.L.z.:.( N * 4 4 f U { W +.4.Q.Q.Q.Q.Q.Q.Q.",
|
||||||
|
"Q.Q.Q.Q.Q.Q.Q.Q.W } U g 3 4 $ B ( -.z.L.E.W.W.W.W.E.W.E.L.z.-.( B % 4 3 g U } W | Q.Q.Q.Q.Q.Q.Q.",
|
||||||
|
"Q.Q.Q.Q.Q.Q.Q.Q } P f 3 4 & B ) :.z.P.E.W.W.W.W.W.W.W.W.E.P.z.:.) B * 4 3 f P } E Q.Q.Q.Q.Q.Q.Q.",
|
||||||
|
"Q.Q.Q.Q.Q.Q.Q { U f 3 4 & N ( :.z.L.E.W.W.W.W.W.W.W.W.W.W.E.L.z.:.( N * 4 4 f U { Q Q.Q.Q.Q.Q.Q.",
|
||||||
|
"Q.Q.Q.Q.Q.Q } U g 3 4 $ B ( -.z.L.E.W.W.W.W.W.W.W.E.W.W.E.W.E.L.z.-.( B % 4 3 g U } Q Q.Q.Q.Q.Q.",
|
||||||
|
"Q.Q.Q.Q.Q } I f 3 3 & B ( :.z.L.R.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.L.z.:.( B * 4 3 f P } Q Q.Q.Q.Q.",
|
||||||
|
"Q.Q.Q.Q { U f 3 4 & N / ;.l.K.R.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.R.K.l.;./ N * 5 3 f U { Q Q.Q.Q.",
|
||||||
|
"Q.Q.K ] I h 3 3 $ B / =.l.K.R.R.E.R.R.E.R.R.E.R.E.E.E.E.E.E.E.E.E.R.K.l.=./ B % 4 3 h I ] K Q.Q.",
|
||||||
|
"Q.k V S f 3 5 % B / ;.l.K.R.R.R.R.H.s.s.s.s.s.s.s.s.s.s.s.s.j.U.R.R.R.K.l.;./ N % 6 3 f S V k Q.",
|
||||||
|
"Q.h h i 3 e % e / -.k.J.T.R.R.R.R.d.O = - ; ; = = ; ; ; = % 2 S.R.R.T.T.J.k.-.^ 3 : 9 2 i h h Q.",
|
||||||
|
"Q.g i 1 ; > + g *.k.H.Y.T.T.T.T.T.j.; @.y.s.g. .Y g.f.a.{ 9 p D.T.T.T.T.Y.H.k.*.0 @ * & 1 i g Q.",
|
||||||
|
"Q.Q.Q.Q.Q.o X H j.H.Y.Y.Y.Y.Y.Y.Y.z.< *.f.n.M.>.} M.m.x.+.y k F.Y.Y.Y.Y.Y.Y.H.h.k . Q.Q.Q.Q.Q.",
|
||||||
|
"Q.Q.Q.Q.Q.Q.Q.2.F.U.U.U.U.U.U.U.U.c.5 { 7.p.g.>.O.g.s.r.] p c F.U.U.U.U.U.U.U.S.>.Q.Q.Q.Q.Q.Q.Q.",
|
||||||
|
"Q.Q.Q.Q.Q.Q.Q.w.K.I.I.I.I.I.I.I.I.v.8 R &.3.9.&...9.5.,.E s m D.I.I.I.I.I.I.I.G.6.Q.Q.Q.Q.Q.Q.Q.",
|
||||||
|
"Q.Q.Q.Q.Q.Q.Q.u.K.P.P.P.P.P.P.P.P.b.9 A ` %.,.o.[ >.*. .G s V D.P.P.P.P.P.P.P.H.q.Q.Q.Q.Q.Q.Q.Q.",
|
||||||
|
"Q.Q.Q.Q.Q.Q.Q.k.K.L.L.K.L.K.L.L.L.b.q n E | @.{ _ O.{ E m s Z S.K.L.K.K.L.L.L.J.d.Q.Q.Q.Q.Q.Q.Q.",
|
||||||
|
"Q.Q.Q.Q.Q.Q.Q.b.J.J.J.J.J.J.J.J.J.n.w z K ( ` ^ W W T H v s S S.J.J.J.J.J.J.J.J.x.Q.Q.Q.Q.Q.Q.Q.",
|
||||||
|
"Q.Q.Q.Q.Q.Q.Q.b.G.G.G.G.G.G.G.G.G.n.w g n D L P P P K A x p F A.G.G.G.G.G.G.G.G.c.Q.Q.Q.Q.Q.Q.Q.",
|
||||||
|
"Q.Q.Q.Q.Q.Q.Q.b.F.F.F.F.F.F.F.F.F.n.e p k b M N N N M v j i G Z.F.F.F.F.F.F.F.F.x.Q.Q.Q.Q.Q.Q.Q.",
|
||||||
|
"Q.Q.Q.Q.Q.Q.Q.v.S.S.S.S.S.S.S.S.S.b.e y s f g g g g g d a u G C.S.S.S.S.S.S.S.S.x.Q.Q.Q.Q.Q.Q.Q.",
|
||||||
|
"Q.Q.Q.Q.Q.Q.Q.c.A.A.A.A.A.A.A.A.A.c.q r t t y y y y y t t t D V.A.A.A.A.A.A.A.A.x.Q.Q.Q.Q.Q.Q.Q.",
|
||||||
|
"Q.Q.Q.Q.Q.Q.Q.c.Z.Z.Z.Z.Z.Z.Z.Z.Z.c.<.4.4.4.4.4.4.4.4.4.4.4.1.B.Z.Z.Z.Z.Z.Z.Z.Z.z.Q.Q.Q.Q.Q.Q.Q.",
|
||||||
|
"Q.Q.Q.Q.Q.Q.Q.c.C.C.C.C.C.C.C.C.C.Z.C.Z.C.C.Z.C.C.Z.C.C.Z.C.C.Z.C.C.C.C.C.C.C.C.z.Q.Q.Q.Q.Q.Q.Q.",
|
||||||
|
"Q.Q.Q.Q.Q.Q.Q.x.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.z.Q.Q.Q.Q.Q.Q.Q.",
|
||||||
|
"Q.Q.Q.Q.Q.Q.Q.z.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.l.Q.Q.Q.Q.Q.Q.Q.",
|
||||||
|
"Q.Q.Q.Q.Q.Q.Q.j.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.d.Q.Q.Q.Q.Q.Q.Q.",
|
||||||
|
"Q.Q.Q.Q.Q.Q.Q.a.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.0.Q.Q.Q.Q.Q.Q.Q.",
|
||||||
|
"Q.Q.Q.Q.Q.Q.Q.y.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.<.Q.Q.Q.Q.Q.Q.Q.",
|
||||||
|
"Q.Q.Q.Q.Q.Q.Q./ =.=.*.*.&.&.&.%.%.%.$.$.$.$.$.$.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.$.B Q.Q.Q.Q.Q.Q.Q.",
|
||||||
|
"Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.",
|
||||||
|
"Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.",
|
||||||
|
"Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q."
|
||||||
|
};
|
|
@ -0,0 +1,310 @@
|
||||||
|
/* XPM */
|
||||||
|
static const char *start_xpm[] = {
|
||||||
|
/* columns rows colors chars-per-pixel */
|
||||||
|
"48 48 256 2",
|
||||||
|
" c #542700",
|
||||||
|
". c #305810",
|
||||||
|
"X c #3C6C0A",
|
||||||
|
"o c #3B630A",
|
||||||
|
"O c #3E710B",
|
||||||
|
"+ c #3D6F39",
|
||||||
|
"@ c #3A6C21",
|
||||||
|
"# c #4A5306",
|
||||||
|
"$ c #41750C",
|
||||||
|
"% c #44780E",
|
||||||
|
"& c #4A7C12",
|
||||||
|
"* c #457916",
|
||||||
|
"= c #40713D",
|
||||||
|
"- c #417428",
|
||||||
|
"; c #7A0B42",
|
||||||
|
": c #542B56",
|
||||||
|
"> c #54315E",
|
||||||
|
", c #4B2E58",
|
||||||
|
"< c #65285B",
|
||||||
|
"1 c #563461",
|
||||||
|
"2 c #5B3464",
|
||||||
|
"3 c #5F3868",
|
||||||
|
"4 c #633B6B",
|
||||||
|
"5 c #663668",
|
||||||
|
"6 c #75376B",
|
||||||
|
"7 c #2F5C40",
|
||||||
|
"8 c #1D4374",
|
||||||
|
"9 c #3A6775",
|
||||||
|
"0 c #694271",
|
||||||
|
"q c #6C4E74",
|
||||||
|
"w c #754E7B",
|
||||||
|
"e c #79547D",
|
||||||
|
"r c #73557A",
|
||||||
|
"t c #65476E",
|
||||||
|
"y c #457265",
|
||||||
|
"u c #830105",
|
||||||
|
"i c #9F1E04",
|
||||||
|
"p c #960609",
|
||||||
|
"a c #A40303",
|
||||||
|
"s c #B73B1D",
|
||||||
|
"d c #990C32",
|
||||||
|
"f c #BD2F2F",
|
||||||
|
"g c #BA3837",
|
||||||
|
"h c #C12E2E",
|
||||||
|
"j c #C13030",
|
||||||
|
"k c #C83D3D",
|
||||||
|
"l c #C63A3A",
|
||||||
|
"z c #B55100",
|
||||||
|
"x c #BD5400",
|
||||||
|
"c c #B45E01",
|
||||||
|
"v c #A74700",
|
||||||
|
"b c #996104",
|
||||||
|
"n c #B57418",
|
||||||
|
"m c #BC690D",
|
||||||
|
"M c #BB4534",
|
||||||
|
"N c #847E22",
|
||||||
|
"B c #AD7C21",
|
||||||
|
"V c #C35301",
|
||||||
|
"C c #C65800",
|
||||||
|
"Z c #CC5C01",
|
||||||
|
"A c #CA580B",
|
||||||
|
"S c #D15F01",
|
||||||
|
"D c #C5541D",
|
||||||
|
"F c #CB6307",
|
||||||
|
"G c #D36305",
|
||||||
|
"H c #D6690E",
|
||||||
|
"J c #D96807",
|
||||||
|
"K c #DD751B",
|
||||||
|
"L c #E06B03",
|
||||||
|
"P c #EA770A",
|
||||||
|
"I c #F07D0E",
|
||||||
|
"U c #E77C19",
|
||||||
|
"Y c #C75C33",
|
||||||
|
"T c #8C0D4C",
|
||||||
|
"R c #900D4F",
|
||||||
|
"E c #950E52",
|
||||||
|
"W c #9B0E55",
|
||||||
|
"Q c #9C1256",
|
||||||
|
"! c #9F1158",
|
||||||
|
"~ c #8D1755",
|
||||||
|
"^ c #A80E5B",
|
||||||
|
"/ c #A2125B",
|
||||||
|
"( c #A4185A",
|
||||||
|
") c #B23A56",
|
||||||
|
"_ c #AA2B5C",
|
||||||
|
"` c #BB0B63",
|
||||||
|
"' c #B61866",
|
||||||
|
"] c #A91E63",
|
||||||
|
"[ c #89346C",
|
||||||
|
"{ c #833F71",
|
||||||
|
"} c #9F3771",
|
||||||
|
"| c #B8286D",
|
||||||
|
" . c #B23B60",
|
||||||
|
".. c #BE2A71",
|
||||||
|
"X. c #AB3871",
|
||||||
|
"o. c #BC3674",
|
||||||
|
"O. c #AC2366",
|
||||||
|
"+. c #C5146B",
|
||||||
|
"@. c #C7196D",
|
||||||
|
"#. c #C81A6F",
|
||||||
|
"$. c #C91D71",
|
||||||
|
"%. c #C20C66",
|
||||||
|
"&. c #CB2475",
|
||||||
|
"*. c #CE2C79",
|
||||||
|
"=. c #C42270",
|
||||||
|
"-. c #D02E7C",
|
||||||
|
";. c #CD357D",
|
||||||
|
":. c #C43778",
|
||||||
|
">. c #D1327E",
|
||||||
|
",. c #BC4A4E",
|
||||||
|
"<. c #BB4D60",
|
||||||
|
"1. c #AF447B",
|
||||||
|
"2. c #CC4646",
|
||||||
|
"3. c #CC4A4A",
|
||||||
|
"4. c #C64D4D",
|
||||||
|
"5. c #D04F4F",
|
||||||
|
"6. c #C15656",
|
||||||
|
"7. c #D25252",
|
||||||
|
"8. c #D65C5C",
|
||||||
|
"9. c #D85E5E",
|
||||||
|
"0. c #C2544C",
|
||||||
|
"q. c #C35F69",
|
||||||
|
"w. c #CB6362",
|
||||||
|
"e. c #C56364",
|
||||||
|
"r. c #DD6A6A",
|
||||||
|
"t. c #D76666",
|
||||||
|
"y. c #D87171",
|
||||||
|
"u. c #E17373",
|
||||||
|
"i. c #E47878",
|
||||||
|
"p. c #4F8019",
|
||||||
|
"a. c #4F8116",
|
||||||
|
"s. c #538419",
|
||||||
|
"d. c #5A881B",
|
||||||
|
"f. c #5C8C23",
|
||||||
|
"g. c #5A8722",
|
||||||
|
"h. c #6B8F2E",
|
||||||
|
"j. c #68942A",
|
||||||
|
"k. c #709B32",
|
||||||
|
"l. c #79A136",
|
||||||
|
"z. c #7BA541",
|
||||||
|
"x. c #809D3F",
|
||||||
|
"c. c #92993F",
|
||||||
|
"v. c #95882B",
|
||||||
|
"b. c #A2882D",
|
||||||
|
"n. c #81A739",
|
||||||
|
"m. c #85A93D",
|
||||||
|
"M. c #80A537",
|
||||||
|
"N. c #F5800D",
|
||||||
|
"B. c #F58414",
|
||||||
|
"V. c #F6891C",
|
||||||
|
"C. c #F68718",
|
||||||
|
"Z. c #E68123",
|
||||||
|
"A. c #F68D23",
|
||||||
|
"S. c #F7912A",
|
||||||
|
"D. c #F8942D",
|
||||||
|
"F. c #F79027",
|
||||||
|
"G. c #E78931",
|
||||||
|
"H. c #EF9338",
|
||||||
|
"J. c #F89631",
|
||||||
|
"K. c #F89835",
|
||||||
|
"L. c #F69839",
|
||||||
|
"P. c #F99C3B",
|
||||||
|
"I. c #F19133",
|
||||||
|
"U. c #86AB41",
|
||||||
|
"Y. c #8AAE44",
|
||||||
|
"T. c #8BAB4C",
|
||||||
|
"R. c #88A446",
|
||||||
|
"E. c #8DB047",
|
||||||
|
"W. c #8DB14A",
|
||||||
|
"Q. c #92B54D",
|
||||||
|
"!. c #93B452",
|
||||||
|
"~. c #97B952",
|
||||||
|
"^. c #99BB56",
|
||||||
|
"/. c #9DBE5A",
|
||||||
|
"(. c #96BA58",
|
||||||
|
"). c #EF9C4A",
|
||||||
|
"_. c #F99F40",
|
||||||
|
"`. c #FAA144",
|
||||||
|
"'. c #FAA54B",
|
||||||
|
"]. c #F6A047",
|
||||||
|
"[. c #FBAA53",
|
||||||
|
"{. c #FBAF5B",
|
||||||
|
"}. c #F4A451",
|
||||||
|
"|. c #FCB15E",
|
||||||
|
" X c #FCB463",
|
||||||
|
".X c #9FC05C",
|
||||||
|
"XX c #A1C15E",
|
||||||
|
"oX c #9DC060",
|
||||||
|
"OX c #A4C462",
|
||||||
|
"+X c #A8C867",
|
||||||
|
"@X c #ACCB6B",
|
||||||
|
"#X c #B0CF71",
|
||||||
|
"$X c #1F4985",
|
||||||
|
"%X c #234A86",
|
||||||
|
"&X c #244D89",
|
||||||
|
"*X c #294D87",
|
||||||
|
"=X c #3A669E",
|
||||||
|
"-X c #356184",
|
||||||
|
";X c #3969A6",
|
||||||
|
":X c #3765A0",
|
||||||
|
">X c #7C5681",
|
||||||
|
",X c #7D5B82",
|
||||||
|
"<X c #466F8D",
|
||||||
|
"1X c #51799E",
|
||||||
|
"2X c #4E7786",
|
||||||
|
"3X c #406BA2",
|
||||||
|
"4X c #4372AC",
|
||||||
|
"5X c #4B76A8",
|
||||||
|
"6X c #4E7BB2",
|
||||||
|
"7X c #507CB4",
|
||||||
|
"8X c #547CAC",
|
||||||
|
"9X c #D33780",
|
||||||
|
"0X c #D53B83",
|
||||||
|
"qX c #825D85",
|
||||||
|
"wX c #826285",
|
||||||
|
"eX c #86618A",
|
||||||
|
"rX c #8A658D",
|
||||||
|
"tX c #8E6991",
|
||||||
|
"yX c #926D94",
|
||||||
|
"uX c #977198",
|
||||||
|
"iX c #9A759B",
|
||||||
|
"pX c #9E799E",
|
||||||
|
"aX c #967097",
|
||||||
|
"sX c #A27DA2",
|
||||||
|
"dX c #CA4180",
|
||||||
|
"fX c #D74186",
|
||||||
|
"gX c #D94489",
|
||||||
|
"hX c #DB4B8D",
|
||||||
|
"jX c #D74889",
|
||||||
|
"kX c #D4528C",
|
||||||
|
"lX c #DD4F90",
|
||||||
|
"zX c #DF5391",
|
||||||
|
"xX c #DC5B93",
|
||||||
|
"cX c #E15A96",
|
||||||
|
"vX c #E25C97",
|
||||||
|
"bX c #E5629B",
|
||||||
|
"nX c #E8699F",
|
||||||
|
"mX c #E96CA1",
|
||||||
|
"MX c #5A86BA",
|
||||||
|
"NX c #5881B3",
|
||||||
|
"BX c #638DBD",
|
||||||
|
"VX c #668FC0",
|
||||||
|
"CX c #6690C1",
|
||||||
|
"ZX c #6E96C5",
|
||||||
|
"AX c #729AC7",
|
||||||
|
"SX c #729AC8",
|
||||||
|
"DX c #7DA3CE",
|
||||||
|
"FX c #A681A5",
|
||||||
|
"GX c #A882A7",
|
||||||
|
"HX c #AB85A9",
|
||||||
|
"JX c #AE88AC",
|
||||||
|
"KX c #B08AAE",
|
||||||
|
"LX c #B38EB0",
|
||||||
|
"PX c #B791B4",
|
||||||
|
"IX c #84A9D1",
|
||||||
|
"UX c None",
|
||||||
|
/* pixels */
|
||||||
|
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
|
||||||
|
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
|
||||||
|
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
|
||||||
|
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
|
||||||
|
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
|
||||||
|
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX3 2 UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
|
||||||
|
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX2 pXpX0 1 UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
|
||||||
|
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX, w PXLXJXrX4 > UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
|
||||||
|
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX3 FXLXKXJXHXsXe 2 UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
|
||||||
|
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX> qXKXJXHXGXFXsXsXyX0 > UXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
|
||||||
|
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXT E UXUXUXUXUX4 GXJXHXFXsXsXpXpXiX0 UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
|
||||||
|
"UXUXUXUXUXUXUXUXUXUXUXUXUXW | O.UXUXUXUX1 rXHXGXFXsXsXpXiXuXqX2 UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
|
||||||
|
"UXUXUXUXUXUXUXUXUXUXUXE ] kXmXxXQ UXUXUX0 GXFXsXsXpXiXiXuXyX4 UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
|
||||||
|
"UXUXUXUXUXUXUXUXUXR / :.cXbXbXnXo.T UX2 yXsXsXpXpXiXuXyXyXw > UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
|
||||||
|
"UXUXUXUXUXUXUXUXW | jXzXzXcXvXbXxXQ : w sXsXpXiXrXwXwXqXe > UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
|
||||||
|
"UXUXUXUXUXUXUXE ..fXgXhXhXzXcXvXvXX.5 uXpXiXiXuXwX*X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X$XUXUXUXUXUXUX",
|
||||||
|
"UXUXUXUXUXUXUXUX/ 9X0XfXgXhXlXzXkX{ >XpXiXuXyXyX,X*XDXIXIXIXIXIXIXIXIXIXIXIXIXIXDX&XUXUXUXUXUXUX",
|
||||||
|
"UXUXUXUXUXUXUXUXE | 9X0XfXgXhXhX1.4 uXuXaXyXyXtXe *XDXDXDXDXDXDXDXDXDXDXDXDXDXDXDX&XUXUXUXUXUXUX",
|
||||||
|
"UXUXUXUXUXUXUXUXUX! *.>.9X0XfXdX6 ,XuXyXyXtXrXrXr *XZXAXAXAXAXAXAXAXAXAXSXSXSXSXZX&XUXUXUXUXUXUX",
|
||||||
|
"UXUXUXUXUXUXUXUXUXT ' *.>.9X0Xo.[ 4 >XtXrXrXeXeXr &XBXCXCXCXCXCXVXBXBXCXCXCXCXCXBX&XUXUXUXUXUXUX",
|
||||||
|
"UXUXUXUXUXUXUXUXUXUXW =.*.-.>.;.:.X.6 4 >XeXqXqXq &XMXMXMXMXMXNX1X2X8XMXMXMXMXMXMX&XUXUXUXUXUXUX",
|
||||||
|
"UXUXUXUXUXUXUXUXUXUXUX^ &.&.*.>.>.;.o.} 5 0 e >Xt %X6X6X6X6X5Xy * * <X6X7X7X7X7X6X%XUXUXUXUXUXUX",
|
||||||
|
"UXUXUXUXUXUXUXUXUXUXUXE ' &.&.*.*.>.>.:.o.[ 2 0 1 %X4X4X3X9 - f.oXz.= =X4X4X4X4X4X%XUXUXUXUXUXUX",
|
||||||
|
"UXUXUXUXUXUXUXUXUXUXUXUX/ @.$.&.&.*.-.>.;.:.~ < , %X=X-X+ p.T.@X#X@Xp.9 :X;X;X;X;X%XUXUXUXUXUXUX",
|
||||||
|
"UXUXUXUXUXUXUXUXUXUXUXUXT ' +.#.$.&.&.*.>.;.( ; UX8 7 * l.OX+X@X@X@XW.@ 8 $X$X$X$X$XUXUXUXUXUXUX",
|
||||||
|
"UXUXUXUXUXUXUXa a a a a p W ` +.@.$.&.&.' ! d u o g.!..XXXOX+X+X@X@Xf.. UXUXUXUXUXUXUXUXUXUXUX",
|
||||||
|
"UXUXUXUXUXUXUXa u.i.i.i.y. .^ %.+.+.' / _ q.e.i Z c N T.^./.XXOXOX+X+X(.$ UXUXUXUXUXUXUXUXUXUXUX",
|
||||||
|
"UXUXUXUXUXUXUXa r.u.u.u.y.e.( ` ` ^ ( <.e.y.w.V ).).H n c.!.^..XXXOXOX+Xj.X UXUXUXUXUXUXUXUXUXUX",
|
||||||
|
"UXUXUXUXUXUXUXa t.r.r.r.r.w.) W Q ) 6.w.t.t.Y K X X{.G.F B R.!./.XXOXOX/.& UXUXUXUXUXUXUXUXUXUX",
|
||||||
|
"UXUXUXUXUXUXUXa 8.9.9.9.9.8.6.) ,.6.8.9.8.0.A }.|.{.[.[.].K F b.T.^./.XXOXl.O UXUXUXUXUXUXUXUXUX",
|
||||||
|
"UXUXUXUXUXUXUXa 5.7.7.7.7.7.4.,.4.7.7.7.4.D Z.{.{.[.[.'.'.`.I.H n R.^./..X/.s.UXUXUXUXUXUXUXUXUX",
|
||||||
|
"UXUXUXUXUXUXUXa 2.2.2.2.2.2.2.2.2.2.2.2.M G [.[.[.'.'.`._.P.L.H b.T.~.^.^./.U.$ UXUXUXUXUXUXUXUX",
|
||||||
|
"UXUXUXUXUXUXUXa l k k k k k k k k k k g A G.[.'.'.`.`.P.P.K.Z.m x.W.Q.~.~.^./.g.UXUXUXUXUXUXUXUX",
|
||||||
|
"UXUXUXUXUXUXUXa h j j j j j j j j j f s H '.'.'.`._.P.K.K.D.G v.U.E.W.Q.Q.~.^.W.% UXUXUXUXUXUXUX",
|
||||||
|
"UXUXUXUXUXUXUXa a a a a a a a a a a p V H.'.`.`.P.P.K.J.D.U b h.m.Y.Y.E.Q.Q.Q.~.j.X UXUXUXUXUXUX",
|
||||||
|
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXv K `.`.P.P.K.J.D.S.A.Z # & n.m.U.Y.Y.E.E.j.% UXUXUXUXUXUXUX",
|
||||||
|
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXZ L._.P.K.K.J.D.F.A.J z UX$ j.n.m.m.U.k.& X UXUXUXUXUXUXUXUX",
|
||||||
|
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXV U P.P.K.J.D.S.A.A.U Z UXUXUX& l.M.k.a.O UXUXUXUXUXUXUXUXUXUX",
|
||||||
|
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXG L.K.J.D.S.F.A.V.V.G UXUXUXUXO d.s.$ UXUXUXUXUXUXUXUXUXUXUXUX",
|
||||||
|
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXC Z.K.J.D.F.A.A.V.C.P C UXUXUXUXUX$ X UXUXUXUXUXUXUXUXUXUXUXUXUX",
|
||||||
|
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXx G U F.A.A.V.C.B.B.S UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
|
||||||
|
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXC G U V.C.B.N.J x UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
|
||||||
|
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXZ J I N.P Z UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
|
||||||
|
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXz Z L J z UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
|
||||||
|
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXV C UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
|
||||||
|
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
|
||||||
|
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX",
|
||||||
|
"UXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUXUX"
|
||||||
|
};
|
Loading…
Reference in New Issue