From 05c1be4afb665bff702f6d655fdb180e516f7285 Mon Sep 17 00:00:00 2001 From: idea4good Date: Thu, 4 Oct 2018 14:30:29 +0800 Subject: [PATCH] sync up with github --- README.md | 26 +- core/CMakeLists.txt | 4 - core/core.vcxproj | 366 ++++---- core/core.vcxproj.filters | 188 ++--- core/core.vcxproj.user | 4 + core/core_include/api.h | 1 + core/core_include/bitmap.h | 6 +- core/core_include/resource.h | 41 + core/core_include/resource_type.h | 72 -- core/core_include/surface.h | 17 +- core/core_include/wave_ctrl.h | 17 +- core/core_include/wnd.h | 40 +- core/core_include/word.h | 36 +- core/src/bitmap.cpp | 8 +- core/src/surface.cpp | 26 +- core/src/wave_ctrl.cpp | 2 +- core/src/wnd.cpp | 27 +- core/src/word.cpp | 377 ++++----- doc/multi-theme.png | Bin 0 -> 91126 bytes doc/unicode.jpg | Bin 0 -> 123351 bytes gui/CMakeLists.txt | 2 - gui/gui.vcxproj | 415 +++++----- gui/gui.vcxproj.filters | 257 +++--- gui/gui.vcxproj.user | 4 + gui/gui_include/button.h | 13 +- gui/gui_include/font.h | 28 - gui/gui_include/keyboard.h | 2 +- gui/gui_include/list_box.h | 4 +- gui/gui_include/my_resource.h | 81 ++ gui/gui_include/shape_resource.h | 17 - gui/gui_include/spinbox.h | 8 +- gui/gui_include/table.h | 2 - gui/src/button.cpp | 47 +- gui/src/dialog.cpp | 9 +- gui/src/edit.cpp | 38 +- gui/src/keyboard.cpp | 20 +- gui/src/label.cpp | 16 +- gui/src/list_box.cpp | 70 +- gui/src/my_resource.cpp | 52 ++ gui/src/shape_resource.cpp | 1291 ----------------------------- gui/src/spinbox.cpp | 101 +-- gui/src/table.cpp | 17 +- 42 files changed, 1179 insertions(+), 2573 deletions(-) create mode 100644 core/core.vcxproj.user create mode 100644 core/core_include/resource.h delete mode 100644 core/core_include/resource_type.h create mode 100644 doc/multi-theme.png create mode 100644 doc/unicode.jpg create mode 100644 gui/gui.vcxproj.user delete mode 100644 gui/gui_include/font.h create mode 100644 gui/gui_include/my_resource.h delete mode 100644 gui/gui_include/shape_resource.h create mode 100644 gui/src/my_resource.cpp delete mode 100644 gui/src/shape_resource.cpp diff --git a/README.md b/README.md index 3eaecb9..fb27e90 100644 --- a/README.md +++ b/README.md @@ -3,14 +3,16 @@ - GuiLite可以嵌入在iOS、Android、MFC、QT等其他UI系统中,让你的界面集百家之长,又不失个性。 - GuiLite鼓励混合编程,开发者可以用GuiLite接管UI部分,用Swift,Java,Go,C#,Python发开业务部分。 -## 新功能:自我监控 -**上报“编译/运行”情况至“云端”:** +相比QT、MFC,GuiLite不预设开发者的使用场景,不在具体功能上,大包大揽;用框架的简洁,换取开发的自由;GuiLite在图形绘制上面,力图一步到位,运行效率感人。 -![BuildInfo](doc/BuildInfo.png) +## 新功能:支持多种文字:Unicode +![unicode](doc/unicode.jpg) -**同步“本地数据”至“云端”:** +[如何制作多种文字资源?](https://github.com/idea4good/GuiLiteToolkit) -![DataOnCloud](doc/data_on_cloud.png) +[如何绘制Unicode文字?](https://github.com/idea4good/GuiLite/blob/master/core/src/word.cpp) + +[如何在你的APP中输入unicode字符?](https://github.com/idea4good/GuiLiteSamples/blob/master/HostMonitor/SampleCode/source/ui_tree/Dialog/patient_setup/patient_setup_dlg_xml.cpp) ## 卓越的跨平台能力 在Mac, iOS下的运行效果: @@ -25,7 +27,19 @@ ![Win MR](doc/WinMR.gif) ![QQ group: 527251257](doc/qq.group.jpg) -相比QT、MFC,GuiLite不预设开发者的使用场景,不在具体功能上,大包大揽;用框架的简洁,换取开发的自由;GuiLite在图形绘制上面,力图一步到位,运行效率感人。 +## “换肤”功能 +![multi-theme](doc/multi-theme.png) + +[如何“换肤”?](https://github.com/idea4good/GuiLiteSamples/blob/master/HostMonitor/SampleCode/source/resource/resource.cpp) + +## 自我监控 +**上报“编译/运行”情况至“云端”:** + +![BuildInfo](doc/BuildInfo.png) + +**同步“本地数据”至“云端”:** + +![DataOnCloud](doc/data_on_cloud.png) ## 为什么开发GuiLite?如何使用? 任何UI框架都不是为你我而生的,只有掌握核心原理,对其深度定制,才能真正掌握自己的命运!因此,我们开发了GuiLite,希望用这6千行代码揭示UI的核心原理和定制方法。 diff --git a/core/CMakeLists.txt b/core/CMakeLists.txt index 856215c..1713f95 100644 --- a/core/CMakeLists.txt +++ b/core/CMakeLists.txt @@ -16,10 +16,6 @@ FILE(GLOB ADAPTER src/adapter/api_linux.cpp ADD_LIBRARY(core ${MAIN} ${ADAPTER}) -TARGET_LINK_LIBRARIES(core - pthread - dl - sample) execute_process( COMMAND ${CMAKE_SOURCE_DIR}/.sync.sh Core diff --git a/core/core.vcxproj b/core/core.vcxproj index bf96764..d411f63 100644 --- a/core/core.vcxproj +++ b/core/core.vcxproj @@ -1,184 +1,184 @@ - - - - - Debug - Win32 - - - Release - Win32 - - - Debug - x64 - - - Release - x64 - - - - {8C80C76D-F437-4C69-BC94-252AC44171C2} - Win32Proj - core - 10.0.16299.0 - - - - StaticLibrary - true - v141 - Unicode - - - StaticLibrary - false - v141 - true - Unicode - - - StaticLibrary - true - v141 - Unicode - - - StaticLibrary - false - v141 - true - Unicode - - - - - - - - - - - - - - - - - - - - - $(SolutionDir)$(Configuration)\ - $(Configuration)\ - - - $(SolutionDir)$(Configuration)\ - $(Configuration)\ - - - - - - Level3 - Disabled - WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - true - - - Windows - - - call "$(SolutionDir)sync.bat" "Core" - - - - - - - Level3 - Disabled - _CRT_SECURE_NO_WARNINGS;_DEBUG;_LIB;%(PreprocessorDefinitions) - true - - - Windows - - - call "$(SolutionDir)sync.bat" "Core" - - - - - Level3 - - - MaxSpeed - true - true - _CRT_SECURE_NO_WARNINGS;WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) - true - - - Windows - true - true - - - call "$(SolutionDir)sync.bat" "Core" - - - - - Level3 - - - MaxSpeed - true - true - _CRT_SECURE_NO_WARNINGS;NDEBUG;_LIB;%(PreprocessorDefinitions) - true - - - Windows - true - true - - - call "$(SolutionDir)sync.bat" "Core" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + {8C80C76D-F437-4C69-BC94-252AC44171C2} + Win32Proj + core + 10.0.16299.0 + + + + StaticLibrary + true + v141 + Unicode + + + StaticLibrary + false + v141 + true + Unicode + + + StaticLibrary + true + v141 + Unicode + + + StaticLibrary + false + v141 + true + Unicode + + + + + + + + + + + + + + + + + + + + + $(SolutionDir)$(Configuration)\ + $(Configuration)\ + + + $(SolutionDir)$(Configuration)\ + $(Configuration)\ + + + + + + Level3 + Disabled + WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + true + + + Windows + + + call "$(SolutionDir)sync.bat" "Core" + + + + + + + Level3 + Disabled + _CRT_SECURE_NO_WARNINGS;_DEBUG;_LIB;%(PreprocessorDefinitions) + true + + + Windows + + + call "$(SolutionDir)sync.bat" "Core" + + + + + Level3 + + + MaxSpeed + true + true + _CRT_SECURE_NO_WARNINGS;WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) + true + + + Windows + true + true + + + call "$(SolutionDir)sync.bat" "Core" + + + + + Level3 + + + MaxSpeed + true + true + _CRT_SECURE_NO_WARNINGS;NDEBUG;_LIB;%(PreprocessorDefinitions) + true + + + Windows + true + true + + + call "$(SolutionDir)sync.bat" "Core" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/core/core.vcxproj.filters b/core/core.vcxproj.filters index 1f823b5..10f98a3 100644 --- a/core/core.vcxproj.filters +++ b/core/core.vcxproj.filters @@ -1,95 +1,95 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hh;hpp;hxx;hm;inl;inc;xsd - - - {3a033a7f-d656-4871-b7fe-f0a16aca7c8d} - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - - - Header Files\core_include - - - Header Files\core_include - - - Header Files\core_include - - - Header Files\core_include - - - Header Files\core_include - - - Header Files\core_include - - - Header Files\core_include - - - Header Files\core_include - - - Header Files\core_include - - - Header Files\core_include - - - Header Files\core_include - - - Header Files\core_include - - - Header Files\core_include - - + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;xsd + + + {3a033a7f-d656-4871-b7fe-f0a16aca7c8d} + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files\core_include + + + Header Files\core_include + + + Header Files\core_include + + + Header Files\core_include + + + Header Files\core_include + + + Header Files\core_include + + + Header Files\core_include + + + Header Files\core_include + + + Header Files\core_include + + + Header Files\core_include + + + Header Files\core_include + + + Header Files\core_include + + + Header Files\core_include + + \ No newline at end of file diff --git a/core/core.vcxproj.user b/core/core.vcxproj.user new file mode 100644 index 0000000..6e2aec7 --- /dev/null +++ b/core/core.vcxproj.user @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/core/core_include/api.h b/core/core_include/api.h index 4c521f1..2029404 100644 --- a/core/core_include/api.h +++ b/core/core_include/api.h @@ -15,6 +15,7 @@ void do_assert(const char* file, int line); void log_out(const char* log); +#define COLOR_TRANPARENT 0xFF000000 #define GLT_RGB(r, g, b) ((0xFF << 24) | (((unsigned int)(r)) << 16) | (((unsigned int)(g)) << 8) | ((unsigned int)(b))) #define GLT_RGB_R(rgb) ((((unsigned int)(rgb)) >> 16) & 0xFF) #define GLT_RGB_G(rgb) ((((unsigned int)(rgb)) >> 8) & 0xFF) diff --git a/core/core_include/bitmap.h b/core/core_include/bitmap.h index a0cdf0c..3b9cee4 100644 --- a/core/core_include/bitmap.h +++ b/core/core_include/bitmap.h @@ -5,11 +5,11 @@ class c_surface; class c_bitmap { public: - static void draw_bitmap(c_surface* surface, int z_order, const GUI_BITMAP *pBitmap, int x, int y); - static void draw_bitmap_in_rect(c_surface* surface, int z_order, const GUI_BITMAP *pBitmap, c_rect rect, unsigned int align_type); + static void draw_bitmap(c_surface* surface, int z_order, const BITMAP_INFO *pBitmap, int x, int y); + static void draw_bitmap_in_rect(c_surface* surface, int z_order, const BITMAP_INFO *pBitmap, c_rect rect, unsigned int align_type); private: static void draw_bitmap_565(c_surface* surface, int z_order, int x, int y, int xsize, int ysize, const unsigned char* pPixel); - static void get_bitmap_pos(const GUI_BITMAP *pBitmap, c_rect rect, unsigned int align_type, int &x, int &y); + static void get_bitmap_pos(const BITMAP_INFO *pBitmap, c_rect rect, unsigned int align_type, int &x, int &y); static void draw_bitmap_565_inrect(c_surface* surface, int z_order, int x, int y, int width, int height, int xsize, int ysize, const unsigned char* pPixel); c_bitmap(){} diff --git a/core/core_include/resource.h b/core/core_include/resource.h new file mode 100644 index 0000000..92bdc3e --- /dev/null +++ b/core/core_include/resource.h @@ -0,0 +1,41 @@ +#ifndef _RESOURCE_H_ +#define _RESOURCE_H_ + +//BITMAP +typedef struct struct_bitmap_info +{ + unsigned short XSize; + unsigned short YSize; + unsigned short BytesPerLine; + unsigned short BitsPerPixel; + const unsigned char* pData; /* Pointer to picture data (indices) */ +} BITMAP_INFO; + +//FONT +typedef struct struct_lattice +{ + unsigned int utf8_code; + unsigned char width; + const unsigned char* p_data; +} LATTICE; + +typedef struct struct_font_info +{ + unsigned char height; + unsigned int count; + LATTICE* lattice_array; +} FONT_INFO; + +//SHAPE +#define INVALID_RGN 0xFFFFFF +#define COLOR_USERDEF GLT_RGB(41,49,49) +typedef struct struct_color_rect +{ + int l; + int t; + int r; + int b; + unsigned int color; +}COLOR_RECT; + +#endif diff --git a/core/core_include/resource_type.h b/core/core_include/resource_type.h deleted file mode 100644 index caab830..0000000 --- a/core/core_include/resource_type.h +++ /dev/null @@ -1,72 +0,0 @@ -#ifndef _RESOURCE_TYPE_H_ -#define _RESOURCE_TYPE_H_ - -typedef struct struct_gui_bitmap -{ - unsigned short XSize; - unsigned short YSize; - unsigned short BytesPerLine; - unsigned short BitsPerPixel; - const unsigned char* pData; /* Pointer to picture data (indices) */ -} GUI_BITMAP; - -typedef struct -{ - unsigned char XSize; - unsigned char XDist; - unsigned char BytesPerLine; - void* pData; -} GUI_CHARINFO; - -typedef struct -{ - unsigned short First; /* first character */ - unsigned short Last; /* last character */ - const GUI_CHARINFO* paCharInfo; /* address of first character */ - void* pNext; /* pointer to next */ -} GUI_FONT_PROP; - -typedef struct struct_gui_font -{ - unsigned char YSize; - unsigned char YDist; - unsigned char XMag; - unsigned char YMag; - union - { - void *pFontData; - const GUI_FONT_PROP* pProp; - } p; - unsigned char Baseline; -} GUI_FONT; - -typedef enum -{ - LANGUAGE_BEGIN = 0, - ENGLISH = LANGUAGE_BEGIN, - CHINESE, - LANGUAGE_MAX -}LANGUAGE_TYPE; - -typedef struct struct_multi_lan_strings -{ - unsigned int index; - const char* text[LANGUAGE_MAX]; -}MULTI_LAN_STRINGS; - -typedef struct struct_unicode_lan_strings -{ - unsigned int index; - const char* unicodes; -}MULTI_LAN_UNICODES; - -#define ADD_STRING( index, english) \ -{ \ - index, \ - { \ - english, \ - 0 \ - } \ -} - -#endif diff --git a/core/core_include/surface.h b/core/core_include/surface.h index b8fcdf7..0e53c39 100644 --- a/core/core_include/surface.h +++ b/core/core_include/surface.h @@ -15,26 +15,16 @@ typedef enum Z_ORDER_LEVEL_MAX }Z_ORDER_LEVEL; -#define INVALID_RGN 0xFFFFFF -#define COLOR_USERDEF GLT_RGB(41,49,49) -#define DUMMY_COLOR GLT_RGB(0,0,0) - -typedef struct struct_custom_shape -{ - int l; - int t; - int r; - int b; - unsigned int color; -}CUSTOM_SHAPE; +typedef struct struct_color_rect COLOR_RECT; class c_display; class c_surface { friend class c_display; public: virtual void set_pixel(int x, int y, unsigned int rgb, unsigned int z_order); - virtual void fill_rect(int x0, int y0, int x1, int y1, unsigned int rgb, unsigned int z_order); virtual unsigned int get_pixel(int x, int y, unsigned int z_order); + virtual void fill_rect(int x0, int y0, int x1, int y1, unsigned int rgb, unsigned int z_order); + void fill_rect_ex(int l, int t, int r, int b, unsigned int color, const COLOR_RECT* extend_rects, int z_order); int get_width() { return m_width; } int get_height() { return m_height; } @@ -42,7 +32,6 @@ public: void draw_vline(int x, int y0, int y1, unsigned int rgb, unsigned int z_order); void draw_line(int x0, int y0, int x1, int y1, unsigned int rgb, unsigned int z_order); void draw_rect(int x0, int y0, int x1, int y1, unsigned int rgb, unsigned int z_order); - void draw_custom_shape(int l, int t, int r, int b, unsigned int color, const CUSTOM_SHAPE pRgn[], int z_order); int flush_scrren(int left, int top, int right, int bottom); bool is_valid(c_rect rect); diff --git a/core/core_include/wave_ctrl.h b/core/core_include/wave_ctrl.h index 9343aa2..fd823d1 100644 --- a/core/core_include/wave_ctrl.h +++ b/core/core_include/wave_ctrl.h @@ -24,12 +24,11 @@ public: virtual void on_init_children(); virtual void on_paint(); - void set_wave_name(unsigned short wave_name_id){ m_wave_name = wave_name_id;} - unsigned short get_wave_name(){return m_wave_name;} - void set_wave_unit(unsigned short wave_unit_id){ m_wave_unit = wave_unit_id;} + void set_wave_name(char* wave_name){ m_wave_name = wave_name;} + void set_wave_unit(char* wave_unit){ m_wave_unit = wave_unit;} - void set_wave_name_font_type(const GUI_FONT* wave_name_font_type){ m_wave_name_font_type = wave_name_font_type;} - void set_wave_unit_font_type(const GUI_FONT* wave_unit_font_type){ m_wave_unit_font_type = wave_unit_font_type;} + void set_wave_name_font_type(const FONT_INFO* wave_name_font_type){ m_wave_name_font_type = wave_name_font_type;} + void set_wave_unit_font_type(const FONT_INFO* wave_unit_font_type){ m_wave_unit_font_type = wave_unit_font_type;} void set_wave_name_color(unsigned int wave_name_color){ m_wave_name_color = wave_name_color;} void set_wave_unit_color(unsigned int wave_unit_color){ m_wave_unit_color = wave_unit_color;} @@ -51,11 +50,11 @@ protected: void erase_oldest_vline(); void save_foreground(); - unsigned short m_wave_name; - unsigned short m_wave_unit; + char* m_wave_name; + char* m_wave_unit; - const GUI_FONT* m_wave_name_font_type; - const GUI_FONT* m_wave_unit_font_type; + const FONT_INFO* m_wave_name_font_type; + const FONT_INFO* m_wave_unit_font_type; unsigned int m_wave_name_color; unsigned int m_wave_unit_color; diff --git a/core/core_include/wnd.h b/core/core_include/wnd.h index 3e4f38c..4f296a1 100644 --- a/core/core_include/wnd.h +++ b/core/core_include/wnd.h @@ -1,5 +1,5 @@ -#ifndef XT_GUI_WND_H -#define XT_GUI_WND_H +#ifndef _GUI_WND_H_ +#define _GUI_WND_H_ //Window attribution #define GLT_WIN_SHOW 0x00000001 @@ -9,10 +9,8 @@ #define GLT_ATTR_DISABLED 0x40000000L #define GLT_ATTR_FOCUS 0x20000000L -typedef struct struct_gui_bitmap GUI_BITMAP; -typedef struct struct_gui_font GUI_FONT; -typedef struct struct_custom_shape CUSTOM_SHAPE; -typedef const GUI_FONT* (*PTR_FUNC_GET_FONT)(); +typedef struct struct_font_info FONT_INFO; +typedef struct struct_color_rect COLOR_RECT; class c_wnd; class c_surface; @@ -29,7 +27,7 @@ typedef struct struct_wnd_tree { c_wnd* p_wnd; unsigned int resource_id; - unsigned int caption_id; + char* str; short x; short y; short width; @@ -44,9 +42,9 @@ public: c_wnd(); virtual ~c_wnd(); virtual const char* get_class_name() const { return "c_wnd"; } - virtual int connect(c_wnd *parent, unsigned short resource_id, unsigned short str_id, + virtual int connect(c_wnd *parent, unsigned short resource_id, char* str, short x, short y, short width, short height, WND_TREE* p_child_tree = NULL); - virtual c_wnd* connect_clone(c_wnd *parent, unsigned short resource_id, unsigned short str_id, + virtual c_wnd* connect_clone(c_wnd *parent, unsigned short resource_id, char* str, short x, short y, short width, short height, WND_TREE* p_child_tree = NULL); void disconnect(); virtual c_wnd* clone() = 0; @@ -60,13 +58,8 @@ public: unsigned int get_style() const { return m_style; } virtual void modify_style(unsigned int add_style = 0, unsigned int remove_style = 0); - void set_str_id(unsigned short str_id) { m_str_id = str_id; } - unsigned short get_str_id() const { return m_str_id; } - - void set_bitmap(const GUI_BITMAP *pBitmap) { m_bitmap = pBitmap; } - void set_focus_bitmap(const GUI_BITMAP *pBitmap) { m_bitmap_focus = pBitmap; } - void set_pushed_bitmap(const GUI_BITMAP *pBitmap) { m_bitmap_pushed = pBitmap; } - void set_disable_bitmap(const GUI_BITMAP *pBitmap) { m_bitmap_disable = pBitmap; } + void set_str(char* str) { m_str = str; } + char* get_str_id() const { return m_str; } bool is_visible() const { return m_is_visible_now; } bool is_foreground(); @@ -81,8 +74,8 @@ public: unsigned int get_font_color() { return m_font_color; } void set_bg_color(unsigned int color) { m_bg_color = color; } unsigned int get_bg_color() { return m_bg_color; } - void set_font_type(const GUI_FONT *font_type) { m_font_type = font_type; } - const GUI_FONT* get_font_type() { return m_font_type; } + void set_font_type(const FONT_INFO *font_type) { m_font_type = font_type; } + const FONT_INFO* get_font_type() { return m_font_type; } void set_wnd_pos(short x, short y, short width, short height); void get_wnd_rect(c_rect &rect) const; @@ -136,7 +129,8 @@ protected: void draw_rect(c_rect rect, unsigned int rgb); void fill_rect(int x0, int y0, int x1, int y1, unsigned int rgb); void fill_rect(c_rect rect, unsigned int rgb); - void draw_custom_shape(int l, int t, int r, int b, unsigned int color, const CUSTOM_SHAPE pRgn[]); + void fill_rect_ex(int l, int t, int r, int b, unsigned int color, const COLOR_RECT* extend_rects); + void fill_rect_ex(c_rect rect, unsigned int color, const COLOR_RECT* extend_rects); protected: WND_STATUS m_status; unsigned int m_style; @@ -145,13 +139,9 @@ protected: c_wnd* m_top_child; c_wnd* m_prev_sibling; c_wnd* m_next_sibling; - unsigned short m_str_id; + char* m_str; - const GUI_BITMAP* m_bitmap; - const GUI_BITMAP* m_bitmap_focus; - const GUI_BITMAP* m_bitmap_pushed; - const GUI_BITMAP* m_bitmap_disable; - const GUI_FONT* m_font_type; + const FONT_INFO* m_font_type; unsigned int m_font_color; unsigned int m_bg_color; diff --git a/core/core_include/word.h b/core/core_include/word.h index b3c7f33..e87eca6 100644 --- a/core/core_include/word.h +++ b/core/core_include/word.h @@ -1,39 +1,23 @@ #ifndef _WORD_UNIT_H_ #define _WORD_UNIT_H_ -#define COLOR_TRANPARENT 0xFF000000 - class c_surface; class c_word { public: - static void initiallize(LANGUAGE_TYPE language); - static void draw_string(c_surface* surface, int z_order, const char *s, int x, int y, const GUI_FONT* font, unsigned int font_color, unsigned int bg_color, unsigned int align_type = ALIGN_LEFT); - static void draw_string(c_surface* surface, int z_order, unsigned long str_id, int x, int y, const GUI_FONT* font, unsigned int font_color, unsigned int bg_color, unsigned int align_type = ALIGN_LEFT); - static void draw_string_in_rect(c_surface* surface, int z_order, const char *s, c_rect rect, const GUI_FONT* font, unsigned int font_color, unsigned int bg_color, unsigned int align_type = ALIGN_LEFT); - static void draw_string_in_rect(c_surface* surface, int z_order, unsigned long str_id, c_rect rect, const GUI_FONT* font, unsigned int font_color, unsigned int bg_color, unsigned int align_type = ALIGN_LEFT); - static void draw_value(c_surface* surface, int z_order, int value, int dot_position, int x, int y, const GUI_FONT* font, unsigned int font_color, unsigned int bg_color, unsigned int align_type = ALIGN_LEFT); - static void draw_value_in_rect(c_surface* surface, int z_order, int value, int dot_position, c_rect rect, const GUI_FONT* font, unsigned int font_color, unsigned int bg_color, unsigned int align_type = ALIGN_LEFT); + static void draw_string(c_surface* surface, int z_order, const char *s, int x, int y, const FONT_INFO* font, unsigned int font_color, unsigned int bg_color, unsigned int align_type = ALIGN_LEFT); + static void draw_string_in_rect(c_surface* surface, int z_order, const char *s, c_rect rect, const FONT_INFO* font, unsigned int font_color, unsigned int bg_color, unsigned int align_type = ALIGN_LEFT); + static void draw_value(c_surface* surface, int z_order, int value, int dot_position, int x, int y, const FONT_INFO* font, unsigned int font_color, unsigned int bg_color, unsigned int align_type = ALIGN_LEFT); + static void draw_value_in_rect(c_surface* surface, int z_order, int value, int dot_position, c_rect rect, const FONT_INFO* font, unsigned int font_color, unsigned int bg_color, unsigned int align_type = ALIGN_LEFT); static void value_2_string(int value, int dot_position, char* buf, int len); - static int get_str_pixel_length(const char *s, const GUI_FONT* font); - static const int get_font_ysize(const GUI_FONT* font_type); - static const char* get_string(unsigned long str_id); - + static int get_str_pixel_length(const char *s, const FONT_INFO* font); private: - static int get_char_cnt_in_single_line(const char *s); - static void draw_single_line_string(c_surface* surface, int z_order, const char *s, int x, int y, int len, const GUI_FONT* font, unsigned int font_color, unsigned int bg_color); - static int draw_single_char(c_surface* surface, int z_order, unsigned short code, int x, int y, const GUI_FONT* font, unsigned int font_color, unsigned int bg_color); - static void draw_lattice(c_surface* surface, int z_order, int x, int y, int width, int height, int bytes_per_line, const unsigned char* pData, unsigned int font_color, unsigned int bg_color, unsigned int font_aa_flag); - static void draw_bit_line(c_surface* surface, int z_order, int x, int y, unsigned char const*p, int width, unsigned int font_color, unsigned int bg_color); - static void draw_bit_line_AA(c_surface* surface, int z_order, int x, int y, unsigned char const*p, int width, unsigned int font_color, unsigned int bg_color); - - static const GUI_FONT_PROP* find_font_prop(const GUI_FONT_PROP* pProp, unsigned short code); - static void get_string_pos(const char *s, const GUI_FONT* font, c_rect rect, unsigned int align_type, int &x, int &y); - static bool is_AA_font(const GUI_CHARINFO* pCharInfo); - - static const MULTI_LAN_STRINGS *m_lang_map; - static LANGUAGE_TYPE m_lang_type; + static int draw_single_char(c_surface* surface, int z_order, unsigned int utf8_code, int x, int y, const FONT_INFO* font, unsigned int font_color, unsigned int bg_color); + static void draw_lattice(c_surface* surface, int z_order, int x, int y, int width, int height, const unsigned char* p_data, unsigned int font_color, unsigned int bg_color); + + static const LATTICE* get_lattice(const FONT_INFO* font, unsigned int utf8_code); + static void get_string_pos(const char *s, const FONT_INFO* font, c_rect rect, unsigned int align_type, int &x, int &y); private: c_word(){}; c_word(const c_word&); diff --git a/core/src/bitmap.cpp b/core/src/bitmap.cpp index eed6586..4206837 100644 --- a/core/src/bitmap.cpp +++ b/core/src/bitmap.cpp @@ -1,10 +1,10 @@ #include "../core_include/api.h" -#include "../core_include/resource_type.h" +#include "../core_include/resource.h" #include "../core_include/rect.h" #include "../core_include/bitmap.h" #include "../core_include/surface.h" -void c_bitmap::draw_bitmap(c_surface* surface, int z_order, const GUI_BITMAP *pBitmap, int x, int y) +void c_bitmap::draw_bitmap(c_surface* surface, int z_order, const BITMAP_INFO *pBitmap, int x, int y) { if (0 == pBitmap) { @@ -15,7 +15,7 @@ void c_bitmap::draw_bitmap(c_surface* surface, int z_order, const GUI_BITMAP *pB (unsigned char const *)pBitmap->pData); } -void c_bitmap::draw_bitmap_in_rect(c_surface* surface, int z_order, const GUI_BITMAP *pBitmap, c_rect rect, unsigned int align_type) +void c_bitmap::draw_bitmap_in_rect(c_surface* surface, int z_order, const BITMAP_INFO *pBitmap, c_rect rect, unsigned int align_type) { if (0 == pBitmap) { @@ -28,7 +28,7 @@ void c_bitmap::draw_bitmap_in_rect(c_surface* surface, int z_order, const GUI_BI pBitmap->XSize, pBitmap->YSize, (unsigned char const *)pBitmap->pData); } -void c_bitmap::get_bitmap_pos(const GUI_BITMAP *pBitmap, c_rect rect, unsigned int align_type, int &x, int &y) +void c_bitmap::get_bitmap_pos(const BITMAP_INFO *pBitmap, c_rect rect, unsigned int align_type, int &x, int &y) { int x_size = pBitmap->XSize; int y_size = pBitmap->YSize; diff --git a/core/src/surface.cpp b/core/src/surface.cpp index afdaf4d..7d24c6f 100644 --- a/core/src/surface.cpp +++ b/core/src/surface.cpp @@ -4,6 +4,7 @@ #include "../core_include/wnd.h" #include "../core_include/surface.h" #include "../core_include/display.h" +#include "../core_include/resource.h" #include #include @@ -374,24 +375,28 @@ int c_surface::copy_layer_pixel_2_fb(int x, int y, unsigned int z_order) return 0; } -void c_surface::draw_custom_shape(int l, int t, int r, int b, unsigned int color, const CUSTOM_SHAPE pRgn[], int z_order) +void c_surface::fill_rect_ex(int l, int t, int r, int b, unsigned int color, const COLOR_RECT* extend_rects, int z_order) { - int i = 0; - int templ, tempt, tempr, tempb; - unsigned int tempcolor; - while (INVALID_RGN != pRgn[i].l) + if (NULL == extend_rects) { - templ = (pRgn[i].l < 0) ? (r + 1 + pRgn[i].l) : pRgn[i].l + l; - tempt = (pRgn[i].t < 0) ? (b + 1 + pRgn[i].t) : pRgn[i].t + t; - tempr = (pRgn[i].r < 0) ? (r + 1 + pRgn[i].r) : pRgn[i].r + l; - tempb = (pRgn[i].b < 0) ? (b + 1 + pRgn[i].b) : pRgn[i].b + t; + return fill_rect(l, t, r, b, color, z_order); + } + + COLOR_RECT* p_item = (COLOR_RECT*)extend_rects; + int templ, tempt, tempr, tempb; + for(int i = 0; INVALID_RGN != p_item[i].l; i++) + { + templ = (p_item[i].l < 0) ? (r + 1 + p_item[i].l) : p_item[i].l + l; + tempt = (p_item[i].t < 0) ? (b + 1 + p_item[i].t) : p_item[i].t + t; + tempr = (p_item[i].r < 0) ? (r + 1 + p_item[i].r) : p_item[i].r + l; + tempb = (p_item[i].b < 0) ? (b + 1 + p_item[i].b) : p_item[i].b + t; if (templ >= tempr) tempr = templ; if (tempt >= tempb) tempb = tempt; - tempcolor = (COLOR_USERDEF == pRgn[i].color) ? (color) : pRgn[i].color; + unsigned int tempcolor = (COLOR_USERDEF == p_item[i].color) ? (color) : p_item[i].color; for (int y = tempt ; y <= tempb; y++) { @@ -400,7 +405,6 @@ void c_surface::draw_custom_shape(int l, int t, int r, int b, unsigned int color set_pixel(x , y, tempcolor, z_order); } } - i++; } } diff --git a/core/src/wave_ctrl.cpp b/core/src/wave_ctrl.cpp index ed667e2..698acf1 100644 --- a/core/src/wave_ctrl.cpp +++ b/core/src/wave_ctrl.cpp @@ -4,7 +4,7 @@ #include "../core_include/wnd.h" #include "../core_include/wave_buffer.h" #include "../core_include/surface.h" -#include "../core_include/resource_type.h" +#include "../core_include/resource.h" #include "../core_include/word.h" #include "../core_include/wave_ctrl.h" #include diff --git a/core/src/wnd.cpp b/core/src/wnd.cpp index 2deb55d..e906b8d 100644 --- a/core/src/wnd.cpp +++ b/core/src/wnd.cpp @@ -1,15 +1,13 @@ #include "../core_include/rect.h" #include "../core_include/cmd_target.h" #include "../core_include/api.h" -#include "../core_include/resource_type.h" +#include "../core_include/resource.h" #include "../core_include/bitmap.h" #include "../core_include/surface.h" #include "../core_include/wnd.h" c_wnd::c_wnd(): m_status(STATUS_NORMAL), m_style(GLT_ATTR_VISIBLE), m_parent(NULL), m_top_child(NULL), m_prev_sibling(NULL), m_next_sibling(NULL), - m_str_id(0),m_bitmap(NULL), m_bitmap_focus(NULL), m_bitmap_pushed(NULL), m_bitmap_disable(NULL), - m_font_type(NULL), m_font_color(0), m_bg_color(0), m_is_visible_now(false),m_resource_id(0), - m_z_order(Z_ORDER_LEVEL_0), m_active_child(NULL), m_surface(NULL) + m_str(0), m_font_color(0), m_bg_color(0), m_is_visible_now(false),m_resource_id(0), m_z_order(Z_ORDER_LEVEL_0), m_active_child(NULL), m_surface(NULL) { m_wnd_rect.Empty(); } @@ -23,7 +21,7 @@ void c_wnd::pre_create_wnd() m_style = GLT_ATTR_VISIBLE | GLT_ATTR_FOCUS; } -int c_wnd::connect(c_wnd *parent, unsigned short resource_id, unsigned short str_id, +int c_wnd::connect(c_wnd *parent, unsigned short resource_id, char* str, short x, short y, short width, short height, WND_TREE* p_child_tree ) { if(0 == resource_id) @@ -58,7 +56,7 @@ int c_wnd::connect(c_wnd *parent, unsigned short resource_id, unsigned short str ASSERT(m_surface->is_valid(rect)); pre_create_wnd(); - set_str_id(str_id); + set_str(str); if ( 0 != parent ) { @@ -91,7 +89,7 @@ int c_wnd::load_child_wnd(WND_TREE *p_child_tree) } else { - p_cur->p_wnd->connect(this, p_cur->resource_id, p_cur->caption_id, + p_cur->p_wnd->connect(this, p_cur->resource_id, p_cur->str, p_cur->x, p_cur->y, p_cur->width, p_cur->height,p_cur->p_child_tree); } p_cur++; @@ -100,7 +98,7 @@ int c_wnd::load_child_wnd(WND_TREE *p_child_tree) return sum; } -c_wnd* c_wnd::connect_clone(c_wnd *parent, unsigned short resource_id, unsigned short str_id, +c_wnd* c_wnd::connect_clone(c_wnd *parent, unsigned short resource_id, char* str, short x, short y, short width, short height, WND_TREE* p_child_tree ) { if(0 == resource_id) @@ -140,7 +138,7 @@ c_wnd* c_wnd::connect_clone(c_wnd *parent, unsigned short resource_id, unsigned ASSERT(wnd->m_surface->is_valid(rect)); wnd->pre_create_wnd(); - wnd->set_str_id(str_id); + wnd->set_str(str); if ( 0 != parent ) { @@ -166,7 +164,7 @@ int c_wnd::load_clone_child_wnd(WND_TREE *p_child_tree) WND_TREE* p_cur = p_child_tree; while(p_cur->p_wnd) { - p_cur->p_wnd->connect_clone(this, p_cur->resource_id, p_cur->caption_id, + p_cur->p_wnd->connect_clone(this, p_cur->resource_id, p_cur->str, p_cur->x, p_cur->y, p_cur->width, p_cur->height,p_cur->p_child_tree); p_cur++; sum++; @@ -787,7 +785,12 @@ void c_wnd::fill_rect(c_rect rect, unsigned int rgb) m_surface->fill_rect(rect.m_left, rect.m_top, rect.m_right, rect.m_bottom, rgb, m_z_order); } -void c_wnd::draw_custom_shape(int l, int t, int r, int b, unsigned int color, const CUSTOM_SHAPE pRgn[]) +void c_wnd::fill_rect_ex(int l, int t, int r, int b, unsigned int color, const COLOR_RECT* extend_rects) { - m_surface->draw_custom_shape(l, t, r, b, color, pRgn, m_z_order); + m_surface->fill_rect_ex(l, t, r, b, color, extend_rects, m_z_order); } + +void c_wnd::fill_rect_ex(c_rect rect, unsigned int color, const COLOR_RECT* extend_rects) +{ + m_surface->fill_rect_ex(rect.m_left, rect.m_top, rect.m_right, rect.m_bottom, color, extend_rects, m_z_order); +} \ No newline at end of file diff --git a/core/src/word.cpp b/core/src/word.cpp index 7807b98..6700d66 100644 --- a/core/src/word.cpp +++ b/core/src/word.cpp @@ -1,120 +1,110 @@ #include "../core_include/api.h" #include "../core_include/rect.h" -#include "../core_include/resource_type.h" +#include "../core_include/resource.h" #include "../core_include/word.h" #include "../core_include/surface.h" #include #include #define BUFFER_LEN 16 - -const MULTI_LAN_STRINGS * c_word::m_lang_map; -LANGUAGE_TYPE c_word::m_lang_type; - -extern const MULTI_LAN_STRINGS *get_multi_lan_pointer(); -extern const MULTI_LAN_UNICODES *get_unicode_lan_pointer(); -void c_word::initiallize(LANGUAGE_TYPE language) +unsigned char s_utf8_length_table[256] = { - m_lang_type = language; - m_lang_map = get_multi_lan_pointer(); + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 1, 1 +}; + +inline static int get_utf8_code(const char* s, unsigned int& output_utf8_code) +{ + unsigned char* us = (unsigned char*)s; + int utf8_bytes = s_utf8_length_table[*us]; + switch (utf8_bytes) + { + case 1: + output_utf8_code = *us; + break; + case 2: + output_utf8_code = (*us << 8) | (*(us + 1)); + break; + case 3: + output_utf8_code = (*us << 16) | ((*(us + 1)) << 8) | *(us + 2); + break; + case 4: + output_utf8_code = (*us << 24) | ((*(us + 1)) << 16) | (*(us + 2) << 8) | *(us + 3); + break; + default: + ASSERT(FALSE); + break; + } + return utf8_bytes; } -void c_word::draw_value_in_rect(c_surface* surface, int z_order, int value, int dot_position, c_rect rect, const GUI_FONT* font, unsigned int font_color, unsigned int bg_color, unsigned int align_type) +void c_word::draw_value_in_rect(c_surface* surface, int z_order, int value, int dot_position, c_rect rect, const FONT_INFO* font, unsigned int font_color, unsigned int bg_color, unsigned int align_type) { char buf[BUFFER_LEN]; value_2_string(value, dot_position, buf, BUFFER_LEN); draw_string_in_rect(surface, z_order, buf, rect, font, font_color, bg_color, align_type); } -void c_word::draw_value(c_surface* surface, int z_order, int value, int dot_position, int x, int y, const GUI_FONT* font, unsigned int font_color, unsigned int bg_color, unsigned int align_type) +void c_word::draw_value(c_surface* surface, int z_order, int value, int dot_position, int x, int y, const FONT_INFO* font, unsigned int font_color, unsigned int bg_color, unsigned int align_type) { char buf[BUFFER_LEN]; value_2_string(value, dot_position, buf, BUFFER_LEN); draw_string(surface, z_order, buf, x, y, font, font_color, bg_color, align_type); } -void c_word::draw_string_in_rect(c_surface* surface, int z_order, unsigned long str_id, c_rect rect, const GUI_FONT* font, unsigned int font_color, unsigned int bg_color, unsigned int align_type) -{ - const char* s = get_string(str_id); - if (NULL == s) - { - return; - } - draw_string_in_rect(surface, z_order, s, rect, font, font_color, bg_color, align_type); -} - -void c_word::draw_string_in_rect(c_surface* surface, int z_order, const char *s, c_rect rect, const GUI_FONT* font, unsigned int font_color, unsigned int bg_color, unsigned int align_type) +void c_word::draw_string_in_rect(c_surface* surface, int z_order, const char *s, c_rect rect, const FONT_INFO* font, unsigned int font_color, unsigned int bg_color, unsigned int align_type) { if(NULL == s) { return; } + if (NULL == font) + { + ASSERT(FALSE); + } int x, y; get_string_pos(s, font, rect, align_type, x, y); draw_string(surface, z_order, s, rect.m_left + x, rect.m_top + y, font, font_color, bg_color, ALIGN_LEFT); } -void c_word::draw_string(c_surface* surface, int z_order, unsigned long str_id, int x, int y, const GUI_FONT* font, unsigned int font_color, unsigned int bg_color, unsigned int align_type) +void c_word::draw_string(c_surface* surface, int z_order, const char *s, int x, int y, const FONT_INFO* font, unsigned int font_color, unsigned int bg_color, unsigned int align_type) { - const char* s = get_string(str_id); if (NULL == s) { return; } - draw_string(surface, z_order, s, x, y, font, font_color, bg_color, align_type); -} - -void c_word::draw_string(c_surface* surface, int z_order, const char *s, int x, int y, const GUI_FONT* font, unsigned int font_color, unsigned int bg_color, unsigned int align_type) -{ - if(0 == s) - { - return; - } - for (; *s; s++) - { - int line_len = get_char_cnt_in_single_line(s); - int str_pixel_length = get_str_pixel_length(s, font); - if (align_type == ALIGN_RIGHT) - { - x = x - str_pixel_length + 1; - } - else if (align_type == ALIGN_HCENTER) - { - x = x - str_pixel_length / 2; - } - draw_single_line_string(surface, z_order, s, x, y , line_len, font, font_color, bg_color); - s += line_len; - if (*s == '\n') - { - y += font->YSize; - } - if (*s==0) - break; - } -} - -const char* c_word::get_string(unsigned long str_id) -{ - if(NULL == m_lang_map) - { - return NULL; - } - - if(str_id != m_lang_map[str_id].index) + if (NULL == font) { ASSERT(FALSE); - return NULL; } - return m_lang_map[str_id].text[m_lang_type]; -} -const int c_word::get_font_ysize(const GUI_FONT* font_type) -{ - if (!font_type) - { - return 0; + int offset = 0; + unsigned int utf8_code; + while (*s) + { + if (*s == '\n') + { + y += font->height; + offset = 0; + continue; + } + s += get_utf8_code(s, utf8_code); + offset += draw_single_char(surface, z_order, utf8_code, (x + offset), y, font, font_color, bg_color); } - return font_type->YSize; } void c_word::value_2_string(int value, int dot_position, char* buf, int len) @@ -145,50 +135,30 @@ void c_word::value_2_string(int value, int dot_position, char* buf, int len) } } -int c_word::get_char_cnt_in_single_line(const char *s) +const LATTICE* c_word::get_lattice(const FONT_INFO* font, unsigned int utf8_code) { - int len = 0; - unsigned char code_high; - while (((code_high = *(unsigned char*)s) != 0)) - { - if (code_high > 127) - { - len++; s++; - } - else - { - switch (code_high) - { - case '\n': return len; - } - } - len++; - s++; - } - return len; + int first = 0; + int last = font->count - 1; + int middle = (first + last) / 2; + + while (first <= last) + { + if (font->lattice_array[middle].utf8_code < utf8_code) + first = middle + 1; + else if (font->lattice_array[middle].utf8_code == utf8_code) + { + return &font->lattice_array[middle]; + } + else + { + last = middle - 1; + } + middle = (first + last) / 2; + } + return NULL; } -void c_word::draw_single_line_string(c_surface* surface, int z_order, const char *s, int x, int y, int len, const GUI_FONT* font, unsigned int font_color, unsigned int bg_color) -{ - int offset = 0; - while (--len >= 0) - { - offset = draw_single_char(surface, z_order, *s++, x, y, font, font_color, bg_color); - x += offset; - } -} - -const GUI_FONT_PROP* c_word::find_font_prop(const GUI_FONT_PROP* pProp, unsigned short code) -{ - for (; pProp; pProp=(GUI_FONT_PROP*) pProp->pNext) - { - if ((code>=pProp->First) && (code<=pProp->Last)) - break; - } - return pProp; -} - -int c_word::draw_single_char(c_surface* surface, int z_order, unsigned short code, int x, int y, const GUI_FONT* font, unsigned int font_color, unsigned int bg_color) +int c_word::draw_single_char(c_surface* surface, int z_order, unsigned int utf8_code, int x, int y, const FONT_INFO* font, unsigned int font_color, unsigned int bg_color) { if (NULL == font) { @@ -196,137 +166,83 @@ int c_word::draw_single_char(c_surface* surface, int z_order, unsigned short cod return 0; } - const GUI_FONT_PROP* pProp = find_font_prop(font->p.pProp, code); - if (pProp) + const LATTICE* p_lattice = get_lattice(font, utf8_code); + if (p_lattice) { - const GUI_CHARINFO* pCharInfo = pProp->paCharInfo+(code - pProp->First); - int bytes_per_line = pCharInfo->BytesPerLine; - draw_lattice(surface, z_order, x, y, pCharInfo->XSize, font->YSize, - bytes_per_line, (unsigned char const *)pCharInfo->pData, font_color, bg_color, is_AA_font(pCharInfo)); - return pCharInfo->XDist; + draw_lattice(surface, z_order, x, y, p_lattice->width, font->height, p_lattice->p_data, font_color, bg_color); + return p_lattice->width; } - return 0; + + int len = font->height; + for (int y_ = 0; y_ < len; y_++) + { + for (int x_ = 0; x_ < len; x_++) + { + ((y_ % 4) == 0) ? surface->set_pixel((x + x_), (y + y_), 0, z_order) : + surface->set_pixel((x + x_), (y + y_), 0xFFFFFFFF, z_order); + } + } + return len; } void c_word::draw_lattice(c_surface* surface, int z_order, int x, int y, int width, int height, - int bytes_per_line, const unsigned char* pData, - unsigned int font_color, unsigned int bg_color, unsigned int font_aa_flag) + const unsigned char* p_data, unsigned int font_color, unsigned int bg_color) { - int i; - if (!font_aa_flag) + unsigned int r, g, b; + unsigned int bg_color_set = (COLOR_TRANPARENT == bg_color) ? surface->get_pixel(x, y, z_order) : bg_color; + + for (int y_ = 0; y_ < height; y_++) { - for (i = 0; i < height; i++) + for (int x_ = 0; x_ < width; x_++) { - draw_bit_line(surface, z_order, x, i + y, pData, width, font_color, bg_color); - pData += bytes_per_line; - } - } - else - { - for (i = 0; i < height; i++) - { - draw_bit_line_AA(surface, z_order, x, i + y, pData, width, font_color, bg_color); - pData += bytes_per_line; - } - } -} - -void c_word::draw_bit_line(c_surface* surface, int z_order, int x, int y, unsigned char const*p, int width, unsigned int font_color, unsigned int bg_color) -{ - unsigned int color; - int diff = 0; - do - { - color = (*p & (0x80>>diff)) ? font_color : bg_color; - - if (COLOR_TRANPARENT != color) - { - surface->set_pixel(x, y, color, z_order); - } - - x++; - if (++diff == 8) - { - diff = 0; - p++; - } - } while (--width); -} - -void c_word::draw_bit_line_AA(c_surface* surface, int z_order, int x, int y, unsigned char const*p, int width, unsigned int font_color, unsigned int bg_color) -{ - unsigned int color, current_bg_color; - unsigned int b, g, r; - - if(COLOR_TRANPARENT == bg_color) - { - current_bg_color = surface->get_pixel(x, y, z_order); - } - else - { - current_bg_color = bg_color; - } - - do - { - if (0x00 == *p) - { - if(bg_color != COLOR_TRANPARENT) + unsigned char value = *p_data; + if (0x00 == value) { - surface->set_pixel(x, y, current_bg_color, z_order); + if (bg_color != COLOR_TRANPARENT) + { + surface->set_pixel(x + x_, y + y_, bg_color_set, z_order); + } } - } - else - { - b = (GLT_RGB_B(font_color) * (*p) + GLT_RGB_B(current_bg_color) * (255 - *p)) >> 8; - g = (GLT_RGB_G(font_color) * (*p) + GLT_RGB_G(current_bg_color) * (255 - *p)) >> 8; - r = (GLT_RGB_R(font_color) * (*p) + GLT_RGB_R(current_bg_color) * (255 - *p)) >> 8; - color = GLT_RGB(r, g, b); - surface->set_pixel(x, y, color, z_order); - } - x++; - p++; - } while (--width); -} - -int c_word::get_str_pixel_length(const char *s, const GUI_FONT* font) -{ - int ret = 0; - if(0 == s) - { - return ret; - } - - for (; *s; s++) - { - int len = get_char_cnt_in_single_line(s); - - unsigned char code_high; - int last_char_xdist = 0; - - while (--len >= 0) - { - const GUI_FONT_PROP* pProp = find_font_prop(font->p.pProp, *s); - if (pProp) + else { - const GUI_CHARINFO* pCharInfo = pProp->paCharInfo+(*s - pProp->First); - - last_char_xdist = pCharInfo->XDist; + b = (GLT_RGB_B(font_color) * value + GLT_RGB_B(bg_color_set) * (255 - value)) >> 8; + g = (GLT_RGB_G(font_color) * value + GLT_RGB_G(bg_color_set) * (255 - value)) >> 8; + r = (GLT_RGB_R(font_color) * value + GLT_RGB_R(bg_color_set) * (255 - value)) >> 8; + surface->set_pixel((x + x_), (y + y_), GLT_RGB(r, g, b), z_order); } - ret += last_char_xdist; - s++; + p_data++; } - if (*s==0) - break; } - - return ret; } -void c_word::get_string_pos(const char *s, const GUI_FONT* font, c_rect rect, unsigned int align_type, int &x, int &y) +int c_word::get_str_pixel_length(const char *s, const FONT_INFO* font) +{ + if(NULL == s) + { + return 0; + } + if (NULL == font) + { + ASSERT(FALSE); + } + + int lattice_width = 0; + unsigned int utf8_code; + int utf8_bytes; + while (*s) + { + utf8_bytes = get_utf8_code(s, utf8_code); + const LATTICE* p_lattice = get_lattice(font, utf8_code); + lattice_width += p_lattice?p_lattice->width:font->height; + s += utf8_bytes; + } + return lattice_width; +} + +void c_word::get_string_pos(const char *s, const FONT_INFO* font, c_rect rect, unsigned int align_type, int &x, int &y) { int x_size = get_str_pixel_length(s, font); - int y_size = get_font_ysize(font); + int y_size = font->height; int height = rect.m_bottom - rect.m_top + 1; int width = rect.m_right - rect.m_left + 1; @@ -387,8 +303,3 @@ void c_word::get_string_pos(const char *s, const GUI_FONT* font, c_rect rect, un break; } } - -bool c_word::is_AA_font(const GUI_CHARINFO* pCharInfo) -{ - return (pCharInfo->XSize == pCharInfo->BytesPerLine) ? true : false; -} diff --git a/doc/multi-theme.png b/doc/multi-theme.png new file mode 100644 index 0000000000000000000000000000000000000000..de9171371665b2156166c08c2b2a4aded4696fa6 GIT binary patch literal 91126 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

7?7uxtV@efx}q7eG?o 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≈dr*e0+)9dj1B!inC=&p!UyKNnEX!RTldN~ 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 literal 0 HcmV?d00001 diff --git a/doc/unicode.jpg b/doc/unicode.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5f6ac4ae4cd87ee597cc2dbbb3bb70e277a375f8 GIT binary patch literal 123351 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 IIzNy8Ka5Bt$^ZZW literal 0 HcmV?d00001 diff --git a/gui/CMakeLists.txt b/gui/CMakeLists.txt index 7624bbb..39b4210 100644 --- a/gui/CMakeLists.txt +++ b/gui/CMakeLists.txt @@ -11,8 +11,6 @@ FILE(GLOB SRC src/*.cpp) ADD_LIBRARY(gui ${SRC}) -TARGET_LINK_LIBRARIES(gui core sample) - execute_process( COMMAND ${CMAKE_SOURCE_DIR}/.sync.sh Gui ) diff --git a/gui/gui.vcxproj b/gui/gui.vcxproj index c325370..5f5d365 100644 --- a/gui/gui.vcxproj +++ b/gui/gui.vcxproj @@ -1,209 +1,208 @@ - - - - - Debug - Win32 - - - Release - Win32 - - - Debug - x64 - - - Release - x64 - - - - {89DB54E6-EFE1-4722-BD31-27FEBE39DFC6} - Win32Proj - gui - 10.0.16299.0 - - - - StaticLibrary - true - v141 - Unicode - - - StaticLibrary - false - v141 - true - Unicode - - - StaticLibrary - true - v141 - Unicode - - - StaticLibrary - false - v141 - true - Unicode - - - - - - - - - - - - - - - - - - - - - $(SolutionDir)$(Configuration)\ - $(Configuration)\ - ..\core;$(IncludePath) - - - $(SolutionDir)\$(Configuration)\ - $(Configuration)\ - ..\core;$(VC_IncludePath);$(WindowsSDK_IncludePath); - - - ..\core;$(VC_IncludePath);$(WindowsSDK_IncludePath); - - - ..\core;$(VC_IncludePath);$(WindowsSDK_IncludePath); - - - - - - Level3 - Disabled - WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - true - false - true - false - Sync - - - - - Windows - - - call "$(SolutionDir)sync.bat" "Gui" - - - - - - - Level3 - Disabled - _CRT_SECURE_NO_WARNINGS;_DEBUG;_LIB;%(PreprocessorDefinitions) - true - - - Windows - - - call "$(SolutionDir)sync.bat" "Gui" - - - - - Level3 - - - MaxSpeed - true - true - _CRT_SECURE_NO_WARNINGS;WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) - true - - - Windows - true - true - - - call "$(SolutionDir)sync.bat" "Gui" - - - - - Level3 - - - MaxSpeed - true - true - _CRT_SECURE_NO_WARNINGS;NDEBUG;_LIB;%(PreprocessorDefinitions) - true - - - Windows - true - true - - - call "$(SolutionDir)sync.bat" "Gui" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + {89DB54E6-EFE1-4722-BD31-27FEBE39DFC6} + Win32Proj + gui + 10.0.16299.0 + + + + StaticLibrary + true + v141 + Unicode + + + StaticLibrary + false + v141 + true + Unicode + + + StaticLibrary + true + v141 + Unicode + + + StaticLibrary + false + v141 + true + Unicode + + + + + + + + + + + + + + + + + + + + + $(SolutionDir)$(Configuration)\ + $(Configuration)\ + ..\core;$(IncludePath) + + + $(SolutionDir)\$(Configuration)\ + $(Configuration)\ + ..\core;$(VC_IncludePath);$(WindowsSDK_IncludePath); + + + ..\core;$(VC_IncludePath);$(WindowsSDK_IncludePath); + + + ..\core;$(VC_IncludePath);$(WindowsSDK_IncludePath); + + + + + + Level3 + Disabled + WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + true + false + true + false + Sync + + + + + Windows + + + call "$(SolutionDir)sync.bat" "Gui" + + + + + + + Level3 + Disabled + _CRT_SECURE_NO_WARNINGS;_DEBUG;_LIB;%(PreprocessorDefinitions) + true + + + Windows + + + call "$(SolutionDir)sync.bat" "Gui" + + + + + Level3 + + + MaxSpeed + true + true + _CRT_SECURE_NO_WARNINGS;WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) + true + + + Windows + true + true + + + call "$(SolutionDir)sync.bat" "Gui" + + + + + Level3 + + + MaxSpeed + true + true + _CRT_SECURE_NO_WARNINGS;NDEBUG;_LIB;%(PreprocessorDefinitions) + true + + + Windows + true + true + + + call "$(SolutionDir)sync.bat" "Gui" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/gui/gui.vcxproj.filters b/gui/gui.vcxproj.filters index c185b9e..8528b31 100644 --- a/gui/gui.vcxproj.filters +++ b/gui/gui.vcxproj.filters @@ -1,131 +1,128 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hh;hpp;hxx;hm;inl;inc;xsd - - - {ee075da6-cdde-4d0a-8c3e-4f969486d78a} - - - {545b674c-c3e9-476a-b488-f4b0cb591cfc} - - - - - Header Files\gui_include - - - Header Files\gui_include - - - Header Files\gui_include - - - Header Files\gui_include - - - Header Files\gui_include - - - Header Files\gui_include - - - Header Files\gui_include - - - Header Files\gui_include - - - Header Files\gui_include - - - Header Files\gui_include - - - Header Files\gui_include - - - Header Files\gui_include - - - Header Files\core_include - - - Header Files\core_include - - - Header Files\core_include - - - Header Files\core_include - - - Header Files\core_include - - - Header Files\core_include - - - Header Files\core_include - - - Header Files\core_include - - - Header Files\core_include - - - Header Files\core_include - - - Header Files\core_include - - - Header Files\core_include - - - Header Files\core_include - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;xsd + + + {ee075da6-cdde-4d0a-8c3e-4f969486d78a} + + + {545b674c-c3e9-476a-b488-f4b0cb591cfc} + + + + + Header Files\gui_include + + + Header Files\gui_include + + + Header Files\gui_include + + + Header Files\gui_include + + + Header Files\gui_include + + + Header Files\gui_include + + + Header Files\gui_include + + + Header Files\gui_include + + + Header Files\gui_include + + + Header Files\gui_include + + + Header Files\core_include + + + Header Files\core_include + + + Header Files\core_include + + + Header Files\core_include + + + Header Files\core_include + + + Header Files\core_include + + + Header Files\core_include + + + Header Files\core_include + + + Header Files\core_include + + + Header Files\core_include + + + Header Files\core_include + + + Header Files\core_include + + + Header Files\core_include + + + Header Files\gui_include + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + \ No newline at end of file diff --git a/gui/gui.vcxproj.user b/gui/gui.vcxproj.user new file mode 100644 index 0000000..6e2aec7 --- /dev/null +++ b/gui/gui.vcxproj.user @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/gui/gui_include/button.h b/gui/gui_include/button.h index 3da5305..50b6859 100644 --- a/gui/gui_include/button.h +++ b/gui/gui_include/button.h @@ -2,15 +2,20 @@ #define _BUTTON_H_ #define GLT_BN_CLICKED 0x1111 - #define ON_GLT_BN_CLICKED(ctrlId, func) \ {MSG_TYPE_WND, GLT_BN_CLICKED, (c_cmd_target*)ctrlId, MSG_CALLBACK_VWV, (MsgFuncVV)(static_cast(&func))}, +typedef struct struct_bitmap_info BITMAP_INFO; class c_button : public c_wnd { public: virtual const char* get_class_name() const {return "c_button";} virtual c_wnd* clone(){return new c_button();} + + void set_bitmap(const BITMAP_INFO *pBitmap) { m_bitmap_normal = pBitmap; } + void set_focus_bitmap(const BITMAP_INFO *pBitmap) { m_bitmap_focus = pBitmap; } + void set_pushed_bitmap(const BITMAP_INFO *pBitmap) { m_bitmap_pushed = pBitmap; } + void set_disable_bitmap(const BITMAP_INFO *pBitmap) { m_bitmap_disable = pBitmap; } protected: virtual void on_paint(); virtual void on_focus(); @@ -18,7 +23,11 @@ protected: virtual void on_touch_down(int x, int y); virtual void on_touch_up(int x, int y); virtual void pre_create_wnd(); -private: + + const BITMAP_INFO* m_bitmap_normal; + const BITMAP_INFO* m_bitmap_focus; + const BITMAP_INFO* m_bitmap_pushed; + const BITMAP_INFO* m_bitmap_disable; }; #endif diff --git a/gui/gui_include/font.h b/gui/gui_include/font.h deleted file mode 100644 index ed4b05d..0000000 --- a/gui/gui_include/font.h +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef _FONT_H_ -#define _FONT_H_ - -#define FONT_ENG_S font_language_s -#define FONT_ENG_SB font_language_sb -#define FONT_ENG_SBM font_language_sbm -#define FONT_ENG_SMB font_language_smb -#define FONT_ENG_SMB_AA font_language_smb_aa -#define FONT_ENG_MB_AA font_language_mb_aa -#define FONT_ENG_MMB_AA font_language_mmb_aa -#define FONT_ENG_MB font_language_mb -#define FONT_ENG_LLB font_language_llb -#define FONT_ENG_LLLB font_language_lllb -#define FONT_ENG_LLLLB font_language_llllb - -const GUI_FONT * font_language_s(); -const GUI_FONT * font_language_sb(); -const GUI_FONT * font_language_sbm(); -const GUI_FONT * font_language_smb(); -const GUI_FONT * font_language_smb_aa(); -const GUI_FONT * font_language_mb_aa(); -const GUI_FONT * font_language_mmb_aa(); -const GUI_FONT * font_language_mb(); -const GUI_FONT * font_language_llb(); -const GUI_FONT * font_language_lllb(); -const GUI_FONT * font_language_llllb(); - -#endif diff --git a/gui/gui_include/keyboard.h b/gui/gui_include/keyboard.h index b904227..033896c 100644 --- a/gui/gui_include/keyboard.h +++ b/gui/gui_include/keyboard.h @@ -27,7 +27,7 @@ typedef enum class c_keyboard: public c_wnd { public: - virtual int create(c_wnd *parent, unsigned short resource_id, unsigned short str_id, + virtual int create(c_wnd *parent, unsigned short resource_id, char* str, short x, short y, short width, short height, WND_TREE* p_child_tree = NULL); KEYBOARD_STATUS get_cap_status(){return m_cap_status;} void set_style(KEYBOARD_STYLE style) { m_style = style; } diff --git a/gui/gui_include/list_box.h b/gui/gui_include/list_box.h index 46d2604..0398d05 100644 --- a/gui/gui_include/list_box.h +++ b/gui/gui_include/list_box.h @@ -19,7 +19,7 @@ class c_list_box : public c_wnd { public: - int add_item(unsigned short str_id); + int add_item(char* str); void clear_item(); short get_item_count() { return m_item_total; } void select_item(short index); @@ -40,7 +40,7 @@ private: short m_selected_item; short m_item_total; - unsigned short m_item_array[MAX_ITEM_NUM]; + char* m_item_array[MAX_ITEM_NUM]; c_rect m_list_wnd_rect; //rect relative to parent wnd. c_rect m_list_screen_rect; //rect relative to physical screen(frame buffer) }; diff --git a/gui/gui_include/my_resource.h b/gui/gui_include/my_resource.h new file mode 100644 index 0000000..c1b3835 --- /dev/null +++ b/gui/gui_include/my_resource.h @@ -0,0 +1,81 @@ +#ifndef _MY_RESOURCE_H_ +#define _MY_RESOURCE_H_ + +typedef struct struct_font_info FONT_INFO; +typedef struct struct_color_rect COLOR_RECT; +typedef struct struct_bitmap_info BITMAP_INFO; + +//Redefine them to meet your need. +#define DEFAULT_NORMAL_COLOR GLT_RGB(211, 211, 211) +#define DEFAULT_FOCUS_COLOR GLT_RGB(188, 185, 182) +#define DEFAULT_PUSH_COLOR GLT_RGB(165, 162, 159) +#define DEFAULT_FONT_COLOR GLT_RGB(0, 0, 0) + +enum FONT_TYPE +{ + FONT_ENG_S, + FONT_ENG_SB, + FONT_ENG_SBM, + FONT_ENG_SMB, + FONT_ENG_SMB_AA, + FONT_ENG_MB_AA, + FONT_ENG_MMB_AA, + FONT_ENG_MB, + FONT_ENG_LLB, + FONT_ENG_LLLB, + FONT_ENG_LLLLB, + + FONT_MAX +}; + +enum BITMAP_TYPE +{ + BITMAP_UP_BT_NORMAL, + BITMAP_UP_BT_FOCUS, + BITMAP_DOWN_BT_NORMAL, + BITMAP_DOWN_BT_FOCUS, + + BITMAP_MAX +}; + +enum SHAPE_TYPE +{ + BUTTON_NORMAL, + BUTTON_FOCUS, + BUTTON_PUSH, + + LIST_BOX_SELECT, + LIST_BOX_PUSH, + LIST_BOX_EXTEND, + + KEY_BUTTON_NORMAL, + KEY_BUTTON_PUSH, + + SHAPE_MAX +}; + +enum COLOR_TYPE +{ + CTRL_BACK_GROUND, + CTRL_FORE_GROUND, + + COLOR_MAX +}; + +class c_my_resource +{ +public: + static int add_font(FONT_TYPE index, const FONT_INFO* font); + static const FONT_INFO* get_font(FONT_TYPE index); + + static int add_bitmap(BITMAP_TYPE index, const BITMAP_INFO* bmp); + static const BITMAP_INFO* get_bmp(BITMAP_TYPE index); + + static int add_shape(SHAPE_TYPE index, const COLOR_RECT* shape); + static const COLOR_RECT* get_shape(SHAPE_TYPE index); + + static int add_color(COLOR_TYPE index, const unsigned int color); + static const unsigned int get_color(COLOR_TYPE index); +}; + +#endif diff --git a/gui/gui_include/shape_resource.h b/gui/gui_include/shape_resource.h deleted file mode 100644 index 4f0fdf1..0000000 --- a/gui/gui_include/shape_resource.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef _SHAPE_RESOURCE_H_ -#define _SHAPE_RESOURCE_H_ - -extern const CUSTOM_SHAPE g_shape_btn_focus[]; -extern const CUSTOM_SHAPE g_shape_btn_normal[]; -extern const CUSTOM_SHAPE g_shape_btn_push[]; -extern const CUSTOM_SHAPE g_shape_btn_disable[]; - -extern const CUSTOM_SHAPE g_shape_listbox_select[]; -extern const CUSTOM_SHAPE g_shape_listbox_push[]; -extern const CUSTOM_SHAPE g_shape_listbox_push_top[]; -extern const CUSTOM_SHAPE g_shape_listbox_extend[]; - -extern const CUSTOM_SHAPE g_shape_keyboard_btn_normal[]; -extern const CUSTOM_SHAPE g_shape_keyboard_btn_push[]; - -#endif diff --git a/gui/gui_include/spinbox.h b/gui/gui_include/spinbox.h index f8b4632..b4c5f2a 100644 --- a/gui/gui_include/spinbox.h +++ b/gui/gui_include/spinbox.h @@ -58,10 +58,10 @@ protected: short m_min; short m_digit; - c_button m_bt_arrow_up; - c_button m_bt_arrow_down; - c_rect m_bt_arrow_up_rect; - c_rect m_bt_arrow_down_rect; + c_button m_bt_up; + c_button m_bt_down; + c_rect m_bt_up_rect; + c_rect m_bt_down_rect; }; #endif diff --git a/gui/gui_include/table.h b/gui/gui_include/table.h index 4dc9b58..880560e 100644 --- a/gui/gui_include/table.h +++ b/gui/gui_include/table.h @@ -17,7 +17,6 @@ public: int set_col_width(unsigned int index, unsigned int width); int set_item(int row, int col, char* str, unsigned int with_bg_color = -1); - int set_item(int row, int col, unsigned int str_id, unsigned int with_bg_color = -1); unsigned int get_row_num(){ return m_row_num;} unsigned int get_col_num(){ return m_col_num;} @@ -26,7 +25,6 @@ protected: virtual void pre_create_wnd(); void draw_item(int col, int row, const char* str, unsigned int with_bg_color = -1); - void draw_item(int col, int row, unsigned int str_id, unsigned int with_bg_color = -1); unsigned int m_align_type; unsigned int m_row_num; diff --git a/gui/src/button.cpp b/gui/src/button.cpp index cfa6b54..74d317b 100644 --- a/gui/src/button.cpp +++ b/gui/src/button.cpp @@ -2,21 +2,20 @@ #include "core_include/rect.h" #include "core_include/cmd_target.h" #include "core_include/wnd.h" -#include "core_include/resource_type.h" +#include "core_include/resource.h" #include "core_include/bitmap.h" #include "core_include/word.h" #include "core_include/surface.h" -#include "../gui_include/font.h" +#include "../gui_include/my_resource.h" #include "../gui_include/button.h" #include "../gui_include/dialog.h" -#include "../gui_include/shape_resource.h" void c_button::pre_create_wnd() { m_style |= GLT_ATTR_VISIBLE | GLT_ATTR_FOCUS | ALIGN_HCENTER | ALIGN_VCENTER; - m_font_type = FONT_ENG_SMB_AA(); - m_font_color = GLT_RGB(255,255,255); - m_bg_color = GLT_RGB(36,36,36); + m_font_type = c_my_resource::get_font(FONT_ENG_SMB_AA); + m_font_color = c_my_resource::get_color(CTRL_FORE_GROUND); + m_bg_color = c_my_resource::get_color(CTRL_BACK_GROUND); } void c_button::on_focus() @@ -56,16 +55,15 @@ void c_button::on_paint() switch(m_status) { - case STATUS_PUSHED: - if (m_bitmap_pushed) + case STATUS_NORMAL: + if (m_bitmap_normal) { - c_bitmap::draw_bitmap_in_rect(m_surface, m_z_order, m_bitmap_pushed, rect, m_style); + c_bitmap::draw_bitmap_in_rect(m_surface, m_z_order, m_bitmap_normal, rect, m_style); } else { - draw_custom_shape(rect.m_left, rect.m_top, rect.m_right, rect.m_bottom, m_parent->get_bg_color(), g_shape_btn_push); + fill_rect_ex(rect, m_bg_color, c_my_resource::get_shape(BUTTON_NORMAL)); } - m_font_color = GLT_RGB(255,255,255); break; case STATUS_FOCUSED: if (m_bitmap_focus) @@ -74,39 +72,26 @@ void c_button::on_paint() } else { - draw_custom_shape(rect.m_left, rect.m_top, rect.m_right, rect.m_bottom, m_parent->get_bg_color(), g_shape_btn_focus); + fill_rect_ex(rect, m_bg_color, c_my_resource::get_shape(BUTTON_FOCUS)); } - m_font_color = GLT_RGB(255,255,255); break; - case STATUS_NORMAL: - if (m_bitmap) + case STATUS_PUSHED: + if (m_bitmap_pushed) { - c_bitmap::draw_bitmap_in_rect(m_surface, m_z_order, m_bitmap, rect, m_style); + c_bitmap::draw_bitmap_in_rect(m_surface, m_z_order, m_bitmap_pushed, rect, m_style); } else { - draw_custom_shape(rect.m_left, rect.m_top, rect.m_right, rect.m_bottom, m_parent->get_bg_color(), g_shape_btn_normal); + fill_rect_ex(rect, m_bg_color, c_my_resource::get_shape(BUTTON_PUSH)); } - m_font_color = GLT_RGB(255,255,255); - break; - case STATUS_DISABLED: - if (m_bitmap_disable) - { - c_bitmap::draw_bitmap_in_rect(m_surface, m_z_order, m_bitmap_disable, rect, m_style); - } - else - { - draw_custom_shape(rect.m_left, rect.m_top, rect.m_right, rect.m_bottom, m_parent->get_bg_color(), g_shape_btn_disable); - } - m_font_color = GLT_RGB(70,73,76); break; default: ASSERT(FALSE); break; } - if (m_str_id) + if (m_str) { - c_word::draw_string_in_rect(m_surface, m_z_order, m_str_id, rect, m_font_type, m_font_color, COLOR_TRANPARENT, m_style); + c_word::draw_string_in_rect(m_surface, m_z_order, m_str, rect, m_font_type, m_font_color, COLOR_TRANPARENT, m_style); } } diff --git a/gui/src/dialog.cpp b/gui/src/dialog.cpp index 8f9106b..ababc29 100644 --- a/gui/src/dialog.cpp +++ b/gui/src/dialog.cpp @@ -4,13 +4,12 @@ #include "core_include/wnd.h" #include "core_include/msg.h" #include "core_include/surface.h" -#include "core_include/resource_type.h" +#include "core_include/resource.h" #include "core_include/bitmap.h" #include "core_include/word.h" #include "../gui_include/button.h" -#include "../gui_include/font.h" +#include "../gui_include/my_resource.h" #include "../gui_include/dialog.h" -#include "../gui_include/shape_resource.h" #include @@ -40,9 +39,9 @@ void c_dialog::on_paint() } } - if (m_str_id) + if (m_str) { - c_word::draw_string(m_surface, m_z_order, m_str_id, rect.m_left+35, rect.m_top, FONT_ENG_MB_AA(), GLT_RGB(255, 255, 255), COLOR_TRANPARENT, ALIGN_LEFT); + c_word::draw_string(m_surface, m_z_order, m_str, rect.m_left+35, rect.m_top, c_my_resource::get_font(FONT_ENG_MB_AA), GLT_RGB(255, 255, 255), COLOR_TRANPARENT, ALIGN_LEFT); } } diff --git a/gui/src/edit.cpp b/gui/src/edit.cpp index 4335b92..43ff273 100644 --- a/gui/src/edit.cpp +++ b/gui/src/edit.cpp @@ -2,14 +2,13 @@ #include "core_include/rect.h" #include "core_include/cmd_target.h" #include "core_include/wnd.h" -#include "core_include/resource_type.h" +#include "core_include/resource.h" #include "core_include/word.h" #include "core_include/surface.h" #include "../gui_include/button.h" #include "../gui_include/label.h" #include "../gui_include/edit.h" -#include "../gui_include/shape_resource.h" -#include "../gui_include/font.h" +#include "../gui_include/my_resource.h" #include "../gui_include/dialog.h" #include "../gui_include/keyboard.h" #include @@ -27,9 +26,9 @@ static c_keyboard s_keyboard; void c_edit::pre_create_wnd() { m_style |= GLT_ATTR_VISIBLE | GLT_ATTR_FOCUS | ALIGN_HCENTER | ALIGN_VCENTER | KEY_BOARD_STYLE; - m_font_type = FONT_ENG_SMB_AA(); - m_font_color = GLT_RGB(33,41,57); - m_bg_color = GLT_RGB(2,124,165); + m_font_type = c_my_resource::get_font(FONT_ENG_SMB_AA); + m_font_color = c_my_resource::get_color(CTRL_FORE_GROUND); + m_bg_color = c_my_resource::get_color(CTRL_BACK_GROUND); memset(m_str_input, 0, sizeof(m_str_input)); memset(m_str, 0, sizeof(m_str)); @@ -114,14 +113,14 @@ void c_edit::on_paint() empty_rect.Empty(); switch(m_status) { - case STATUS_PUSHED: - if (m_z_order == m_parent->get_z_order()) + case STATUS_NORMAL: + if (m_z_order > m_parent->get_z_order()) { - m_z_order++; - show_keyboard(); + s_keyboard.disconnect(); + m_surface->set_frame_layer(empty_rect, s_keyboard.get_z_order()); + m_z_order = m_parent->get_z_order(); } - m_surface->draw_custom_shape(rect.m_left, rect.m_top, rect.m_right, rect.m_bottom, m_parent->get_bg_color(), g_shape_listbox_select, m_parent->get_z_order()); - m_font_color = GLT_RGB(255,255,255); + fill_rect_ex(rect, m_bg_color, c_my_resource::get_shape(BUTTON_NORMAL)); break; case STATUS_FOCUSED: if (m_z_order > m_parent->get_z_order()) @@ -130,18 +129,15 @@ void c_edit::on_paint() m_surface->set_frame_layer(empty_rect, s_keyboard.get_z_order()); m_z_order = m_parent->get_z_order(); } - draw_custom_shape(rect.m_left, rect.m_top, rect.m_right, rect.m_bottom, m_parent->get_bg_color(), g_shape_btn_focus); - m_font_color = GLT_RGB(255,255,255); + fill_rect_ex(rect, m_bg_color, c_my_resource::get_shape(BUTTON_FOCUS)); break; - case STATUS_NORMAL: - if (m_z_order > m_parent->get_z_order()) + case STATUS_PUSHED: + if (m_z_order == m_parent->get_z_order()) { - s_keyboard.disconnect(); - m_surface->set_frame_layer(empty_rect, s_keyboard.get_z_order()); - m_z_order = m_parent->get_z_order(); + m_z_order++; + show_keyboard(); } - draw_custom_shape(rect.m_left, rect.m_top, rect.m_right, rect.m_bottom, m_parent->get_bg_color(), g_shape_btn_normal); - m_font_color = GLT_RGB(255,255,255); + m_surface->fill_rect_ex(rect.m_left, rect.m_top, rect.m_right, rect.m_bottom, m_bg_color, c_my_resource::get_shape(LIST_BOX_SELECT), m_parent->get_z_order()); break; default: ASSERT(FALSE); diff --git a/gui/src/keyboard.cpp b/gui/src/keyboard.cpp index 7248917..d10a818 100644 --- a/gui/src/keyboard.cpp +++ b/gui/src/keyboard.cpp @@ -1,12 +1,12 @@ #include "core_include/api.h" #include "core_include/rect.h" -#include "core_include/resource_type.h" +#include "core_include/resource.h" #include "core_include/word.h" #include "core_include/cmd_target.h" #include "core_include/wnd.h" #include "core_include/surface.h" #include "../gui_include/button.h" -#include "../gui_include/shape_resource.h" +#include "../gui_include/my_resource.h" #include "../gui_include/keyboard.h" #include @@ -145,16 +145,16 @@ ON_GLT_BN_CLICKED('\n', c_keyboard::on_enter_clicked) ON_GLT_BN_CLICKED(0x1B, c_keyboard::on_esc_clicked) GLT_END_MESSAGE_MAP() -int c_keyboard::create(c_wnd *parent, unsigned short resource_id, unsigned short str_id, +int c_keyboard::create(c_wnd *parent, unsigned short resource_id, char* str, short x, short y, short width, short height, WND_TREE* p_child_tree) { if (m_style == STYLE_ALL_BOARD) { - return c_wnd::connect(parent, resource_id, str_id, (0 - x), (height - y - KEYBOARD_HEIGHT), KEYBOARD_WIDTH, KEYBOARD_HEIGHT, g_key_board_children); + return c_wnd::connect(parent, resource_id, str, (0 - x), (height - y - KEYBOARD_HEIGHT), KEYBOARD_WIDTH, KEYBOARD_HEIGHT, g_key_board_children); } else if(m_style == STYLE_NUM_BOARD) { - return c_wnd::connect(parent, resource_id, str_id, x, y, NUM_BOARD_WIDTH, NUM_BOARD_HEIGHT, g_number_board_children); + return c_wnd::connect(parent, resource_id, str, x, y, NUM_BOARD_WIDTH, NUM_BOARD_HEIGHT, g_number_board_children); } else { @@ -230,14 +230,14 @@ void c_keyboard_button::on_paint() get_screen_rect(rect); switch(m_status) { - case STATUS_PUSHED: - draw_custom_shape(rect.m_left, rect.m_top, rect.m_right, rect.m_bottom, m_parent->get_bg_color(), g_shape_keyboard_btn_push); + case STATUS_NORMAL: + fill_rect_ex(rect, m_bg_color, c_my_resource::get_shape(KEY_BUTTON_NORMAL)); break; case STATUS_FOCUSED: - draw_custom_shape(rect.m_left, rect.m_top, rect.m_right, rect.m_bottom, m_parent->get_bg_color(), g_shape_btn_focus); + fill_rect_ex(rect, m_bg_color, c_my_resource::get_shape(BUTTON_FOCUS)); break; - case STATUS_NORMAL: - draw_custom_shape(rect.m_left, rect.m_top, rect.m_right, rect.m_bottom, m_parent->get_bg_color(), g_shape_keyboard_btn_normal); + case STATUS_PUSHED: + fill_rect_ex(rect, m_bg_color, c_my_resource::get_shape(KEY_BUTTON_PUSH)); break; default: ASSERT(FALSE); diff --git a/gui/src/label.cpp b/gui/src/label.cpp index 6eb6d05..6b2cfa1 100644 --- a/gui/src/label.cpp +++ b/gui/src/label.cpp @@ -3,10 +3,10 @@ #include "core_include/cmd_target.h" #include "core_include/wnd.h" #include "core_include/surface.h" -#include "core_include/resource_type.h" +#include "core_include/resource.h" #include "core_include/bitmap.h" #include "core_include/word.h" -#include "../gui_include/font.h" +#include "../gui_include/my_resource.h" #include "../gui_include/label.h" void c_label::pre_create_wnd() @@ -14,7 +14,7 @@ void c_label::pre_create_wnd() m_style = GLT_ATTR_VISIBLE | ALIGN_LEFT | ALIGN_VCENTER; m_font_color = GLT_RGB(255,255,255); - m_font_type = FONT_ENG_SMB_AA(); + m_font_type = c_my_resource::get_font(FONT_ENG_SMB_AA); m_bg_color = get_parent()->get_bg_color(); } @@ -23,15 +23,9 @@ void c_label::on_paint() c_rect rect; get_screen_rect(rect); - if (m_bitmap) + if (m_str) { fill_rect(rect.m_left, rect.m_top, rect.m_right, rect.m_bottom,m_bg_color); - c_bitmap::draw_bitmap_in_rect(m_surface, m_z_order, m_bitmap, rect, m_style); - } - - if (m_str_id) - { - fill_rect(rect.m_left, rect.m_top, rect.m_right, rect.m_bottom,m_bg_color); - c_word::draw_string_in_rect(m_surface, m_z_order, m_str_id, rect, m_font_type, m_font_color, COLOR_TRANPARENT, m_style); + c_word::draw_string_in_rect(m_surface, m_z_order, m_str, rect, m_font_type, m_font_color, COLOR_TRANPARENT, m_style); } } diff --git a/gui/src/list_box.cpp b/gui/src/list_box.cpp index 52dab8c..b2d1cd3 100644 --- a/gui/src/list_box.cpp +++ b/gui/src/list_box.cpp @@ -1,17 +1,16 @@ #include "core_include/api.h" #include "core_include/rect.h" #include "core_include/cmd_target.h" -#include "core_include/resource_type.h" +#include "core_include/resource.h" #include "core_include/wnd.h" #include "core_include/surface.h" #include "core_include/bitmap.h" #include "core_include/word.h" #include "../gui_include/button.h" -#include "../gui_include/font.h" +#include "../gui_include/my_resource.h" #include "../gui_include/dialog.h" #include "../gui_include/list_box.h" -#include "../gui_include/shape_resource.h" #include #define ITEM_HEIGHT 45 @@ -21,15 +20,16 @@ void c_list_box::pre_create_wnd() m_style |= GLT_ATTR_VISIBLE | GLT_ATTR_FOCUS | ALIGN_HCENTER | ALIGN_VCENTER; memset(m_item_array, 0, sizeof(m_item_array)); m_item_total = 0; + m_font_color = c_my_resource::get_color(CTRL_FORE_GROUND); } void c_list_box::on_init_children() { m_item_total = 0; m_selected_item = 0; - m_font_type = FONT_ENG_SMB_AA(); - m_font_color = GLT_RGB(255,255,255); - m_bg_color = GLT_RGB(33,41,57); + m_font_type = c_my_resource::get_font(FONT_ENG_SMB_AA); + m_font_color = c_my_resource::get_color(CTRL_FORE_GROUND); + m_bg_color = c_my_resource::get_color(CTRL_BACK_GROUND); } void c_list_box::on_focus() @@ -52,10 +52,25 @@ void c_list_box::on_paint() switch(m_status) { + case STATUS_NORMAL: + if (m_z_order > m_parent->get_z_order()) + { + m_surface->set_frame_layer(empty_rect, m_z_order); + m_z_order = m_parent->get_z_order(); + } + fill_rect_ex(rect, m_bg_color, c_my_resource::get_shape(BUTTON_NORMAL)); + break; + case STATUS_FOCUSED: + if (m_z_order > m_parent->get_z_order()) + { + m_surface->set_frame_layer(empty_rect, m_z_order); + m_z_order = m_parent->get_z_order(); + } + fill_rect_ex(rect, m_bg_color, c_my_resource::get_shape(BUTTON_FOCUS)); + break; case STATUS_PUSHED: - draw_custom_shape(rect.m_left, rect.m_top, rect.m_right, rect.m_bottom, m_parent->get_bg_color(), g_shape_listbox_push); - m_font_color = GLT_RGB(2,124,165); - c_word::draw_string_in_rect(m_surface, m_z_order, m_item_array[m_selected_item], rect, m_font_type, m_font_color, COLOR_TRANPARENT, ALIGN_HCENTER | ALIGN_VCENTER); + fill_rect_ex(rect, m_bg_color, c_my_resource::get_shape(LIST_BOX_PUSH)); + c_word::draw_string_in_rect(m_surface, m_z_order, m_item_array[m_selected_item], rect, m_font_type, GLT_RGB(2, 124, 165), COLOR_TRANPARENT, ALIGN_HCENTER | ALIGN_VCENTER); //draw list if (m_item_total > 0) { @@ -68,35 +83,6 @@ void c_list_box::on_paint() return; } break; - case STATUS_FOCUSED: - if (m_z_order > m_parent->get_z_order()) - { - m_surface->set_frame_layer(empty_rect, m_z_order); - m_z_order = m_parent->get_z_order(); - } - draw_custom_shape(rect.m_left, rect.m_top, rect.m_right, rect.m_bottom, m_parent->get_bg_color(), g_shape_btn_focus); - m_font_color = GLT_RGB(255,255,255); - break; - case STATUS_NORMAL: - if (m_z_order > m_parent->get_z_order()) - { - m_surface->set_frame_layer(empty_rect, m_z_order); - m_z_order = m_parent->get_z_order(); - } - draw_custom_shape(rect.m_left, rect.m_top, rect.m_right, rect.m_bottom, m_parent->get_bg_color(), g_shape_btn_normal); - m_font_color = GLT_RGB(255,255,255); - break; - case STATUS_DISABLED: - if (m_bitmap_disable) - { - c_bitmap::draw_bitmap_in_rect(m_surface, m_z_order, m_bitmap_disable, rect, m_style); - } - else - { - draw_custom_shape(rect.m_left, rect.m_top, rect.m_right, rect.m_bottom, m_parent->get_bg_color(), g_shape_btn_disable); - } - m_font_color = GLT_RGB(70,73,76); - break; default: ASSERT(FALSE); break; @@ -175,7 +161,7 @@ void c_list_box::update_list_size() void c_list_box::show_list() { - draw_custom_shape(m_list_screen_rect.m_left, m_list_screen_rect.m_top, m_list_screen_rect.m_right, m_list_screen_rect.m_bottom, m_bg_color, g_shape_listbox_extend); + fill_rect_ex(m_list_screen_rect, m_bg_color, c_my_resource::get_shape(LIST_BOX_EXTEND)); m_font_color = GLT_RGB(255, 255, 255); //draw all items @@ -195,20 +181,20 @@ void c_list_box::show_list() tmp_rect.m_top = m_list_screen_rect.m_top + m_selected_item * ITEM_HEIGHT; tmp_rect.m_bottom = tmp_rect.m_top + ITEM_HEIGHT; - draw_custom_shape(tmp_rect.m_left, tmp_rect.m_top, tmp_rect.m_right, tmp_rect.m_bottom, GLT_RGB(0, 255, 0), g_shape_listbox_select); + fill_rect_ex(tmp_rect, GLT_RGB(0, 255, 0), c_my_resource::get_shape(LIST_BOX_SELECT)); m_font_color = GLT_RGB(255, 255, 255); c_word::draw_string_in_rect(m_surface, m_z_order, m_item_array[m_selected_item], tmp_rect, m_font_type, m_font_color, COLOR_TRANPARENT, ALIGN_HCENTER | ALIGN_VCENTER); } -int c_list_box::add_item(unsigned short str_id) +int c_list_box::add_item(char* str) { if (m_item_total >= MAX_ITEM_NUM) { ASSERT(FALSE); return -1; } - m_item_array[m_item_total++] = str_id; + m_item_array[m_item_total++] = str; update_list_size(); return 0; } diff --git a/gui/src/my_resource.cpp b/gui/src/my_resource.cpp new file mode 100644 index 0000000..e63f304 --- /dev/null +++ b/gui/src/my_resource.cpp @@ -0,0 +1,52 @@ +#include "core_include/rect.h" +#include "core_include/resource.h" +#include "../gui_include/my_resource.h" + +static const FONT_INFO* s_font_map[FONT_MAX]; +static const BITMAP_INFO* s_bmp_map[BITMAP_MAX]; +static const COLOR_RECT* s_shape_map[SHAPE_MAX]; +static unsigned int s_color_map[COLOR_MAX]; + +int c_my_resource::add_font(FONT_TYPE index, const FONT_INFO* font) +{ + s_font_map[index] = font; + return 0; +} + +const FONT_INFO* c_my_resource::get_font(FONT_TYPE index) +{ + return s_font_map[index]; +} + +int c_my_resource::add_bitmap(BITMAP_TYPE index, const BITMAP_INFO* bmp) +{ + s_bmp_map[index] = bmp; + return 0; +} + +const BITMAP_INFO* c_my_resource::get_bmp(BITMAP_TYPE index) +{ + return s_bmp_map[index]; +} + +int c_my_resource::add_shape(SHAPE_TYPE index, const COLOR_RECT* shape) +{ + s_shape_map[index] = shape; + return 0; +} + +const COLOR_RECT* c_my_resource::get_shape(SHAPE_TYPE index) +{ + return s_shape_map[index]; +} + +int c_my_resource::add_color(COLOR_TYPE index, const unsigned int color) +{ + s_color_map[index] = color; + return 0; +} + +const unsigned int c_my_resource::get_color(COLOR_TYPE index) +{ + return s_color_map[index]; +} \ No newline at end of file diff --git a/gui/src/shape_resource.cpp b/gui/src/shape_resource.cpp deleted file mode 100644 index afa36d2..0000000 --- a/gui/src/shape_resource.cpp +++ /dev/null @@ -1,1291 +0,0 @@ -#include "core_include/api.h" -#include "core_include/rect.h" -#include "core_include/surface.h" -#include "../gui_include/shape_resource.h" - -#define LIST_BOX_SELECT \ -{ \ - {0,0,0,-1, GLT_RGB(2,124,165)}, \ - {1,1,1,-2, GLT_RGB(2,124,165)}, \ - {2,2,2,-3, GLT_RGB(2,124,165)}, \ - \ - {-1,0,-1,-1, GLT_RGB(2,124,165)}, \ - {-2,1,-2,-2, GLT_RGB(2,124,165)}, \ - {-3,2,-3,-3, GLT_RGB(2,124,165)}, \ - \ - {1,0,-2,0, GLT_RGB(2,124,165)}, \ - {2,1,-3,1, GLT_RGB(2,124,165)}, \ - {3,2,-4,2, GLT_RGB(2,124,165)}, \ - \ - {1,-1,-2,-1, GLT_RGB(2,124,165)}, \ - {2,-2,-3,-2, GLT_RGB(2,124,165)}, \ - {3,-3,-4,-3, GLT_RGB(2,124,165)}, \ - \ - {3,3,-4,-4, GLT_RGB(2,124,165)}, \ - \ - { INVALID_RGN, 0, 0, 0, 0}\ -} - -#define BUTTON_NORMAL \ -{\ - {4,0,-5,0, GLT_RGB(2,124,165)}, \ - {0,4,0,-5, GLT_RGB(2,124,165)}, \ - {4,-1,-5,-1, GLT_RGB(2,124,165)}, \ - {-1,4,-1,-5, GLT_RGB(2,124,165)}, \ - \ - {4,1,-5,1, COLOR_USERDEF}, \ - {3,2,-4,2, COLOR_USERDEF}, \ - {2,3,-3,3, COLOR_USERDEF}, \ - {1,4,-2,4, COLOR_USERDEF}, \ - \ - {4,-2,-5,-2, COLOR_USERDEF}, \ - {3,-3,-4,-3, COLOR_USERDEF}, \ - {2,-4,-3,-4, COLOR_USERDEF}, \ - {1,-5,-2,-5, COLOR_USERDEF}, \ - \ - {1,4,-2,-5, COLOR_USERDEF}, \ - \ - {-4,0,-4,0, GLT_RGB(2,124,165)}, \ - {-4,1,-4,1, GLT_RGB(2,124,165)}, \ - {-3,0,-3,0, GLT_RGB(2,124,165)}, \ - {-3,1,-3,1, GLT_RGB(2,124,165)}, \ - {-3,2,-3,2, GLT_RGB(2,124,165)}, \ - {-2,1,-2,1, GLT_RGB(2,124,165)}, \ - {-2,2,-2,2, GLT_RGB(2,124,165)}, \ - {-2,3,-2,3, GLT_RGB(2,124,165)}, \ - {-1,2,-1,2, GLT_RGB(2,124,165)}, \ - {-1,3,-1,3, GLT_RGB(2,124,165)}, \ - \ - {3,0,3,0, GLT_RGB(2,124,165)}, \ - {3,1,3,1, GLT_RGB(2,124,165)}, \ - {2,0,2,0, GLT_RGB(2,124,165)}, \ - {2,1,2,1, GLT_RGB(2,124,165)}, \ - {2,2,2,2, GLT_RGB(2,124,165)}, \ - {1,1,1,1, GLT_RGB(2,124,165)}, \ - {1,2,1,2, GLT_RGB(2,124,165)}, \ - {1,3,1,3, GLT_RGB(2,124,165)}, \ - {0,2,0,2, GLT_RGB(2,124,165)}, \ - {0,3,0,3, GLT_RGB(2,124,165)}, \ - \ - {3,-1,3,-1, GLT_RGB(2,124,165)}, \ - {3,-2,3,-2, GLT_RGB(2,124,165)}, \ - {2,-1,2,-1, GLT_RGB(2,124,165)}, \ - {2,-2,2,-2, GLT_RGB(2,124,165)}, \ - {2,-3,2,-3, GLT_RGB(2,124,165)}, \ - {1,-2,1,-2, GLT_RGB(2,124,165)}, \ - {1,-3,1,-3, GLT_RGB(2,124,165)}, \ - {1,-4,1,-4, GLT_RGB(2,124,165)}, \ - {0,-3,0,-3, GLT_RGB(2,124,165)}, \ - {0,-4,0,-4, GLT_RGB(2,124,165)}, \ - \ - {-4,-1,-4,-1, GLT_RGB(2,124,165)}, \ - {-4,-2,-4,-2, GLT_RGB(2,124,165)}, \ - {-3,-1,-3,-1, GLT_RGB(2,124,165)}, \ - {-3,-2,-3,-2, GLT_RGB(2,124,165)}, \ - {-3,-3,-3,-3, GLT_RGB(2,124,165)}, \ - {-2,-2,-2,-2, GLT_RGB(2,124,165)}, \ - {-2,-3,-2,-3, GLT_RGB(2,124,165)}, \ - {-2,-4,-2,-4, GLT_RGB(2,124,165)}, \ - {-1,-3,-1,-3, GLT_RGB(2,124,165)}, \ - {-1,-4,-1,-4, GLT_RGB(2,124,165)}, \ - \ - { INVALID_RGN, 0, 0, 0, 0}\ -} - -#define BUTTON_FOCUS \ -{ \ - {4,0,-5,0, GLT_RGB(2,124,165)}, \ - {0,4,0,-5, GLT_RGB(2,124,165)}, \ - {4,-1,-5,-1, GLT_RGB(2,124,165)}, \ - {-1,4,-1,-5, GLT_RGB(2,124,165)}, \ - \ - {4,1,-5,1, GLT_RGB(2,124,165)}, \ - {3,2,-4,2, GLT_RGB(2,124,165)}, \ - {2,3,-3,3, GLT_RGB(2,124,165)}, \ - {1,4,-2,4, GLT_RGB(2,124,165)}, \ - \ - {4,-2,-5,-2, GLT_RGB(2,124,165)}, \ - {3,-3,-4,-3, GLT_RGB(2,124,165)}, \ - {2,-4,-3,-4, GLT_RGB(2,124,165)}, \ - {1,-5,-2,-5, GLT_RGB(2,124,165)}, \ - \ - {1,4,-2,-5, GLT_RGB(2,124,165) }, \ - \ - {-4,0,-4,0, GLT_RGB(2,124,165)}, \ - {-4,1,-4,1, GLT_RGB(2,124,165)}, \ - {-3,0,-3,0, GLT_RGB(2,124,165)}, \ - {-3,1,-3,1, GLT_RGB(2,124,165)}, \ - {-3,2,-3,2, GLT_RGB(2,124,165)}, \ - {-2,1,-2,1, GLT_RGB(2,124,165)}, \ - {-2,2,-2,2, GLT_RGB(2,124,165)}, \ - {-2,3,-2,3, GLT_RGB(2,124,165)}, \ - {-1,2,-1,2, GLT_RGB(2,124,165)}, \ - {-1,3,-1,3, GLT_RGB(2,124,165)}, \ - \ - {3,0,3,0, GLT_RGB(2,124,165)}, \ - {3,1,3,1, GLT_RGB(2,124,165)}, \ - {2,0,2,0, GLT_RGB(2,124,165)}, \ - {2,1,2,1, GLT_RGB(2,124,165)}, \ - {2,2,2,2, GLT_RGB(2,124,165)}, \ - {1,1,1,1, GLT_RGB(2,124,165)}, \ - {1,2,1,2, GLT_RGB(2,124,165)}, \ - {1,3,1,3, GLT_RGB(2,124,165)}, \ - {0,2,0,2, GLT_RGB(2,124,165)}, \ - {0,3,0,3, GLT_RGB(2,124,165)}, \ - \ - {3,-1,3,-1, GLT_RGB(2,124,165)}, \ - {3,-2,3,-2, GLT_RGB(2,124,165)}, \ - {2,-1,2,-1, GLT_RGB(2,124,165)}, \ - {2,-2,2,-2, GLT_RGB(2,124,165)}, \ - {2,-3,2,-3, GLT_RGB(2,124,165)}, \ - {1,-2,1,-2, GLT_RGB(2,124,165)}, \ - {1,-3,1,-3, GLT_RGB(2,124,165)}, \ - {1,-4,1,-4, GLT_RGB(2,124,165)}, \ - {0,-3,0,-3, GLT_RGB(2,124,165)}, \ - {0,-4,0,-4, GLT_RGB(2,124,165)}, \ - \ - {-4,-1,-4,-1, GLT_RGB(2,124,165)}, \ - {-4,-2,-4,-2, GLT_RGB(2,124,165)}, \ - {-3,-1,-3,-1, GLT_RGB(2,124,165)}, \ - {-3,-2,-3,-2, GLT_RGB(2,124,165)}, \ - {-3,-3,-3,-3, GLT_RGB(2,124,165)}, \ - {-2,-2,-2,-2, GLT_RGB(2,124,165)}, \ - {-2,-3,-2,-3, GLT_RGB(2,124,165)}, \ - {-2,-4,-2,-4, GLT_RGB(2,124,165)}, \ - {-1,-3,-1,-3, GLT_RGB(2,124,165)}, \ - {-1,-4,-1,-4, GLT_RGB(2,124,165)}, \ - \ - { INVALID_RGN, 0, 0, 0, 0}\ -} - - -#define BUTTON_PUSH \ -{ \ - {4,0,-5,0, GLT_RGB(0,255,0)}, \ - {0,4,0,-5, GLT_RGB(0,255,0)}, \ - {4,-1,-5,-1, GLT_RGB(0,255,0)}, \ - {-1,4,-1,-5, GLT_RGB(0,255,0)}, \ - \ - {4,1,-5,1, COLOR_USERDEF}, \ - {3,2,-4,2, COLOR_USERDEF}, \ - {2,3,-3,3, COLOR_USERDEF}, \ - {1,4,-2,4, COLOR_USERDEF}, \ - \ - {4,-2,-5,-2, COLOR_USERDEF}, \ - {3,-3,-4,-3, COLOR_USERDEF}, \ - {2,-4,-3,-4, COLOR_USERDEF}, \ - {1,-5,-2,-5, COLOR_USERDEF}, \ - \ - {1,4,-2,-5, COLOR_USERDEF }, \ - \ - {-4,0,-4,0, GLT_RGB(0,255,0)}, \ - {-4,1,-4,1, GLT_RGB(0,255,0)}, \ - {-3,0,-3,0, GLT_RGB(0,255,0)}, \ - {-3,1,-3,1, GLT_RGB(0,255,0)}, \ - {-3,2,-3,2, GLT_RGB(0,255,0)}, \ - {-2,1,-2,1, GLT_RGB(0,255,0)}, \ - {-2,2,-2,2, GLT_RGB(0,255,0)}, \ - {-2,3,-2,3, GLT_RGB(0,255,0)}, \ - {-1,2,-1,2, GLT_RGB(0,255,0)}, \ - {-1,3,-1,3, GLT_RGB(0,255,0)}, \ - \ - {3,0,3,0, GLT_RGB(0,255,0)}, \ - {3,1,3,1, GLT_RGB(0,255,0)}, \ - {2,0,2,0, GLT_RGB(0,255,0)}, \ - {2,1,2,1, GLT_RGB(0,255,0)}, \ - {2,2,2,2, GLT_RGB(0,255,0)}, \ - {1,1,1,1, GLT_RGB(0,255,0)}, \ - {1,2,1,2, GLT_RGB(0,255,0)}, \ - {1,3,1,3, GLT_RGB(0,255,0)}, \ - {0,2,0,2, GLT_RGB(0,255,0)}, \ - {0,3,0,3, GLT_RGB(0,255,0)}, \ - \ - {3,-1,3,-1, GLT_RGB(0,255,0)}, \ - {3,-2,3,-2, GLT_RGB(0,255,0)}, \ - {2,-1,2,-1, GLT_RGB(0,255,0)}, \ - {2,-2,2,-2, GLT_RGB(0,255,0)}, \ - {2,-3,2,-3, GLT_RGB(0,255,0)}, \ - {1,-2,1,-2, GLT_RGB(0,255,0)}, \ - {1,-3,1,-3, GLT_RGB(0,255,0)}, \ - {1,-4,1,-4, GLT_RGB(0,255,0)}, \ - {0,-3,0,-3, GLT_RGB(0,255,0)}, \ - {0,-4,0,-4, GLT_RGB(0,255,0)}, \ - \ - {-4,-1,-4,-1, GLT_RGB(0,255,0)}, \ - {-4,-2,-4,-2, GLT_RGB(0,255,0)}, \ - {-3,-1,-3,-1, GLT_RGB(0,255,0)}, \ - {-3,-2,-3,-2, GLT_RGB(0,255,0)}, \ - {-3,-3,-3,-3, GLT_RGB(0,255,0)}, \ - {-2,-2,-2,-2, GLT_RGB(0,255,0)}, \ - {-2,-3,-2,-3, GLT_RGB(0,255,0)}, \ - {-2,-4,-2,-4, GLT_RGB(0,255,0)}, \ - {-1,-3,-1,-3, GLT_RGB(0,255,0)}, \ - {-1,-4,-1,-4, GLT_RGB(0,255,0)}, \ - \ - { INVALID_RGN, 0, 0, 0, 0}\ -} - -#define LIST_BOX_PUSH \ -{ \ - {4,0,-5,0, GLT_RGB(2,124,165)}, \ - {0,4,0,-5, GLT_RGB(2,124,165)}, \ - {4,-1,-5,-1, GLT_RGB(2,124,165)}, \ - {-1,4,-1,-5, GLT_RGB(2,124,165)}, \ - \ - {4,1,-5,1, COLOR_USERDEF}, \ - {3,2,-4,2, COLOR_USERDEF}, \ - {2,3,-3,3, COLOR_USERDEF}, \ - {1,4,-2,4, COLOR_USERDEF}, \ - \ - {4,-2,-5,-2, COLOR_USERDEF}, \ - {3,-3,-4,-3, COLOR_USERDEF}, \ - {2,-4,-3,-4, COLOR_USERDEF}, \ - {1,-5,-2,-5, COLOR_USERDEF}, \ - \ - {1,4,-2,-5, COLOR_USERDEF}, \ - \ - /**/\ - {-4,0,-4,0, GLT_RGB(2,124,165)}, \ - {-4,1,-4,1, GLT_RGB(2,124,165)}, \ - {-3,0,-3,0, GLT_RGB(2,124,165)}, \ - {-3,1,-3,1, GLT_RGB(2,124,165)}, \ - {-3,2,-3,2, GLT_RGB(2,124,165)}, \ - {-2,1,-2,1, GLT_RGB(2,124,165)}, \ - {-2,2,-2,2, GLT_RGB(2,124,165)}, \ - {-2,3,-2,3, GLT_RGB(2,124,165)}, \ - {-1,2,-1,2, GLT_RGB(2,124,165)}, \ - {-1,3,-1,3, GLT_RGB(2,124,165)}, \ - /**/\ - {3,0,3,0, GLT_RGB(2,124,165)}, \ - {3,1,3,1, GLT_RGB(2,124,165)}, \ - {2,0,2,0, GLT_RGB(2,124,165)}, \ - {2,1,2,1, GLT_RGB(2,124,165)}, \ - {2,2,2,2, GLT_RGB(2,124,165)}, \ - {1,1,1,1, GLT_RGB(2,124,165)}, \ - {1,2,1,2, GLT_RGB(2,124,165)}, \ - {1,3,1,3, GLT_RGB(2,124,165)}, \ - {0,2,0,2, GLT_RGB(2,124,165)}, \ - {0,3,0,3, GLT_RGB(2,124,165)}, \ - /**/\ - {3,-1,3,-1, GLT_RGB(2,124,165)}, \ - {3,-2,3,-2, GLT_RGB(2,124,165)}, \ - {2,-1,2,-1, GLT_RGB(2,124,165)}, \ - {2,-2,2,-2, GLT_RGB(2,124,165)}, \ - {2,-3,2,-3, GLT_RGB(2,124,165)}, \ - {1,-2,1,-2, GLT_RGB(2,124,165)}, \ - {1,-3,1,-3, GLT_RGB(2,124,165)}, \ - {1,-4,1,-4, GLT_RGB(2,124,165)}, \ - {0,-3,0,-3, GLT_RGB(2,124,165)}, \ - {0,-4,0,-4, GLT_RGB(2,124,165)}, \ - /**/\ - {-4,-1,-4,-1, GLT_RGB(2,124,165)}, \ - {-4,-2,-4,-2, GLT_RGB(2,124,165)}, \ - {-3,-1,-3,-1, GLT_RGB(2,124,165)}, \ - {-3,-2,-3,-2, GLT_RGB(2,124,165)}, \ - {-3,-3,-3,-3, GLT_RGB(2,124,165)}, \ - {-2,-2,-2,-2, GLT_RGB(2,124,165)}, \ - {-2,-3,-2,-3, GLT_RGB(2,124,165)}, \ - {-2,-4,-2,-4, GLT_RGB(2,124,165)}, \ - {-1,-3,-1,-3, GLT_RGB(2,124,165)}, \ - {-1,-4,-1,-4, GLT_RGB(2,124,165)}, \ - { INVALID_RGN, 0, 0, 0, 0}\ -} - - -#define LIST_BOX_EXTEND \ -{\ - {0,0,-1,0, GLT_RGB(70,73,76)}, \ - {0,0,0,-1, GLT_RGB(70,73,76)}, \ - {0,-1,-1,-1, GLT_RGB(70,73,76)}, \ - {-1,0,-1,-1, GLT_RGB(70,73,76)}, \ - {1,1,-2,-2, GLT_RGB(70,73,76)}, \ - { INVALID_RGN, 0, 0, 0, 0}\ -} - -#define BUTTON_DISABLE \ -{\ - {4,0,-5,0, GLT_RGB(70,73,76)}, \ - {0,4,0,-5, GLT_RGB(70,73,76)}, \ - {4,-1,-5,-1, GLT_RGB(70,73,76)}, \ - {-1,4,-1,-5, GLT_RGB(70,73,76)}, \ - {4,1,-5,1, COLOR_USERDEF}, \ - {3,2,-4,2, COLOR_USERDEF}, \ - {2,3,-3,3, COLOR_USERDEF}, \ - {1,4,-2,4, COLOR_USERDEF}, \ - {4,-2,-5,-2, COLOR_USERDEF}, \ - {3,-3,-4,-3, COLOR_USERDEF}, \ - {2,-4,-3,-4, COLOR_USERDEF}, \ - {1,-5,-2,-5, COLOR_USERDEF}, \ - {1,4,-2,-5, COLOR_USERDEF}, \ - {-4,0,-4,0, GLT_RGB(70,73,76)}, \ - {-4,1,-4,1, GLT_RGB(70,73,76)}, \ - {-3,0,-3,0, GLT_RGB(70,73,76)}, \ - {-3,1,-3,1, GLT_RGB(70,73,76)}, \ - {-3,2,-3,2, GLT_RGB(70,73,76)}, \ - {-2,1,-2,1, GLT_RGB(70,73,76)}, \ - {-2,2,-2,2, GLT_RGB(70,73,76)}, \ - {-2,3,-2,3, GLT_RGB(70,73,76)}, \ - {-1,2,-1,2, GLT_RGB(70,73,76)}, \ - {-1,3,-1,3, GLT_RGB(70,73,76)}, \ - \ - {3,0,3,0, GLT_RGB(70,73,76)}, \ - {3,1,3,1, GLT_RGB(70,73,76)}, \ - {2,0,2,0, GLT_RGB(70,73,76)}, \ - {2,1,2,1, GLT_RGB(70,73,76)}, \ - {2,2,2,2, GLT_RGB(70,73,76)}, \ - {1,1,1,1, GLT_RGB(70,73,76)}, \ - {1,2,1,2, GLT_RGB(70,73,76)}, \ - {1,3,1,3, GLT_RGB(70,73,76)}, \ - {0,2,0,2, GLT_RGB(70,73,76)}, \ - {0,3,0,3, GLT_RGB(70,73,76)}, \ - \ - {3,-1,3,-1, GLT_RGB(70,73,76)}, \ - {3,-2,3,-2, GLT_RGB(70,73,76)}, \ - {2,-1,2,-1, GLT_RGB(70,73,76)}, \ - {2,-2,2,-2, GLT_RGB(70,73,76)}, \ - {2,-3,2,-3, GLT_RGB(70,73,76)}, \ - {1,-2,1,-2, GLT_RGB(70,73,76)}, \ - {1,-3,1,-3, GLT_RGB(70,73,76)}, \ - {1,-4,1,-4, GLT_RGB(70,73,76)}, \ - {0,-3,0,-3, GLT_RGB(70,73,76)}, \ - {0,-4,0,-4, GLT_RGB(70,73,76)}, \ - \ - {-4,-1,-4,-1, GLT_RGB(70,73,76)}, \ - {-4,-2,-4,-2, GLT_RGB(70,73,76)}, \ - {-3,-1,-3,-1, GLT_RGB(70,73,76)}, \ - {-3,-2,-3,-2, GLT_RGB(70,73,76)}, \ - {-3,-3,-3,-3, GLT_RGB(70,73,76)}, \ - {-2,-2,-2,-2, GLT_RGB(70,73,76)}, \ - {-2,-3,-2,-3, GLT_RGB(70,73,76)}, \ - {-2,-4,-2,-4, GLT_RGB(70,73,76)}, \ - {-1,-3,-1,-3, GLT_RGB(70,73,76)}, \ - {-1,-4,-1,-4, GLT_RGB(70,73,76)}, \ - \ - { INVALID_RGN, 0, 0, 0, 0}\ -} - -#define KEYBOARD_BUTTON_NORAML_RGN \ -{ \ - {0,0,0,0, GLT_RGB(38,38,38)},\ - {1,0,1,0, GLT_RGB(32,32,32)},\ - {2,0,2,0, GLT_RGB(28,28,28)},\ - {3,0,-4,0, GLT_RGB(27,27,27)},\ - {-3,0,-3,0, GLT_RGB(28,28,28)},\ - {-2,0,-2,0, GLT_RGB(32,32,32)},\ - {-1,0,-1,0, GLT_RGB(38,38,38)},\ - \ - {0,1,0,1, GLT_RGB(30,30,30)},\ - {1,1,1,1, GLT_RGB(84,84,84)},\ - {2,1,2,1, GLT_RGB(123,123,123)},\ - {3,1,3,1, GLT_RGB(127,127,127)},\ - {4,1,4,1, GLT_RGB(125,125,125)},\ - {5,1,-6,1, GLT_RGB(124,124,124)},\ - {-5,1,-5,1, GLT_RGB(125,125,125)},\ - {-4,1,-4,1, GLT_RGB(127,127,127)},\ - {-3,1,-3,1, GLT_RGB(123,123,123)},\ - {-2,1,-2,1, GLT_RGB(84,84,84)},\ - {-1,1,-1,1, GLT_RGB(30,30,30)},\ - \ - {0,2,0,2, GLT_RGB(25,25,25)},\ - {1,2,1,2, GLT_RGB(130,130,130)},\ - {2,2,2,2, GLT_RGB(123,123,123)},\ - {3,2,3,2, GLT_RGB(118,118,118)},\ - {4,2,-5,2, GLT_RGB(115,115,115)},\ - {-4,2,-4,2, GLT_RGB(118,118,118)},\ - {-3,2,-3,2, GLT_RGB(123,123,123)},\ - {-2,2,-2,2, GLT_RGB(130,130,130)},\ - {-1,2,-1,2, GLT_RGB(25,25,25)},\ - \ - {0,3,0,3, GLT_RGB(25,25,25)},\ - {1,3,1,3, GLT_RGB(124,124,124)},\ - {2,3,2,3, GLT_RGB(117,117,117)},\ - {3,3,3,3, GLT_RGB(112,112,112)},\ - {4,3,-5,3, GLT_RGB(109,109,109)},\ - {-4,3,-4,3, GLT_RGB(112,112,112)},\ - {-3,3,-3,3, GLT_RGB(117,117,117)},\ - {-2,3,-2,3, GLT_RGB(124,124,124)},\ - {-1,3,-1,3, GLT_RGB(25,25,25)},\ - \ - {0,4,0,4, GLT_RGB(24,24,24)},\ - {1,4,1,4, GLT_RGB(121,121,121)},\ - {2,4,2,4, GLT_RGB(113,113,113)},\ - {3,4,3,4, GLT_RGB(107,107,107)},\ - {4,4,-5,4, GLT_RGB(105,105,105)},\ - {-4,4,-4,4, GLT_RGB(107,107,107)},\ - {-3,4,-3,4, GLT_RGB(113,113,113)},\ - {-2,4,-2,4, GLT_RGB(121,121,121)},\ - {-1,4,-1,4, GLT_RGB(24,24,24)},\ - \ - {0,5,0,5, GLT_RGB(24,24,24)},\ - {1,5,1,5, GLT_RGB(119,119,119)},\ - {2,5,2,5, GLT_RGB(111,111,111)},\ - {3,5,3,5, GLT_RGB(106,106,106)},\ - {4,5,-5,5, GLT_RGB(103,103,103)},\ - {-4,5,-4,5, GLT_RGB(106,106,106)},\ - {-3,5,-3,5, GLT_RGB(111,111,111)},\ - {-2,5,-2,5, GLT_RGB(119,119,119)},\ - {-1,5,-1,5, GLT_RGB(24,24,24)},\ - \ - {0,6,0,6, GLT_RGB(23,23,23)},\ - {1,6,1,6, GLT_RGB(117,117,117)},\ - {2,6,2,6, GLT_RGB(109,109,109)},\ - {3,6,3,6, GLT_RGB(104,104,104)},\ - {4,6,-5,6, GLT_RGB(102,102,102)},\ - {-4,6,-4,6, GLT_RGB(104,104,104)},\ - {-3,6,-3,6, GLT_RGB(109,109,109)},\ - {-2,6,-2,6, GLT_RGB(117,117,117)},\ - {-1,6,-1,6, GLT_RGB(23,23,23)},\ - \ - {0,7,0,7, GLT_RGB(23,23,23)},\ - {1,7,1,7, GLT_RGB(116,116,116)},\ - {2,7,2,7, GLT_RGB(108,108,108)},\ - {3,7,3,7, GLT_RGB(103,103,103)},\ - {4,7,-5,7, GLT_RGB(100,100,100)},\ - {-4,7,-4,7, GLT_RGB(103,103,103)},\ - {-3,7,-3,7, GLT_RGB(108,108,108)},\ - {-2,7,-2,7, GLT_RGB(116,116,116)},\ - {-1,7,-1,7, GLT_RGB(23,23,23)},\ - \ - {0,8,0,8, GLT_RGB(22,22,22)},\ - {1,8,1,8, GLT_RGB(115,115,115)},\ - {2,8,2,8, GLT_RGB(107,107,107)},\ - {3,8,3,8, GLT_RGB(101,101,101)},\ - {4,8,-5,8, GLT_RGB(99,99,99)},\ - {-4,8,-4,8, GLT_RGB(101,101,101)},\ - {-3,8,-3,8, GLT_RGB(107,107,107)},\ - {-2,8,-2,8, GLT_RGB(115,115,115)},\ - {-1,8,-1,8, GLT_RGB(22,22,22)},\ - \ - {0,9,0,9, GLT_RGB(22,22,22)},\ - {1,9,1,9, GLT_RGB(114,114,114)},\ - {2,9,2,9, GLT_RGB(105,105,105)},\ - {3,9,3,9, GLT_RGB(99,99,99)},\ - {4,9,-5,9, GLT_RGB(96,96,96)},\ - {-4,9,-4,9, GLT_RGB(99,99,99)},\ - {-3,9,-3,9, GLT_RGB(105,105,105)},\ - {-2,9,-2,9, GLT_RGB(114,114,114)},\ - {-1,9,-1,9, GLT_RGB(22,22,22)},\ - \ - {0,10,0,10, GLT_RGB(21,21,21)},\ - {1,10,1,10, GLT_RGB(112,112,112)},\ - {2,10,2,10, GLT_RGB(103,103,103)},\ - {3,10,3,10, GLT_RGB(97,97,97)},\ - {4,10,4,10, GLT_RGB(94,94,94)},\ - {5,10,-6,10, GLT_RGB(93,93,93)},\ - {-5,10,-5,10, GLT_RGB(94,94,94)},\ - {-4,10,-4,10, GLT_RGB(97,97,97)},\ - {-3,10,-3,10, GLT_RGB(103,103,103)},\ - {-2,10,-2,10, GLT_RGB(112,112,112)},\ - {-1,10,-1,10, GLT_RGB(21,21,21)},\ - \ - {0,11,0,11, GLT_RGB(21,21,21)},\ - {1,11,1,11, GLT_RGB(110,110,110)},\ - {2,11,2,11, GLT_RGB(101,101,101)},\ - {3,11,3,11, GLT_RGB(94,94,94)},\ - {4,11,4,11, GLT_RGB(91,91,91)},\ - {5,11,5,11, GLT_RGB(90,90,90)},\ - {6,11,6,11, GLT_RGB(89,89,89)},\ - {7,11,-8,11, GLT_RGB(88,88,88)},\ - {-7,11,-7,11, GLT_RGB(89,89,89)},\ - {-6,11,-6,11, GLT_RGB(90,90,90)},\ - {-5,11,-5,11, GLT_RGB(91,91,91)},\ - {-4,11,-4,11, GLT_RGB(94,94,94)},\ - {-3,11,-3,11, GLT_RGB(101,101,101)},\ - {-2,11,-2,11, GLT_RGB(110,110,110)},\ - {-1,11,-1,11, GLT_RGB(21,21,21)},\ - \ - {0,12,0,12, GLT_RGB(21,21,21)},\ - {1,12,1,12, GLT_RGB(107,107,107)},\ - {2,12,2,12, GLT_RGB(98,98,98)},\ - {3,12,3,12, GLT_RGB(91,91,91)},\ - {4,12,4,12, GLT_RGB(88,88,88)},\ - {5,12,5,12, GLT_RGB(87,87,87)},\ - {6,12,-7,12, GLT_RGB(86,86,86)},\ - {-6,12,-6,12, GLT_RGB(87,87,87)},\ - {-5,12,-5,12, GLT_RGB(88,88,88)},\ - {-4,12,-4,12, GLT_RGB(91,91,91)},\ - {-3,12,-3,12, GLT_RGB(98,98,98)},\ - {-2,12,-2,12, GLT_RGB(107,107,107)},\ - {-1,12,-1,12, GLT_RGB(21,21,21)},\ - \ - {0,13,0,13, GLT_RGB(20,20,20)},\ - {1,13,1,13, GLT_RGB(105,105,105)},\ - {2,13,2,13, GLT_RGB(95,95,95)},\ - {3,13,3,13, GLT_RGB(89,89,89)},\ - {4,13,4,13, GLT_RGB(85,85,85)},\ - {5,13,5,13, GLT_RGB(84,84,84)},\ - {6,13,-7,13, GLT_RGB(83,83,83)},\ - {-6,13,-6,13, GLT_RGB(84,84,84)},\ - {-5,13,-5,13, GLT_RGB(85,85,85)},\ - {-4,13,-4,13, GLT_RGB(89,89,89)},\ - {-3,13,-3,13, GLT_RGB(95,95,95)},\ - {-2,13,-2,13, GLT_RGB(105,105,105)},\ - {-1,13,-1,13, GLT_RGB(20,20,20)},\ - \ - {0,14,0,14, GLT_RGB(20,20,20)},\ - {1,14,1,14, GLT_RGB(103,103,103)},\ - {2,14,2,14, GLT_RGB(93,93,93)},\ - {3,14,3,14, GLT_RGB(86,86,86)},\ - {4,14,4,14, GLT_RGB(82,82,82)},\ - {5,14,-6,14, GLT_RGB(81,81,81)},\ - {-5,14,-5,14, GLT_RGB(82,82,82)},\ - {-4,14,-4,14, GLT_RGB(86,86,86)},\ - {-3,14,-3,14, GLT_RGB(93,93,93)},\ - {-2,14,-2,14, GLT_RGB(103,103,103)},\ - {-1,14,-1,14, GLT_RGB(20,20,20)},\ - \ - {0,15,0,15, GLT_RGB(20,20,20)},\ - {1,15,1,15, GLT_RGB(101,101,101)},\ - {2,15,2,15, GLT_RGB(91,91,91)},\ - {3,15,3,15, GLT_RGB(84,84,84)},\ - {4,15,4,15, GLT_RGB(80,80,80)},\ - {5,15,-6,15, GLT_RGB(79,79,79)},\ - {-5,15,-5,15, GLT_RGB(80,80,80)},\ - {-4,15,-4,15, GLT_RGB(84,84,84)},\ - {-3,15,-3,15, GLT_RGB(91,91,91)},\ - {-2,15,-2,15, GLT_RGB(101,101,101)},\ - {-1,15,-1,15, GLT_RGB(20,20,20)},\ - \ - {0,16,0,16, GLT_RGB(19,19,19)},\ - {1,16,1,16, GLT_RGB(99,99,99)},\ - {2,16,2,16, GLT_RGB(89,89,89)},\ - {3,16,3,16, GLT_RGB(82,82,82)},\ - {4,16,4,16, GLT_RGB(78,78,78)},\ - {5,16,-6,16, GLT_RGB(77,77,77)},\ - {-5,16,-5,16, GLT_RGB(78,78,78)},\ - {-4,16,-4,16, GLT_RGB(82,82,82)},\ - {-3,16,-3,16, GLT_RGB(89,89,89)},\ - {-2,16,-2,16, GLT_RGB(99,99,99)},\ - {-1,16,-1,16, GLT_RGB(19,19,19)},\ - \ - {0,17,0,17, GLT_RGB(19,19,19)},\ - {1,17,1,17, GLT_RGB(97,97,97)},\ - {2,17,2,17, GLT_RGB(86,86,86)},\ - {3,17,3,17, GLT_RGB(80,80,80)},\ - {4,17,4,17, GLT_RGB(76,76,76)},\ - {5,17,-6,17, GLT_RGB(75,75,75)},\ - {-5,17,-5,17, GLT_RGB(76,76,76)},\ - {-4,17,-4,17, GLT_RGB(80,80,80)},\ - {-3,17,-3,17, GLT_RGB(86,86,86)},\ - {-2,17,-2,17, GLT_RGB(97,97,97)},\ - {-1,17,-1,17, GLT_RGB(19,19,19)},\ - \ - {0,18,0,18, GLT_RGB(19,19,19)},\ - {1,18,1,18, GLT_RGB(95,95,95)},\ - {2,18,2,18, GLT_RGB(84,84,84)},\ - {3,18,3,18, GLT_RGB(78,78,78)},\ - {4,18,-5,18, GLT_RGB(74,74,74)},\ - {-4,18,-4,18, GLT_RGB(78,78,78)},\ - {-3,18,-3,18, GLT_RGB(84,84,84)},\ - {-2,18,-2,18, GLT_RGB(95,95,95)},\ - {-1,18,-1,18, GLT_RGB(19,19,19)},\ - \ - {0,19,0,19, GLT_RGB(18,18,18)},\ - {1,19,1,19, GLT_RGB(93,93,93)},\ - {2,19,2,19, GLT_RGB(83,83,83)},\ - {3,19,3,19, GLT_RGB(76,76,76)},\ - {4,19,-5,19, GLT_RGB(72,72,72)},\ - {-4,19,-4,19, GLT_RGB(76,76,76)},\ - {-3,19,-3,19, GLT_RGB(83,83,83)},\ - {-2,19,-2,19, GLT_RGB(93,93,93)},\ - {-1,19,-1,19, GLT_RGB(18,18,18)},\ - \ - {0,20,0,20, GLT_RGB(18,18,18)},\ - {1,20,1,20, GLT_RGB(92,92,92)},\ - {2,20,2,20, GLT_RGB(81,81,81)},\ - {3,20,3,20, GLT_RGB(75,75,75)},\ - {4,20,-5,20, GLT_RGB(71,71,71)},\ - {-4,20,-4,20, GLT_RGB(75,75,75)},\ - {-3,20,-3,20, GLT_RGB(81,81,81)},\ - {-2,20,-2,20, GLT_RGB(92,92,92)},\ - {-1,20,-1,20, GLT_RGB(18,18,18)},\ - \ - {0,21,0,21, GLT_RGB(17,17,17)},\ - {1,21,1,21, GLT_RGB(91,91,91)},\ - {2,21,2,21, GLT_RGB(81,81,81)},\ - {3,21,3,21, GLT_RGB(74,74,74)},\ - {4,21,-5,21, GLT_RGB(70,70,70)},\ - {-4,21,-4,21, GLT_RGB(74,74,74)},\ - {-3,21,-3,21, GLT_RGB(81,81,81)},\ - {-2,21,-2,21, GLT_RGB(91,91,91)},\ - {-1,21,-1,21, GLT_RGB(17,17,17)},\ - \ - {0,22,0,-16, GLT_RGB(17,17,17)},\ - {-1,22,-1,-16, GLT_RGB(17,17,17)},\ - \ - {1,22,1,-16, GLT_RGB(91,91,91)},\ - {-2,22,-2,-16, GLT_RGB(91,91,91)},\ - \ - {2,21,2,-16, GLT_RGB(81,81,81)},\ - {-3,21,-3,-16, GLT_RGB(81,81,81)},\ - \ - {3,20,3,-16, GLT_RGB(75,75,75)},\ - {-4,20,-4,-16, GLT_RGB(75,75,75)},\ - \ - {4,21,4,-16, GLT_RGB(70,70,70)},\ - {-5,21,-5,-16, GLT_RGB(70,70,70)},\ - \ - {5,21,5,-16, GLT_RGB(69,69,69)},\ - {-6,21,-6,-16, GLT_RGB(69,69,69)},\ - \ - {6,21,6,-16, GLT_RGB(69,69,69)},\ - {-7,21,-7,-16, GLT_RGB(69,69,69)},\ - \ - {7,21,7,-16, GLT_RGB(69,69,69)},\ - {-8,21,-8,-16, GLT_RGB(69,69,69)},\ - \ - {8,22,-9,-16, GLT_RGB(68,68,68)},\ - \ - {0,-1,0,-1, GLT_RGB(31,31,31)},\ - {1,-1,1,-1, GLT_RGB(19,19,19)},\ - {2,-1,2,-1, GLT_RGB(12,12,12)},\ - {3,-1,-4,-1, GLT_RGB(10,10,10)},\ - {-3,-1,-3,-1, GLT_RGB(12,12,12)},\ - {-2,-1,-2,-1, GLT_RGB(19,19,19)},\ - {-1,-1,-1,-1, GLT_RGB(31,31,31)},\ - \ - {0,-2,0,-2, GLT_RGB(18,18,18)},\ - {1,-2,1,-2, GLT_RGB(67,67,67)},\ - {2,-2,2,-2, GLT_RGB(106,106,106)},\ - {3,-2,3,-2, GLT_RGB(109,109,109)},\ - {4,-2,4,-2, GLT_RGB(106,106,106)},\ - {5,-2,-6,-2, GLT_RGB(105,105,105)},\ - {-5,-2,-5,-2, GLT_RGB(106,106,106)},\ - {-4,-2,-4,-2, GLT_RGB(109,109,109)},\ - {-3,-2,-3,-2, GLT_RGB(106,106,106)},\ - {-2,-2,-2,-2, GLT_RGB(67,67,67)},\ - {-1,-2,-1,-2, GLT_RGB(18,18,18)},\ - \ - {0,-3,0,-3, GLT_RGB(11,11,11)},\ - {1,-3,1,-3, GLT_RGB(106,106,106)},\ - {2,-3,2,-3, GLT_RGB(101,101,101)},\ - {3,-3,3,-3, GLT_RGB(95,95,95)},\ - {4,-3,-5,-3, GLT_RGB(92,92,92)},\ - {-4,-3,-4,-3, GLT_RGB(95,95,95)},\ - {-3,-3,-3,-3, GLT_RGB(101,101,101)},\ - {-2,-3,-2,-3, GLT_RGB(106,106,106)},\ - {-1,-3,-1,-3, GLT_RGB(11,11,11)},\ - \ - {0,-4,0,-4, GLT_RGB(11,11,11)},\ - {1,-4,1,-4, GLT_RGB(100,100,100)},\ - {2,-4,2,-4, GLT_RGB(91,91,91)},\ - {3,-4,3,-4, GLT_RGB(85,85,85)},\ - {4,-4,4,-4, GLT_RGB(82,82,82)},\ - {5,-4,-6,-4, GLT_RGB(81,81,81)},\ - {-5,-4,-5,-4, GLT_RGB(82,82,82)},\ - {-4,-4,-4,-4, GLT_RGB(85,85,85)},\ - {-3,-4,-3,-4, GLT_RGB(91,91,91)},\ - {-2,-4,-2,-4, GLT_RGB(100,100,100)},\ - {-1,-4,-1,-4, GLT_RGB(11,11,11)},\ - \ - {0,-5,0,-5, GLT_RGB(11,11,11)},\ - {1,-5,1,-5, GLT_RGB(94,94,94)},\ - {2,-5,2,-5, GLT_RGB(85,85,85)},\ - {3,-5,3,-5, GLT_RGB(79,79,79)},\ - {4,-5,4,-5, GLT_RGB(76,76,76)},\ - {5,-5,-6,-5, GLT_RGB(75,75,75)},\ - {-5,-5,-5,-5, GLT_RGB(76,76,76)},\ - {-4,-5,-4,-5, GLT_RGB(79,79,79)},\ - {-3,-5,-3,-5, GLT_RGB(85,85,85)},\ - {-2,-5,-2,-5, GLT_RGB(94,94,94)},\ - {-1,-5,-1,-5, GLT_RGB(11,11,11)},\ - \ - {0,-6,0,-6, GLT_RGB(12,12,12)},\ - {1,-6,1,-6, GLT_RGB(93,93,93)},\ - {2,-6,2,-6, GLT_RGB(84,84,84)},\ - {3,-6,3,-6, GLT_RGB(78,78,78)},\ - {4,-6,-5,-6, GLT_RGB(75,75,75)},\ - {-4,-6,-4,-6, GLT_RGB(78,78,78)},\ - {-3,-6,-3,-6, GLT_RGB(84,84,84)},\ - {-2,-6,-2,-6, GLT_RGB(93,93,93)},\ - {-1,-6,-1,-6, GLT_RGB(12,12,12)},\ - \ - {0,-7,0,-7, GLT_RGB(12,12,12)},\ - {1,-7,1,-7, GLT_RGB(93,93,93)},\ - {2,-7,2,-7, GLT_RGB(83,83,83)},\ - {3,-7,3,-7, GLT_RGB(77,77,77)},\ - {4,-7,-5,-7, GLT_RGB(74,74,74)},\ - {-4,-7,-4,-7, GLT_RGB(77,77,77)},\ - {-3,-7,-3,-7, GLT_RGB(83,83,83)},\ - {-2,-7,-2,-7, GLT_RGB(93,93,93)},\ - {-1,-7,-1,-7, GLT_RGB(12,12,12)},\ - \ - {0,-8,0,-8, GLT_RGB(12,12,12)},\ - {1,-8,1,-8, GLT_RGB(92,92,92)},\ - {2,-8,2,-8, GLT_RGB(83,83,83)},\ - {3,-8,3,-8, GLT_RGB(77,77,77)},\ - {4,-8,4,-8, GLT_RGB(74,74,74)},\ - {5,-8,-6,-8, GLT_RGB(73,73,73)},\ - {-5,-8,-5,-8, GLT_RGB(74,74,74)},\ - {-4,-8,-4,-8, GLT_RGB(77,77,77)},\ - {-3,-8,-3,-8, GLT_RGB(83,83,83)},\ - {-2,-8,-2,-8, GLT_RGB(92,92,92)},\ - {-1,-8,-1,-8, GLT_RGB(12,12,12)},\ - \ - {0,-9,0,-9, GLT_RGB(13,13,13)},\ - {1,-9,1,-9, GLT_RGB(92,92,92)},\ - {2,-9,2,-9, GLT_RGB(83,83,83)},\ - {3,-9,3,-9, GLT_RGB(76,76,76)},\ - {4,-9,4,-9, GLT_RGB(73,73,73)},\ - {5,-9,-6,-9, GLT_RGB(72,72,72)},\ - {-5,-9,-5,-9, GLT_RGB(73,73,73)},\ - {-4,-9,-4,-9, GLT_RGB(76,76,76)},\ - {-3,-9,-3,-9, GLT_RGB(83,83,83)},\ - {-2,-9,-2,-9, GLT_RGB(92,92,92)},\ - {-1,-9,-1,-9, GLT_RGB(13,13,13)},\ - \ - {0,-10,0,-10, GLT_RGB(13,13,13)},\ - {1,-10,1,-10, GLT_RGB(92,92,92)},\ - {2,-10,2,-10, GLT_RGB(82,82,82)},\ - {3,-10,3,-10, GLT_RGB(76,76,76)},\ - {4,-10,4,-10, GLT_RGB(72,72,72)},\ - {5,-10,-6,-10, GLT_RGB(71,71,71)},\ - {-5,-10,-5,-10, GLT_RGB(72,72,72)},\ - {-4,-10,-4,-10, GLT_RGB(76,76,76)},\ - {-3,-10,-3,-10, GLT_RGB(82,82,82)},\ - {-2,-10,-2,-10, GLT_RGB(92,92,92)},\ - {-1,-10,-1,-10, GLT_RGB(13,13,13)},\ - \ - {0,-11,0,-11, GLT_RGB(14,14,14)},\ - {1,-11,1,-11, GLT_RGB(92,92,92)},\ - {2,-11,2,-11, GLT_RGB(82,82,82)},\ - {3,-11,3,-11, GLT_RGB(75,75,75)},\ - {4,-11,4,-11, GLT_RGB(71,71,71)},\ - {5,-11,5,-11, GLT_RGB(70,70,70)},\ - {6,-11,-7,-11, GLT_RGB(69,69,69)},\ - {-6,-11,-6,-11, GLT_RGB(70,70,70)},\ - {-5,-11,-5,-11, GLT_RGB(71,71,71)},\ - {-4,-11,-4,-11, GLT_RGB(75,75,75)},\ - {-3,-11,-3,-11, GLT_RGB(82,82,82)},\ - {-2,-11,-2,-11, GLT_RGB(92,92,92)},\ - {-1,-11,-1,-11, GLT_RGB(14,14,14)},\ - \ - {0,-12,0,-12, GLT_RGB(14,14,14)},\ - {1,-12,1,-12, GLT_RGB(91,91,91)},\ - {2,-12,2,-12, GLT_RGB(81,81,81)},\ - {3,-12,3,-12, GLT_RGB(74,74,74)},\ - {4,-12,4,-12, GLT_RGB(70,70,70)},\ - {5,-12,5,-12, GLT_RGB(69,69,69)},\ - {6,-12,6,-12, GLT_RGB(68,68,68)},\ - {7,-12,-8,-12, GLT_RGB(67,67,67)},\ - {-7,-12,-7,-12, GLT_RGB(68,68,68)},\ - {-6,-12,-6,-12, GLT_RGB(69,69,69)},\ - {-5,-12,-5,-12, GLT_RGB(70,70,70)},\ - {-4,-12,-4,-12, GLT_RGB(74,74,74)},\ - {-3,-12,-3,-12, GLT_RGB(81,81,81)},\ - {-2,-12,-2,-12, GLT_RGB(91,91,91)},\ - {-1,-12,-1,-12, GLT_RGB(14,14,14)},\ - \ - {0,-13,0,-13, GLT_RGB(15,15,15)},\ - {1,-13,1,-13, GLT_RGB(91,91,91)},\ - {2,-13,2,-13, GLT_RGB(81,81,81)},\ - {3,-13,3,-13, GLT_RGB(73,73,73)},\ - {4,-13,4,-13, GLT_RGB(69,69,69)},\ - {5,-13,5,-13, GLT_RGB(68,68,68)},\ - {6,-13,-7,-13, GLT_RGB(67,67,67)},\ - {-6,-13,-6,-13, GLT_RGB(68,68,68)},\ - {-5,-13,-5,-13, GLT_RGB(69,69,69)},\ - {-4,-13,-4,-13, GLT_RGB(73,73,73)},\ - {-3,-13,-3,-13, GLT_RGB(81,81,81)},\ - {-2,-13,-2,-13, GLT_RGB(91,91,91)},\ - {-1,-13,-1,-13, GLT_RGB(15,15,15)},\ - \ - {0,-14,0,-14, GLT_RGB(15,15,15)},\ - {1,-14,1,-14, GLT_RGB(91,91,91)},\ - {2,-14,2,-14, GLT_RGB(80,80,80)},\ - {3,-14,3,-14, GLT_RGB(73,73,73)},\ - {4,-14,4,-14, GLT_RGB(69,69,69)},\ - {5,-14,5,-14, GLT_RGB(68,68,68)},\ - {6,-14,-7,-14, GLT_RGB(67,67,67)},\ - {-6,-14,-6,-14, GLT_RGB(68,68,68)},\ - {-5,-14,-5,-14, GLT_RGB(69,69,69)},\ - {-4,-14,-4,-14, GLT_RGB(73,73,73)},\ - {-3,-14,-3,-14, GLT_RGB(80,80,80)},\ - {-2,-14,-2,-14, GLT_RGB(91,91,91)},\ - {-1,-14,-1,-14, GLT_RGB(15,15,15)},\ - \ - {0,-15,0,-15, GLT_RGB(15,15,15)},\ - {1,-15,1,-15, GLT_RGB(91,91,91)},\ - {2,-15,2,-15, GLT_RGB(80,80,80)},\ - {3,-15,3,-15, GLT_RGB(73,73,73)},\ - {4,-15,4,-15, GLT_RGB(69,69,69)},\ - {5,-15,5,-15, GLT_RGB(68,68,68)},\ - {6,-15,-7,-15, GLT_RGB(67,67,67)},\ - {-6,-15,-6,-15, GLT_RGB(68,68,68)},\ - {-5,-15,-5,-15, GLT_RGB(69,69,69)},\ - {-4,-15,-4,-15, GLT_RGB(73,73,73)},\ - {-3,-15,-3,-15, GLT_RGB(80,80,80)},\ - {-2,-15,-2,-15, GLT_RGB(91,91,91)},\ - {-1,-15,-1,-15, GLT_RGB(15,15,15)},\ - \ - { INVALID_RGN, 0, 0, 0, 0}\ -} - -#define KEYBOARD_BUTTON_PUSHED_RGN \ -{ \ - {0,0,0,0, GLT_RGB(38,38,38)},\ - {1,0,1,0, GLT_RGB(32,32,32)},\ - {2,0,2,0, GLT_RGB(28,28,28)},\ - {3,0,-4,0, GLT_RGB(27,27,27)},\ - {-3,0,-3,0, GLT_RGB(28,28,28)},\ - {-2,0,-2,0, GLT_RGB(32,32,32)},\ - {-1,0,-1,0, GLT_RGB(38,38,38)},\ - \ - {0,1,0,1, GLT_RGB(30,30,30)},\ - {1,1,1,1, GLT_RGB(69,69,69)},\ - {2,1,2,1, GLT_RGB(108,108,108)},\ - {3,1,3,1, GLT_RGB(169,169,169)},\ - {4,1,4,1, GLT_RGB(174,174,174)},\ - {5,1,-6,1, GLT_RGB(177,177,177)},\ - {-5,1,-5,1, GLT_RGB(174,174,174)},\ - {-4,1,-4,1, GLT_RGB(169,169,169)},\ - {-3,1,-3,1, GLT_RGB(108,108,108)},\ - {-2,1,-2,1, GLT_RGB(69,69,69)},\ - {-1,1,-1,1, GLT_RGB(30,30,30)},\ - \ - {0,2,0,2, GLT_RGB(28,28,28)},\ - {1,2,1,2, GLT_RGB(108,108,108)},\ - {2,2,2,2, GLT_RGB(138,138,138)},\ - {3,2,3,2, GLT_RGB(169,169,169)},\ - {4,2,-5,2, GLT_RGB(177,177,177)},\ - {-4,2,-4,2, GLT_RGB(169,169,169)},\ - {-3,2,-3,2, GLT_RGB(138,138,138)},\ - {-2,2,-2,2, GLT_RGB(108,108,108)},\ - {-1,2,-1,2, GLT_RGB(30,30,30)},\ - \ - {0,3,0,3, GLT_RGB(25,25,25)},\ - {1,3,1,3, GLT_RGB(102,102,102)},\ - {2,3,2,3, GLT_RGB(179,179,179)},\ - {3,3,3,3, GLT_RGB(174,174,174)},\ - {4,3,-5,3, GLT_RGB(171,171,171)},\ - {-4,3,-4,3, GLT_RGB(174,174,174)},\ - {-3,3,-3,3, GLT_RGB(179,179,179)},\ - {-2,3,-2,3, GLT_RGB(102,102,102)},\ - {-1,3,-1,3, GLT_RGB(25,25,25)},\ - \ - {0,4,0,4, GLT_RGB(25,25,25)},\ - {1,4,1,4, GLT_RGB(100,100,100)},\ - {2,4,2,4, GLT_RGB(176,176,176)},\ - {3,4,3,4, GLT_RGB(171,171,171)},\ - {4,4,-5,4, GLT_RGB(166,166,166)},\ - {-4,4,-4,4, GLT_RGB(171,171,171)},\ - {-3,4,-3,4, GLT_RGB(176,176,176)},\ - {-2,4,-2,4, GLT_RGB(100,100,100)},\ - {-1,4,-1,4, GLT_RGB(25,25,25)},\ - \ - {0,5,0,5, GLT_RGB(24,24,24)},\ - {1,5,1,5, GLT_RGB(99,99,99)},\ - {2,5,2,5, GLT_RGB(174,174,174)},\ - {3,5,3,5, GLT_RGB(169,169,169)},\ - {4,5,-5,5, GLT_RGB(163,163,163)},\ - {-4,5,-4,5, GLT_RGB(169,169,169)},\ - {-3,5,-3,5, GLT_RGB(174,174,174)},\ - {-2,5,-2,5, GLT_RGB(99,99,99)},\ - {-1,5,-1,5, GLT_RGB(24,24,24)},\ - \ - {0,6,0,6, GLT_RGB(24,24,24)},\ - {1,6,1,6, GLT_RGB(98,98,98)},\ - {2,6,2,6, GLT_RGB(173,173,173)},\ - {3,6,3,6, GLT_RGB(169,169,169)},\ - {4,6,-5,6, GLT_RGB(163,163,163)},\ - {-4,6,-4,6, GLT_RGB(169,169,169)},\ - {-3,6,-3,6, GLT_RGB(173,173,173)},\ - {-2,6,-2,6, GLT_RGB(98,98,98)},\ - {-1,6,-1,6, GLT_RGB(24,24,24)},\ - \ - {0,7,0,7, GLT_RGB(24,24,24)},\ - {1,7,1,7, GLT_RGB(97,97,97)},\ - {2,7,2,7, GLT_RGB(171,171,171)},\ - {3,7,3,7, GLT_RGB(166,166,166)},\ - {4,7,-5,7, GLT_RGB(161,161,161)},\ - {-4,7,-4,7, GLT_RGB(166,166,166)},\ - {-3,7,-3,7, GLT_RGB(171,171,171)},\ - {-2,7,-2,7, GLT_RGB(97,97,97)},\ - {-1,7,-1,7, GLT_RGB(24,24,24)},\ - \ - {0,8,0,8, GLT_RGB(23,23,23)},\ - {1,8,1,8, GLT_RGB(96,96,96)},\ - {2,8,2,8, GLT_RGB(170,170,170)},\ - {3,8,3,8, GLT_RGB(163,163,163)},\ - {4,8,-5,8, GLT_RGB(160,160,160)},\ - {-4,8,-4,8, GLT_RGB(163,163,163)},\ - {-3,8,-3,8, GLT_RGB(170,170,170)},\ - {-2,8,-2,8, GLT_RGB(96,96,96)},\ - {-1,8,-1,8, GLT_RGB(23,23,23)},\ - \ - {0,9,0,9, GLT_RGB(23,23,23)},\ - {1,9,1,9, GLT_RGB(96,96,96)},\ - {2,9,2,9, GLT_RGB(169,169,169)},\ - {3,9,3,9, GLT_RGB(164,164,164)},\ - {4,9,-5,9, GLT_RGB(159,159,159)},\ - {-4,9,-4,9, GLT_RGB(164,164,164)},\ - {-3,9,-3,9, GLT_RGB(169,169,169)},\ - {-2,9,-2,9, GLT_RGB(96,96,96)},\ - {-1,9,-1,9, GLT_RGB(23,23,23)},\ - \ - {0,10,0,10, GLT_RGB(23,23,23)},\ - {1,10,1,10, GLT_RGB(95,95,95)},\ - {2,10,2,10, GLT_RGB(167,167,167)},\ - {3,10,3,10, GLT_RGB(162,162,162)},\ - {4,10,4,10, GLT_RGB(160,160,160)},\ - {5,10,-6,10, GLT_RGB(157,157,157)},\ - {-5,10,-5,10, GLT_RGB(160,160,160)},\ - {-4,10,-4,10, GLT_RGB(162,162,162)},\ - {-3,10,-3,10, GLT_RGB(167,167,167)},\ - {-2,10,-2,10, GLT_RGB(95,95,95)},\ - {-1,10,-1,10, GLT_RGB(23,23,23)},\ - \ - {0,11,0,11, GLT_RGB(22,22,22)},\ - {1,11,1,11, GLT_RGB(94,94,94)},\ - {2,11,2,11, GLT_RGB(166,166,166)},\ - {3,11,3,11, GLT_RGB(164,164,164)},\ - {4,11,4,11, GLT_RGB(159,159,159)},\ - {5,11,5,11, GLT_RGB(158,158,158)},\ - {6,11,6,11, GLT_RGB(157,157,157)},\ - {7,11,-8,11, GLT_RGB(156,156,156)},\ - {-7,11,-7,11, GLT_RGB(157,157,157)},\ - {-6,11,-6,11, GLT_RGB(158,158,158)},\ - {-5,11,-5,11, GLT_RGB(159,159,159)},\ - {-4,11,-4,11, GLT_RGB(164,164,164)},\ - {-3,11,-3,11, GLT_RGB(166,166,166)},\ - {-2,11,-2,11, GLT_RGB(94,94,94)},\ - {-1,11,-1,11, GLT_RGB(22,22,22)},\ - \ - {0,12,0,12, GLT_RGB(22,22,22)},\ - {1,12,1,12, GLT_RGB(94,94,94)},\ - {2,12,2,12, GLT_RGB(166,166,166)},\ - {3,12,3,12, GLT_RGB(164,164,164)},\ - {4,12,4,12, GLT_RGB(160,160,160)},\ - {5,12,5,12, GLT_RGB(158,158,158)},\ - {6,12,-7,12, GLT_RGB(155,155,155)},\ - {-6,12,-6,12, GLT_RGB(158,158,158)},\ - {-5,12,-5,12, GLT_RGB(160,160,160)},\ - {-4,12,-4,12, GLT_RGB(164,164,164)},\ - {-3,12,-3,12, GLT_RGB(166,166,166)},\ - {-2,12,-2,12, GLT_RGB(94,94,94)},\ - {-1,12,-1,12, GLT_RGB(22,22,22)},\ - \ - {0,13,0,13, GLT_RGB(22,22,22)},\ - {1,13,1,13, GLT_RGB(93,93,93)},\ - {2,13,2,13, GLT_RGB(164,164,164)},\ - {3,13,3,13, GLT_RGB(157,157,157)},\ - {4,13,4,13, GLT_RGB(156,156,156)},\ - {5,13,5,13, GLT_RGB(153,153,153)},\ - {6,13,-7,13, GLT_RGB(152,152,152)},\ - {-6,13,-6,13, GLT_RGB(153,153,153)},\ - {-5,13,-5,13, GLT_RGB(156,156,156)},\ - {-4,13,-4,13, GLT_RGB(157,157,157)},\ - {-3,13,-3,13, GLT_RGB(164,164,164)},\ - {-2,13,-2,13, GLT_RGB(93,93,93)},\ - {-1,13,-1,13, GLT_RGB(22,22,22)},\ - \ - {0,14,0,14, GLT_RGB(21,21,21)},\ - {1,14,1,14, GLT_RGB(92,92,92)},\ - {2,14,2,14, GLT_RGB(163,163,163)},\ - {3,14,3,14, GLT_RGB(157,157,157)},\ - {4,14,4,14, GLT_RGB(153,153,153)},\ - {5,14,-6,14, GLT_RGB(150,150,150)},\ - {-5,14,-5,14, GLT_RGB(153,153,153)},\ - {-4,14,-4,14, GLT_RGB(157,157,157)},\ - {-3,14,-3,14, GLT_RGB(163,163,163)},\ - {-2,14,-2,14, GLT_RGB(92,92,92)},\ - {-1,14,-1,14, GLT_RGB(21,21,21)},\ - \ - {0,15,0,15, GLT_RGB(21,21,21)},\ - {1,15,1,15, GLT_RGB(91,91,91)},\ - {2,15,2,15, GLT_RGB(162,162,162)},\ - {3,15,3,15, GLT_RGB(156,156,156)},\ - {4,15,4,15, GLT_RGB(151,151,151)},\ - {5,15,-6,15, GLT_RGB(149,149,149)},\ - {-5,15,-5,15, GLT_RGB(151,151,151)},\ - {-4,15,-4,15, GLT_RGB(156,156,156)},\ - {-3,15,-3,15, GLT_RGB(162,162,162)},\ - {-2,15,-2,15, GLT_RGB(91,91,91)},\ - {-1,15,-1,15, GLT_RGB(21,21,21)},\ - \ - {0,16,0,16, GLT_RGB(21,21,21)},\ - {1,16,1,16, GLT_RGB(90,90,90)},\ - {2,16,2,16, GLT_RGB(160,160,160)},\ - {3,16,3,16, GLT_RGB(154,154,154)},\ - {4,16,4,16, GLT_RGB(150,150,150)},\ - {5,16,-6,16, GLT_RGB(146,146,146)},\ - {-5,16,-5,16, GLT_RGB(150,150,150)},\ - {-4,16,-4,16, GLT_RGB(154,154,154)},\ - {-3,16,-3,16, GLT_RGB(160,160,160)},\ - {-2,16,-2,16, GLT_RGB(90,90,90)},\ - {-1,16,-1,16, GLT_RGB(21,21,21)},\ - \ - {0,17,0,17, GLT_RGB(21,21,21)},\ - {1,17,1,17, GLT_RGB(89,89,89)},\ - {2,17,2,17, GLT_RGB(158,158,158)},\ - {3,17,3,17, GLT_RGB(152,152,152)},\ - {4,17,4,17, GLT_RGB(148,148,148)},\ - {5,17,-6,17, GLT_RGB(144,144,144)},\ - {-5,17,-5,17, GLT_RGB(148,148,148)},\ - {-4,17,-4,17, GLT_RGB(152,152,152)},\ - {-3,17,-3,17, GLT_RGB(158,158,158)},\ - {-2,17,-2,17, GLT_RGB(89,89,89)},\ - {-1,17,-1,17, GLT_RGB(21,21,21)},\ - \ - {0,18,0,18, GLT_RGB(21,21,21)},\ - {1,18,1,18, GLT_RGB(89,89,89)},\ - {2,18,2,18, GLT_RGB(157,157,157)},\ - {3,18,3,18, GLT_RGB(151,151,151)},\ - {4,18,-5,18, GLT_RGB(143,143,143)},\ - {-4,18,-4,18, GLT_RGB(151,151,151)},\ - {-3,18,-3,18, GLT_RGB(157,157,157)},\ - {-2,18,-2,18, GLT_RGB(89,89,89)},\ - {-1,18,-1,18, GLT_RGB(21,21,21)},\ - \ - {0,19,0,19, GLT_RGB(20,20,20)},\ - {1,19,1,19, GLT_RGB(87,87,87)},\ - {2,19,2,19, GLT_RGB(155,155,155)},\ - {3,19,3,19, GLT_RGB(145,145,145)},\ - {4,19,-5,19, GLT_RGB(140,140,140)},\ - {-4,19,-4,19, GLT_RGB(145,145,145)},\ - {-3,19,-3,19, GLT_RGB(155,155,155)},\ - {-2,19,-2,19, GLT_RGB(87,87,87)},\ - {-1,19,-1,19, GLT_RGB(20,20,20)},\ - \ - {0,20,0,20, GLT_RGB(20,20,20)},\ - {1,20,1,20, GLT_RGB(86,86,86)},\ - {2,20,2,20, GLT_RGB(153,153,153)},\ - {3,20,3,20, GLT_RGB(147,147,147)},\ - {4,20,-5,20, GLT_RGB(138,138,138)},\ - {-4,20,-4,20, GLT_RGB(147,147,147)},\ - {-3,20,-3,20, GLT_RGB(153,153,153)},\ - {-2,20,-2,20, GLT_RGB(86,86,86)},\ - {-1,20,-1,20, GLT_RGB(20,20,20)},\ - \ - {0,21,0,21, GLT_RGB(20,20,20)},\ - {1,21,1,21, GLT_RGB(86,86,86)},\ - {2,21,2,21, GLT_RGB(152,152,152)},\ - {3,21,3,21, GLT_RGB(146,146,146)},\ - {4,21,-5,21, GLT_RGB(137,137,137)},\ - {-4,21,-4,21, GLT_RGB(146,146,146)},\ - {-3,21,-3,21, GLT_RGB(152,152,152)},\ - {-2,21,-2,21, GLT_RGB(86,86,86)},\ - {-1,21,-1,21, GLT_RGB(20,20,20)},\ - \ - {0,22,0,-16, GLT_RGB(20,20,20)},\ - {-1,22,-1,-16, GLT_RGB(20,20,20)},\ - \ - {1,22,1,-16, GLT_RGB(85,85,85)},\ - {-2,22,-2,-16, GLT_RGB(85,85,85)},\ - \ - {2,21,2,-16, GLT_RGB(150,150,150)},\ - {-3,21,-3,-16, GLT_RGB(150,150,150)},\ - \ - {3,20,3,-16, GLT_RGB(143,143,143)},\ - {-4,20,-4,-16, GLT_RGB(143,143,143)},\ - \ - {4,21,4,-16, GLT_RGB(140,140,140)},\ - {-5,21,-5,-16, GLT_RGB(140,140,140)},\ - \ - {5,21,5,-16, GLT_RGB(138,138,138)},\ - {-6,21,-6,-16, GLT_RGB(138,138,138)},\ - \ - {6,21,6,-16, GLT_RGB(137,137,137)},\ - {-7,21,-7,-16, GLT_RGB(137,137,137)},\ - \ - {7,21,7,-16, GLT_RGB(137,137,137)},\ - {-8,21,-8,-16, GLT_RGB(137,137,137)},\ - \ - {8,22,-9,-16, GLT_RGB(136,136,136)},\ - \ - {0,-1,0,-1, GLT_RGB(31,31,31)},\ - {1,-1,1,-1, GLT_RGB(25,25,25)},\ - {2,-1,2,-1, GLT_RGB(15,15,15)},\ - {3,-1,-4,-1, GLT_RGB(10,10,10)},\ - {-3,-1,-3,-1, GLT_RGB(15,15,15)},\ - {-2,-1,-2,-1, GLT_RGB(25,25,25)},\ - {-1,-1,-1,-1, GLT_RGB(31,31,31)},\ - \ - {0,-2,0,-2, GLT_RGB(24,24,24)},\ - {1,-2,1,-2, GLT_RGB(38,38,38)},\ - {2,-2,2,-2, GLT_RGB(53,53,53)},\ - {3,-2,3,-2, GLT_RGB(77,77,77)},\ - {4,-2,4,-2, GLT_RGB(80,80,80)},\ - {5,-2,-6,-2, GLT_RGB(79,79,79)},\ - {-5,-2,-5,-2, GLT_RGB(80,80,80)},\ - {-4,-2,-4,-2, GLT_RGB(77,77,77)},\ - {-3,-2,-3,-2, GLT_RGB(53,53,53)},\ - {-2,-2,-2,-2, GLT_RGB(38,38,38)},\ - {-1,-2,-1,-2, GLT_RGB(24,24,24)},\ - \ - {0,-3,0,-3, GLT_RGB(18,18,18)},\ - {1,-3,1,-3, GLT_RGB(52,52,52)},\ - {2,-3,2,-3, GLT_RGB(87,87,87)},\ - {3,-3,3,-3, GLT_RGB(142,142,142)},\ - {4,-3,-5,-3, GLT_RGB(148,148,148)},\ - {-4,-3,-4,-3, GLT_RGB(142,142,142)},\ - {-3,-3,-3,-3, GLT_RGB(87,87,87)},\ - {-2,-3,-2,-3, GLT_RGB(52,52,52)},\ - {-1,-3,-1,-3, GLT_RGB(18,18,18)},\ - \ - {0,-4,0,-4, GLT_RGB(11,11,11)},\ - {1,-4,1,-4, GLT_RGB(77,77,77)},\ - {2,-4,2,-4, GLT_RGB(143,143,143)},\ - {3,-4,3,-4, GLT_RGB(141,141,141)},\ - {4,-4,4,-4, GLT_RGB(138,138,138)},\ - {5,-4,-6,-4, GLT_RGB(135,135,135)},\ - {-5,-4,-5,-4, GLT_RGB(138,138,138)},\ - {-4,-4,-4,-4, GLT_RGB(141,141,141)},\ - {-3,-4,-3,-4, GLT_RGB(143,143,143)},\ - {-2,-4,-2,-4, GLT_RGB(77,77,77)},\ - {-1,-4,-1,-4, GLT_RGB(11,11,11)},\ - \ - {0,-5,0,-5, GLT_RGB(11,11,11)},\ - {1,-5,1,-5, GLT_RGB(75,75,75)},\ - {2,-5,2,-5, GLT_RGB(140,140,140)},\ - {3,-5,3,-5, GLT_RGB(136,136,136)},\ - {4,-5,4,-5, GLT_RGB(133,133,133)},\ - {5,-5,-6,-5, GLT_RGB(129,129,129)},\ - {-5,-5,-5,-5, GLT_RGB(133,133,133)},\ - {-4,-5,-4,-5, GLT_RGB(136,136,136)},\ - {-3,-5,-3,-5, GLT_RGB(140,140,140)},\ - {-2,-5,-2,-5, GLT_RGB(75,75,75)},\ - {-1,-5,-1,-5, GLT_RGB(11,11,11)},\ - \ - {0,-6,0,-6, GLT_RGB(11,11,11)},\ - {1,-6,1,-6, GLT_RGB(74,74,74)},\ - {2,-6,2,-6, GLT_RGB(138,138,138)},\ - {3,-6,3,-6, GLT_RGB(129,129,129)},\ - {4,-6,-5,-6, GLT_RGB(124,124,124)},\ - {-4,-6,-4,-6, GLT_RGB(129,129,129)},\ - {-3,-6,-3,-6, GLT_RGB(138,138,138)},\ - {-2,-6,-2,-6, GLT_RGB(74,74,74)},\ - {-1,-6,-1,-6, GLT_RGB(11,11,11)},\ - \ - {0,-7,0,-7, GLT_RGB(11,11,11)},\ - {1,-7,1,-7, GLT_RGB(71,71,71)},\ - {2,-7,2,-7, GLT_RGB(132,132,132)},\ - {3,-7,3,-7, GLT_RGB(128,128,128)},\ - {4,-7,-5,-7, GLT_RGB(118,118,118)},\ - {-4,-7,-4,-7, GLT_RGB(128,128,128)},\ - {-3,-7,-3,-7, GLT_RGB(132,132,132)},\ - {-2,-7,-2,-7, GLT_RGB(71,71,71)},\ - {-1,-7,-1,-7, GLT_RGB(11,11,11)},\ - \ - {0,-8,0,-8, GLT_RGB(11,11,11)},\ - {1,-8,1,-8, GLT_RGB(71,71,71)},\ - {2,-8,2,-8, GLT_RGB(131,131,131)},\ - {3,-8,3,-8, GLT_RGB(124,124,124)},\ - {4,-8,4,-8, GLT_RGB(119,119,119)},\ - {5,-8,-6,-8, GLT_RGB(117,117,117)},\ - {-5,-8,-5,-8, GLT_RGB(119,119,119)},\ - {-4,-8,-4,-8, GLT_RGB(124,124,124)},\ - {-3,-8,-3,-8, GLT_RGB(131,131,131)},\ - {-2,-8,-2,-8, GLT_RGB(71,71,71)},\ - {-1,-8,-1,-8, GLT_RGB(11,11,11)},\ - \ - {0,-9,0,-9, GLT_RGB(12,12,12)},\ - {1,-9,1,-9, GLT_RGB(71,71,71)},\ - {2,-9,2,-9, GLT_RGB(131,131,131)},\ - {3,-9,3,-9, GLT_RGB(124,124,124)},\ - {4,-9,4,-9, GLT_RGB(119,119,119)},\ - {5,-9,-6,-9, GLT_RGB(117,117,117)},\ - {-5,-9,-5,-9, GLT_RGB(119,119,119)},\ - {-4,-9,-4,-9, GLT_RGB(124,124,124)},\ - {-3,-9,-3,-9, GLT_RGB(131,131,131)},\ - {-2,-9,-2,-9, GLT_RGB(71,71,71)},\ - {-1,-9,-1,-9, GLT_RGB(12,12,12)},\ - \ - {0,-10,0,-10, GLT_RGB(12,12,12)},\ - {1,-10,1,-10, GLT_RGB(71,71,71)},\ - {2,-10,2,-10, GLT_RGB(130,130,130)},\ - {3,-10,3,-10, GLT_RGB(123,123,123)},\ - {4,-10,4,-10, GLT_RGB(118,118,118)},\ - {5,-10,-6,-10, GLT_RGB(117,117,117)},\ - {-5,-10,-5,-10, GLT_RGB(118,118,118)},\ - {-4,-10,-4,-10, GLT_RGB(123,123,123)},\ - {-3,-10,-3,-10, GLT_RGB(130,130,130)},\ - {-2,-10,-2,-10, GLT_RGB(71,71,71)},\ - {-1,-10,-1,-10, GLT_RGB(12,12,12)},\ - \ - {0,-11,0,-11, GLT_RGB(12,12,12)},\ - {1,-11,1,-11, GLT_RGB(71,71,71)},\ - {2,-11,2,-11, GLT_RGB(130,130,130)},\ - {3,-11,3,-11, GLT_RGB(123,123,123)},\ - {4,-11,4,-11, GLT_RGB(129,129,129)},\ - {5,-11,5,-11, GLT_RGB(119,119,119)},\ - {6,-11,-7,-11, GLT_RGB(116,116,116)},\ - {-6,-11,-6,-11, GLT_RGB(119,119,119)},\ - {-5,-11,-5,-11, GLT_RGB(129,129,129)},\ - {-4,-11,-4,-11, GLT_RGB(123,123,123)},\ - {-3,-11,-3,-11, GLT_RGB(130,130,130)},\ - {-2,-11,-2,-11, GLT_RGB(71,71,71)},\ - {-1,-11,-1,-11, GLT_RGB(12,12,12)},\ - \ - {0,-12,0,-12, GLT_RGB(12,12,12)},\ - {1,-12,1,-12, GLT_RGB(71,71,71)},\ - {2,-12,2,-12, GLT_RGB(130,130,130)},\ - {3,-12,3,-12, GLT_RGB(123,123,123)},\ - {4,-12,4,-12, GLT_RGB(120,120,120)},\ - {5,-12,5,-12, GLT_RGB(118,118,118)},\ - {6,-12,6,-12, GLT_RGB(117,117,117)},\ - {7,-12,-8,-12, GLT_RGB(116,116,116)},\ - {-7,-12,-7,-12, GLT_RGB(117,117,117)},\ - {-6,-12,-6,-12, GLT_RGB(118,118,118)},\ - {-5,-12,-5,-12, GLT_RGB(120,120,120)},\ - {-4,-12,-4,-12, GLT_RGB(123,123,123)},\ - {-3,-12,-3,-12, GLT_RGB(130,130,130)},\ - {-2,-12,-2,-12, GLT_RGB(71,71,71)},\ - {-1,-12,-1,-12, GLT_RGB(12,12,12)},\ - \ - {0,-13,0,-13, GLT_RGB(13,13,13)},\ - {1,-13,1,-13, GLT_RGB(71,71,71)},\ - {2,-13,2,-13, GLT_RGB(130,130,130)},\ - {3,-13,3,-13, GLT_RGB(123,123,123)},\ - {4,-13,4,-13, GLT_RGB(120,120,120)},\ - {5,-13,5,-13, GLT_RGB(117,117,117)},\ - {6,-13,-7,-13, GLT_RGB(115,115,115)},\ - {-6,-13,-6,-13, GLT_RGB(117,117,117)},\ - {-5,-13,-5,-13, GLT_RGB(120,120,120)},\ - {-4,-13,-4,-13, GLT_RGB(123,123,123)},\ - {-3,-13,-3,-13, GLT_RGB(130,130,130)},\ - {-2,-13,-2,-13, GLT_RGB(71,71,71)},\ - {-1,-13,-1,-13, GLT_RGB(13,13,13)},\ - \ - {0,-14,0,-14, GLT_RGB(13,13,13)},\ - {1,-14,1,-14, GLT_RGB(71,71,71)},\ - {2,-14,2,-14, GLT_RGB(130,130,130)},\ - {3,-14,3,-14, GLT_RGB(123,123,123)},\ - {4,-14,4,-14, GLT_RGB(120,120,120)},\ - {5,-14,5,-14, GLT_RGB(116,116,116)},\ - {6,-14,-7,-14, GLT_RGB(114,114,114)},\ - {-6,-14,-6,-14, GLT_RGB(116,116,116)},\ - {-5,-14,-5,-14, GLT_RGB(120,120,120)},\ - {-4,-14,-4,-14, GLT_RGB(123,123,123)},\ - {-3,-14,-3,-14, GLT_RGB(130,130,130)},\ - {-2,-14,-2,-14, GLT_RGB(71,71,71)},\ - {-1,-14,-1,-14, GLT_RGB(13,13,13)},\ - \ - {0,-15,0,-15, GLT_RGB(13,13,13)},\ - {1,-15,1,-15, GLT_RGB(72,72,72)},\ - {2,-15,2,-15, GLT_RGB(131,131,131)},\ - {3,-15,3,-15, GLT_RGB(123,123,123)},\ - {4,-15,4,-15, GLT_RGB(120,120,120)},\ - {5,-15,5,-15, GLT_RGB(116,116,116)},\ - {6,-15,-7,-15, GLT_RGB(114,114,114)},\ - {-6,-15,-6,-15, GLT_RGB(116,116,116)},\ - {-5,-15,-5,-15, GLT_RGB(120,120,120)},\ - {-4,-15,-4,-15, GLT_RGB(123,123,123)},\ - {-3,-15,-3,-15, GLT_RGB(131,131,131)},\ - {-2,-15,-2,-15, GLT_RGB(72,72,72)},\ - {-1,-15,-1,-15, GLT_RGB(13,13,13)},\ - \ - { INVALID_RGN, 0, 0, 0, 0}\ -} - -const CUSTOM_SHAPE g_shape_btn_normal[] = BUTTON_NORMAL; -const CUSTOM_SHAPE g_shape_btn_focus[] = BUTTON_FOCUS; -const CUSTOM_SHAPE g_shape_btn_push[] = BUTTON_PUSH; -const CUSTOM_SHAPE g_shape_btn_disable[] = BUTTON_DISABLE; - -const CUSTOM_SHAPE g_shape_listbox_select[] = LIST_BOX_SELECT; -const CUSTOM_SHAPE g_shape_listbox_push[] = LIST_BOX_PUSH; -const CUSTOM_SHAPE g_shape_listbox_extend[] = LIST_BOX_EXTEND; - -const CUSTOM_SHAPE g_shape_keyboard_btn_normal[] = KEYBOARD_BUTTON_NORAML_RGN; -const CUSTOM_SHAPE g_shape_keyboard_btn_push[] = KEYBOARD_BUTTON_PUSHED_RGN; diff --git a/gui/src/spinbox.cpp b/gui/src/spinbox.cpp index 30d2864..84c4e10 100644 --- a/gui/src/spinbox.cpp +++ b/gui/src/spinbox.cpp @@ -2,13 +2,12 @@ #include "core_include/rect.h" #include "core_include/cmd_target.h" #include "core_include/wnd.h" -#include "core_include/resource_type.h" +#include "core_include/resource.h" #include "core_include/word.h" #include "core_include/surface.h" #include "../gui_include/button.h" -#include "../gui_include/font.h" +#include "../gui_include/my_resource.h" #include "../gui_include/spinbox.h" -#include "../gui_include/shape_resource.h" #define ARROW_BT_HEIGHT 55 #define ID_BT_ARROW_UP 1 @@ -22,9 +21,9 @@ GLT_END_MESSAGE_MAP() void c_spin_box::pre_create_wnd() { m_style = GLT_ATTR_VISIBLE | GLT_ATTR_FOCUS | ALIGN_HCENTER | ALIGN_VCENTER; - m_font_type = FONT_ENG_SMB_AA(); - m_font_color = GLT_RGB(33,41,57); - m_bg_color = GLT_RGB(255,255,255); + m_font_type = c_my_resource::get_font(FONT_ENG_SMB_AA); + m_bg_color = c_my_resource::get_color(CTRL_BACK_GROUND); + m_font_color = c_my_resource::get_color(CTRL_FORE_GROUND); m_max = 6; m_min = 1; @@ -35,22 +34,22 @@ void c_spin_box::pre_create_wnd() c_rect rect; get_screen_rect(rect); - m_bt_arrow_up_rect.m_left = rect.m_left; - m_bt_arrow_up_rect.m_right = rect.m_left + rect.Width() / 2 - 1; - m_bt_arrow_up_rect.m_top = rect.m_bottom + 1; - m_bt_arrow_up_rect.m_bottom = m_bt_arrow_up_rect.m_top + ARROW_BT_HEIGHT; + m_bt_up_rect.m_left = rect.m_left; + m_bt_up_rect.m_right = rect.m_left + rect.Width() / 2 - 1; + m_bt_up_rect.m_top = rect.m_bottom + 1; + m_bt_up_rect.m_bottom = m_bt_up_rect.m_top + ARROW_BT_HEIGHT; - m_bt_arrow_down_rect.m_left = rect.m_left + rect.Width() / 2; - m_bt_arrow_down_rect.m_right = rect.m_right; - m_bt_arrow_down_rect.m_top = rect.m_bottom + 1; - m_bt_arrow_down_rect.m_bottom = m_bt_arrow_down_rect.m_top + ARROW_BT_HEIGHT; + m_bt_down_rect.m_left = rect.m_left + rect.Width() / 2; + m_bt_down_rect.m_right = rect.m_right; + m_bt_down_rect.m_top = rect.m_bottom + 1; + m_bt_down_rect.m_bottom = m_bt_down_rect.m_top + ARROW_BT_HEIGHT; } void c_spin_box::on_touch_down(int x, int y) { c_rect arrow_rect = m_wnd_rect; - arrow_rect.m_right = m_bt_arrow_down_rect.m_right; - arrow_rect.m_bottom = m_bt_arrow_down_rect.m_bottom; + arrow_rect.m_right = m_bt_down_rect.m_right; + arrow_rect.m_bottom = m_bt_down_rect.m_bottom; if ( TRUE == m_wnd_rect.PtInRect(x, y) ) {//click spin box @@ -120,30 +119,25 @@ void c_spin_box::on_kill_focus() void c_spin_box::show_arrow_button() { - extern const GUI_BITMAP bmspin_up_button_normal; - extern const GUI_BITMAP bmspin_up_button_focus; - extern const GUI_BITMAP bmspin_down_button_normal; - extern const GUI_BITMAP bmspin_down_button_focus; - - fill_rect(m_bt_arrow_up_rect.m_left, m_bt_arrow_up_rect.m_top, m_bt_arrow_down_rect.m_right, m_bt_arrow_down_rect.m_bottom, GLT_RGB(99,108,124)); + fill_rect(m_bt_up_rect.m_left, m_bt_up_rect.m_top, m_bt_down_rect.m_right, m_bt_down_rect.m_bottom, GLT_RGB(99,108,124)); - m_bt_arrow_up.connect(this, ID_BT_ARROW_UP, 0, 0, m_wnd_rect.Height(), m_bt_arrow_up_rect.Width(),m_bt_arrow_up_rect.Height()); - m_bt_arrow_up.set_bitmap(&bmspin_up_button_normal); - m_bt_arrow_up.set_focus_bitmap(&bmspin_up_button_focus); - m_bt_arrow_up.set_pushed_bitmap(&bmspin_up_button_focus); - m_bt_arrow_up.show_window(); + m_bt_up.connect(this, ID_BT_ARROW_UP, 0, 0, m_wnd_rect.Height(), m_bt_up_rect.Width(),m_bt_up_rect.Height()); + m_bt_up.set_bitmap(c_my_resource::get_bmp(BITMAP_UP_BT_NORMAL)); + m_bt_up.set_focus_bitmap(c_my_resource::get_bmp(BITMAP_UP_BT_FOCUS)); + m_bt_up.set_pushed_bitmap(c_my_resource::get_bmp(BITMAP_UP_BT_FOCUS)); + m_bt_up.show_window(); - m_bt_arrow_down.connect(this, ID_BT_ARROW_DOWN, 0, m_bt_arrow_up_rect.Width(), m_wnd_rect.Height(), m_bt_arrow_down_rect.Width(),m_bt_arrow_down_rect.Height()); - m_bt_arrow_down.set_bitmap(&bmspin_down_button_normal); - m_bt_arrow_down.set_focus_bitmap(&bmspin_down_button_focus); - m_bt_arrow_down.set_pushed_bitmap(&bmspin_down_button_focus); - m_bt_arrow_down.show_window(); + m_bt_down.connect(this, ID_BT_ARROW_DOWN, 0, m_bt_up_rect.Width(), m_wnd_rect.Height(), m_bt_down_rect.Width(),m_bt_down_rect.Height()); + m_bt_down.set_bitmap(c_my_resource::get_bmp(BITMAP_DOWN_BT_NORMAL)); + m_bt_down.set_focus_bitmap(c_my_resource::get_bmp(BITMAP_DOWN_BT_FOCUS)); + m_bt_down.set_pushed_bitmap(c_my_resource::get_bmp(BITMAP_DOWN_BT_FOCUS)); + m_bt_down.show_window(); } void c_spin_box::hide_arrow_button() { - m_bt_arrow_up.disconnect(); - m_bt_arrow_down.disconnect(); + m_bt_up.disconnect(); + m_bt_down.disconnect(); } void c_spin_box::on_paint() @@ -155,18 +149,15 @@ void c_spin_box::on_paint() switch(m_status) { - case STATUS_PUSHED: - if (m_z_order == m_parent->get_z_order()) + case STATUS_NORMAL: + if (m_z_order > m_parent->get_z_order()) { - m_z_order++; + hide_arrow_button(); + tmp_rect.Empty(); + m_surface->set_frame_layer(tmp_rect, m_z_order); + m_z_order = m_parent->get_z_order(); } - tmp_rect.m_top = m_bt_arrow_down_rect.m_top; - tmp_rect.m_bottom = m_bt_arrow_down_rect.m_bottom; - m_surface->set_frame_layer(tmp_rect, m_z_order); - show_arrow_button(); - - m_surface->draw_custom_shape(rect.m_left, rect.m_top, rect.m_right, rect.m_bottom, m_parent->get_bg_color(), g_shape_listbox_push,m_parent->get_z_order()); - m_font_color = GLT_RGB(2,124,165); + fill_rect_ex(rect, m_bg_color, c_my_resource::get_shape(BUTTON_NORMAL)); break; case STATUS_FOCUSED: if (m_z_order > m_parent->get_z_order()) @@ -176,21 +167,21 @@ void c_spin_box::on_paint() m_surface->set_frame_layer(tmp_rect, m_z_order); m_z_order = m_parent->get_z_order(); } - - draw_custom_shape(rect.m_left, rect.m_top, rect.m_right, rect.m_bottom, m_parent->get_bg_color(), g_shape_btn_focus); - m_font_color = GLT_RGB(255,255,255); + fill_rect_ex(rect, m_bg_color, c_my_resource::get_shape(BUTTON_FOCUS)); break; - case STATUS_NORMAL: - if (m_z_order > m_parent->get_z_order()) + case STATUS_PUSHED: + if (m_z_order == m_parent->get_z_order()) { - hide_arrow_button(); - tmp_rect.Empty(); - m_surface->set_frame_layer(tmp_rect, m_z_order); - m_z_order = m_parent->get_z_order(); + m_z_order++; } + tmp_rect.m_top = m_bt_down_rect.m_top; + tmp_rect.m_bottom = m_bt_down_rect.m_bottom; + m_surface->set_frame_layer(tmp_rect, m_z_order); + show_arrow_button(); - draw_custom_shape(rect.m_left, rect.m_top, rect.m_right, rect.m_bottom, m_parent->get_bg_color(), g_shape_btn_normal); - m_font_color = GLT_RGB(255,255,255); + m_surface->fill_rect_ex(rect.m_left, rect.m_top, rect.m_right, rect.m_bottom, m_bg_color, c_my_resource::get_shape(LIST_BOX_PUSH),m_parent->get_z_order()); + c_word::draw_value_in_rect(m_surface, m_parent->get_z_order(), m_cur_value, m_digit, rect, m_font_type, GLT_RGB(2, 124, 165), COLOR_TRANPARENT, m_style); + return; break; default: ASSERT(FALSE); diff --git a/gui/src/table.cpp b/gui/src/table.cpp index cdbc02d..b64d12c 100644 --- a/gui/src/table.cpp +++ b/gui/src/table.cpp @@ -1,11 +1,11 @@ #include "core_include/api.h" -#include "core_include/resource_type.h" +#include "core_include/resource.h" #include "core_include/rect.h" #include "core_include/word.h" #include "core_include/surface.h" #include "core_include/cmd_target.h" #include "core_include/wnd.h" -#include "../gui_include/font.h" +#include "../gui_include/my_resource.h" #include "../gui_include/table.h" @@ -16,13 +16,7 @@ void c_table::pre_create_wnd() int c_table::set_item(int row, int col, char* str, unsigned int with_bg_color) { - draw_item( row, col,str, with_bg_color); - return 1; -} - -int c_table::set_item(int row, int col, unsigned int str_id, unsigned int with_bg_color) -{ - draw_item(row, col, str_id, with_bg_color); + draw_item( row, col, str, with_bg_color); return 1; } @@ -44,11 +38,6 @@ void c_table::draw_item(int row, int col, const char* str, unsigned int with_bg_ c_word::draw_string_in_rect(m_surface, m_z_order, str, rect, m_font_type, m_font_color, COLOR_TRANPARENT, m_align_type); } -void c_table::draw_item(int row, int col, unsigned int str_id, unsigned int with_bg_color) -{ - draw_item(row, col, c_word::get_string(str_id), with_bg_color); -} - void c_table::set_row_height(unsigned int height) { for (unsigned int i = 0; i < m_row_num; i ++)