diff --git a/demos/assets/inc/images/3.res b/demos/assets/inc/images/3.res
index cbbfd131a..fc15c52ae 100644
--- a/demos/assets/inc/images/3.res
+++ b/demos/assets/inc/images/3.res
@@ -174,4 +174,4 @@ const unsigned char image_3[] = {
0xfa,0x09,0xa9,0x96,0xc1,0x0d,0xcd,0xc5,0xff,0x00,0x91,0x12,0xd3,0xfe,0x01,0xff,0x00,0xa1,0xd5,0x76,
0x22,0x5d,0x4e,0x0f,0xc6,0xbf,0xf2,0x38,0xcb,0xfe,0xfa,0xff,0x00,0xe8,0x34,0xea,0x15,0x0d,0x8b,0x36,
0x3f,0xf1,0xfb,0x17,0xfd,0x70,0x7f,0xe9,0x5d,0x11,0xd8,0xe7,0x99,0x22,0xff,0x00,0xac,0x1f,0x8d,0x38,
-0x93,0x2d,0x8c,0xfd,0x57,0xfe,0x3e,0x87,0xfb,0xa2,0x92,0x25,0x6c,0x7f,0xff,0xd9,0xaf,0x7f,0x00,0x00,};/*3520*/
+0x93,0x2d,0x8c,0xfd,0x57,0xfe,0x3e,0x87,0xfb,0xa2,0x92,0x25,0x6c,0x7f,0xff,0xd9,0x00,0x00,0x00,0x00,};/*3520*/
diff --git a/demos/assets/inc/images/arrow_up_o.res b/demos/assets/inc/images/arrow_up_o.res
index 669b6d221..ecd28e374 100644
--- a/demos/assets/inc/images/arrow_up_o.res
+++ b/demos/assets/inc/images/arrow_up_o.res
@@ -9,4 +9,4 @@ const unsigned char image_arrow_up_o[] = {
0x44,0x41,0x54,0x48,0xc7,0x63,0x60,0x18,0x05,0xa3,0x60,0x14,0x8c,0x3c,0x50,0x08,0xc5,0x34,0x01,0x39,
0x0c,0x0c,0x0c,0xff,0xa1,0x38,0x9b,0xda,0x86,0x4f,0x41,0x32,0x9c,0xea,0x96,0x2c,0xc5,0x62,0x38,0x0c,
0xd7,0x50,0x6a,0x38,0xe3,0x68,0xb2,0x1b,0x05,0xa3,0x60,0x08,0x00,0x00,0xe3,0x5d,0x0f,0xcf,0xf7,0x25,
-0x81,0x18,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82,0x00,0x00,0xf8,0x11,};/*218*/
+0x81,0x18,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82,0x00,0x00,0x00,0x00,};/*218*/
diff --git a/demos/assets/inc/images/backspace.data b/demos/assets/inc/images/backspace.data
index b73d088dd..690ddcdeb 100644
--- a/demos/assets/inc/images/backspace.data
+++ b/demos/assets/inc/images/backspace.data
@@ -53,4 +53,4 @@ const unsigned char image_backspace[] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-0x00,0x00,0x00,0x00,};/*1084*/
+0x68,0xbe,0x39,0x77,};/*1084*/
diff --git a/demos/assets/inc/images/bricks.data b/demos/assets/inc/images/bricks.data
index 1b5b033aa..af3daf646 100644
--- a/demos/assets/inc/images/bricks.data
+++ b/demos/assets/inc/images/bricks.data
@@ -361,4 +361,4 @@ const unsigned char image_bricks[] = {
0xcd,0xbb,0xcd,0xbb,0xcd,0xbb,0xed,0xbb,0xcd,0xbb,0xcd,0xbb,0xcd,0xbb,0xcd,0xbb,0xcd,0xbb,0xcc,0xbb,
0xed,0xbb,0x0d,0xc4,0x0d,0xbc,0x0d,0xc4,0x0d,0xc4,0x0d,0xc4,0xed,0xc3,0x0d,0xc4,0x0d,0xc4,0x0d,0xc4,
0x0e,0xcc,0x11,0xd5,0xb0,0xc4,0xad,0xbb,0xac,0xbb,0xec,0xc3,0xec,0xc3,0xcc,0xbb,0xcc,0xbb,0xcc,0xc3,
-0xcc,0xc3,0xed,0xc3,0xed,0xc3,0xcc,0xbb,0xcc,0xbb,0xd2,0xc4,0x00,0x00,0x00,0x00,0x99,0xc2,0xd4,0xb3,};/*7260*/
+0xcc,0xc3,0xed,0xc3,0xed,0xc3,0xcc,0xbb,0xcc,0xbb,0xd2,0xc4,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};/*7260*/
diff --git a/demos/assets/inc/images/muted.res b/demos/assets/inc/images/muted.res
index 04fa5a8bc..fa8931301 100644
--- a/demos/assets/inc/images/muted.res
+++ b/demos/assets/inc/images/muted.res
@@ -24,4 +24,4 @@ const unsigned char image_muted[] = {
0xcb,0x8d,0xad,0x03,0x6b,0xb2,0xc1,0x0d,0x60,0x4a,0xda,0xfb,0xc0,0xa4,0xc4,0x4d,0xa0,0x28,0xf1,0xbb,
0xfc,0xa3,0x83,0x66,0x82,0x00,0x62,0x4f,0x2f,0xda,0x60,0x85,0x14,0xb1,0x65,0xa0,0x94,0x92,0xf3,0x06,
0xdc,0xf2,0x5f,0x36,0x04,0xce,0x20,0x9e,0x74,0x4b,0xf5,0x44,0x82,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,
-0x44,0xae,0x42,0x60,0x82,0x52,0x49,0x0b,0x01,};/*509*/
+0x44,0xae,0x42,0x60,0x82,0x00,0x00,0x00,0x00,};/*509*/
diff --git a/demos/assets/inc/images/rgba.res b/demos/assets/inc/images/rgba.res
index 9a1c4a285..f36716ab2 100644
--- a/demos/assets/inc/images/rgba.res
+++ b/demos/assets/inc/images/rgba.res
@@ -23,4 +23,4 @@ const unsigned char image_rgba[] = {
0x38,0xa0,0x36,0x00,0xd7,0xa6,0x2d,0x13,0xe0,0x2d,0x63,0xb6,0x1d,0xcb,0xea,0x5a,0x34,0x17,0x02,0xa6,
0xd2,0xc7,0x54,0xec,0x99,0xca,0x5b,0x53,0x41,0xbf,0xfa,0x2f,0xcc,0x9c,0xbe,0xe0,0xa3,0x5a,0x29,0x81,
0x17,0x60,0xdb,0x37,0xfc,0xd8,0xef,0x1b,0xa0,0xa6,0xd0,0xfb,0x94,0xf5,0x6e,0x7c,0xe9,0x10,0x26,0x48,
-0x13,0xab,0x3e,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82,0x00,0x70,0x13,0x37,};/*499*/
+0x13,0xab,0x3e,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82,0x00,0x00,0x00,0x00,};/*499*/
diff --git a/demos/assets/inc/images/right_off.data b/demos/assets/inc/images/right_off.data
index 77e889ec7..b3b528ea6 100644
--- a/demos/assets/inc/images/right_off.data
+++ b/demos/assets/inc/images/right_off.data
@@ -117,4 +117,4 @@ const unsigned char image_right_off[] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-0x50,0x09,0x40,0xca,};/*2364*/
+0x00,0x00,0x00,0x00,};/*2364*/
diff --git a/demos/assets/inc/images/shift.data b/demos/assets/inc/images/shift.data
index 3cf2116d1..2709661b3 100644
--- a/demos/assets/inc/images/shift.data
+++ b/demos/assets/inc/images/shift.data
@@ -53,4 +53,4 @@ const unsigned char image_shift[] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-0x6f,0x75,0x69,0x2e,};/*1084*/
+0x00,0x00,0x00,0x00,};/*1084*/
diff --git a/demos/assets/inc/images/slider_v_fg.data b/demos/assets/inc/images/slider_v_fg.data
index 45f8a6adf..6b0a55cbc 100644
--- a/demos/assets/inc/images/slider_v_fg.data
+++ b/demos/assets/inc/images/slider_v_fg.data
@@ -49,4 +49,4 @@ const unsigned char image_slider_v_fg[] = {
0x04,0x7a,0xfd,0xff,0x30,0x8a,0xef,0xbf,0xa9,0xc8,0xef,0x36,0x04,0x7a,0xfd,0xff,0x04,0x7a,0xfd,0xff,
0x04,0x7a,0xfd,0xff,0x04,0x7a,0xfd,0xff,0x04,0x7a,0xfd,0xff,0x04,0x7a,0xfd,0xff,0xa9,0xc8,0xef,0x72,
0x00,0x00,0x00,0x00,0xa4,0xc5,0xef,0x52,0x2d,0x89,0xf0,0x98,0x0a,0x7d,0xf9,0xff,0x0a,0x7d,0xf9,0xff,
-0x2d,0x89,0xf0,0x98,0xa4,0xc5,0xef,0x5b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};/*1020*/
+0x2d,0x89,0xf0,0x98,0xa4,0xc5,0xef,0x5b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x50,0x2c,0x39,0x77,};/*1020*/
diff --git a/demos/assets/inc/styles/default.data b/demos/assets/inc/styles/default.data
index 996b52c8c..a492eb695 100644
--- a/demos/assets/inc/styles/default.data
+++ b/demos/assets/inc/styles/default.data
@@ -804,4 +804,4 @@ const unsigned char style_default[] = {
0x00,0x00,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x12,0x96,0xdb,0xff,0x01,0x00,0x00,0x00,0x0e,0x00,
0x00,0x00,0x63,0x68,0x65,0x63,0x6b,0x00,0x03,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
0x06,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x12,0x96,0xdb,0xff,0x01,0x00,0x00,0x00,
-0x0e,0x00,0x00,0x00,0x63,0x68,0x65,0x63,0x6b,0x00,0x00,0x00,0x00,0x00,};/*16114*/
+0x0e,0x00,0x00,0x00,0x63,0x68,0x65,0x63,0x6b,0x00,0x00,0x00,0x90,0x9f,};/*16114*/
diff --git a/demos/assets/inc/styles/keyboard.data b/demos/assets/inc/styles/keyboard.data
index 07ed7cd99..94c9b5071 100644
--- a/demos/assets/inc/styles/keyboard.data
+++ b/demos/assets/inc/styles/keyboard.data
@@ -46,4 +46,4 @@ const unsigned char style_keyboard[] = {
0x03,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x01,0x00,0x00,0x00,0xe0,0xe0,0xe0,0xff,
0x0a,0x00,0x00,0x00,0xa0,0xa0,0xa0,0xff,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
0xfa,0xfa,0xfa,0xff,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xcf,0xd4,0xda,0xff,
-0x00,0x00,0x00,0x00,0x14,0x63,0x61,0x6e,};/*948*/
+0x00,0x00,0x00,0x00,0x20,0x8a,0x51,0x89,};/*948*/
diff --git a/demos/assets/inc/styles/tab_bottom_compact.data b/demos/assets/inc/styles/tab_bottom_compact.data
index 0050ac548..e547d407c 100644
--- a/demos/assets/inc/styles/tab_bottom_compact.data
+++ b/demos/assets/inc/styles/tab_bottom_compact.data
@@ -11,4 +11,4 @@ const unsigned char style_tab_bottom_compact[] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x02,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0xa0,0xa0,0xa0,0xff,0x02,0x00,0x00,0x00,0xf0,0xf0,0xf0,0xff,
0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0xa0,0xa0,0xa0,0xff,0x0b,0x00,0x00,0x00,
-0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};/*252*/
+0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,};/*252*/
diff --git a/demos/assets/inc/ui/basic.data b/demos/assets/inc/ui/basic.data
index 0d7e3ddcb..287f85534 100644
--- a/demos/assets/inc/ui/basic.data
+++ b/demos/assets/inc/ui/basic.data
@@ -1,82 +1,110 @@
const unsigned char ui_basic[] = {
-0x04,0x00,0x01,0x01,0x1e,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x62,0x61,0x73,0x69,0x63,0x00,0x64,0x61,
+0x04,0x00,0x01,0x01,0x45,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x62,0x61,0x73,0x69,0x63,0x00,0x64,0x61,
0x74,0x61,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x12,0x12,0x22,0x11,0x77,0x69,0x6e,0x64,0x6f,0x77,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6d,0x61,0x69,0x6e,0x00,0x61,0x6e,0x69,0x6d,0x5f,0x68,
-0x69,0x6e,0x74,0x00,0x68,0x74,0x72,0x61,0x6e,0x73,0x6c,0x61,0x74,0x65,0x00,0x00,0x62,0x75,0x74,0x74,
+0x69,0x6e,0x74,0x00,0x68,0x74,0x72,0x61,0x6e,0x73,0x6c,0x61,0x74,0x65,0x00,0x00,0x61,0x70,0x70,0x5f,
+0x62,0x61,0x72,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x64,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6c,0x61,0x62,0x65,0x6c,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x00,
+0x00,0x64,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x74,0x65,0x78,0x74,0x00,0x42,0x61,0x73,0x69,0x63,0x20,
+0x43,0x6f,0x6e,0x74,0x72,0x6f,0x6c,0x73,0x00,0x00,0x00,0x00,0x72,0x6f,0x77,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
+0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x72,0x3a,0x31,0x20,0x63,
+0x3a,0x33,0x20,0x78,0x6d,0x3a,0x32,0x20,0x73,0x3a,0x31,0x30,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,0x69,0x6e,0x63,0x5f,0x76,
+0x61,0x6c,0x75,0x65,0x00,0x74,0x65,0x78,0x74,0x00,0x49,0x6e,0x63,0x00,0x00,0x00,0x62,0x75,0x74,0x74,
0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x0a,0x00,0x00,0x00,0x05,0x00,0x00,0x00,
-0x19,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,0x69,0x6e,0x63,
-0x5f,0x76,0x61,0x6c,0x75,0x65,0x00,0x74,0x65,0x78,0x74,0x00,0x49,0x6e,0x63,0x00,0x00,0x00,0x62,0x75,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,0x63,0x6c,0x6f,
+0x73,0x65,0x00,0x74,0x65,0x78,0x74,0x00,0x43,0x6c,0x6f,0x73,0x65,0x00,0x00,0x00,0x62,0x75,0x74,0x74,
+0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,0x64,0x65,0x63,
+0x5f,0x76,0x61,0x6c,0x75,0x65,0x00,0x74,0x65,0x78,0x74,0x00,0x44,0x65,0x63,0x00,0x00,0x00,0x00,0x72,
+0x6f,0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x50,
+0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6c,0x61,0x79,0x6f,0x75,
+0x74,0x00,0x72,0x3a,0x31,0x20,0x63,0x3a,0x33,0x20,0x78,0x6d,0x3a,0x32,0x20,0x73,0x3a,0x31,0x30,0x00,
+0x00,0x6c,0x61,0x62,0x65,0x6c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,
+0x65,0x00,0x6c,0x65,0x66,0x74,0x00,0x74,0x65,0x78,0x74,0x00,0x4c,0x65,0x66,0x74,0x00,0x00,0x00,0x6c,
+0x61,0x62,0x65,0x6c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,
+0x63,0x65,0x6e,0x74,0x65,0x72,0x00,0x74,0x65,0x78,0x74,0x00,0x43,0x65,0x6e,0x74,0x65,0x72,0x00,0x00,
+0x00,0x6c,0x61,0x62,0x65,0x6c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,
+0x65,0x00,0x72,0x69,0x67,0x68,0x74,0x00,0x74,0x65,0x78,0x74,0x00,0x52,0x69,0x67,0x68,0x74,0x00,0x00,
+0x00,0x00,0x70,0x72,0x6f,0x67,0x72,0x65,0x73,0x73,0x5f,0x62,0x61,0x72,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0a,0x00,
+0x00,0x00,0x80,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x61,
+0x6d,0x65,0x00,0x62,0x61,0x72,0x31,0x00,0x76,0x61,0x6c,0x75,0x65,0x00,0x34,0x30,0x00,0x00,0x00,0x70,
+0x72,0x6f,0x67,0x72,0x65,0x73,0x73,0x5f,0x62,0x61,0x72,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x01,0x00,0x00,0x80,
+0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,
+0x62,0x61,0x72,0x32,0x00,0x76,0x61,0x6c,0x75,0x65,0x00,0x32,0x30,0x00,0x76,0x65,0x72,0x74,0x69,0x63,
+0x61,0x6c,0x00,0x74,0x72,0x75,0x65,0x00,0x00,0x00,0x63,0x6f,0x6c,0x75,0x6d,0x6e,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x01,0x00,0x14,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x3c,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x72,0x3a,0x32,0x20,0x63,0x3a,0x31,
+0x20,0x79,0x6d,0x3a,0x32,0x20,0x73,0x3a,0x31,0x30,0x00,0x00,0x63,0x68,0x65,0x63,0x6b,0x5f,0x62,0x75,
0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x05,0x00,
-0x00,0x00,0x19,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,0x63,
-0x6c,0x6f,0x73,0x65,0x00,0x74,0x65,0x78,0x74,0x00,0x43,0x6c,0x6f,0x73,0x65,0x00,0x00,0x00,0x62,0x75,
-0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x01,0x00,0x0a,0x00,0x00,0x00,0x05,0x00,
-0x00,0x00,0x19,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,0x64,
-0x65,0x63,0x5f,0x76,0x61,0x6c,0x75,0x65,0x00,0x74,0x65,0x78,0x74,0x00,0x44,0x65,0x63,0x00,0x00,0x00,
-0x6c,0x61,0x62,0x65,0x6c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x0a,0x00,0x00,0x00,
-0x28,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,
-0x00,0x6c,0x65,0x66,0x74,0x00,0x74,0x65,0x78,0x74,0x00,0x4c,0x65,0x66,0x74,0x00,0x00,0x00,0x6c,0x61,
-0x62,0x65,0x6c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x28,0x00,
-0x00,0x00,0x19,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,0x63,
-0x65,0x6e,0x74,0x65,0x72,0x00,0x74,0x65,0x78,0x74,0x00,0x43,0x65,0x6e,0x74,0x65,0x72,0x00,0x00,0x00,
-0x6c,0x61,0x62,0x65,0x6c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x01,0x00,0x0a,0x00,0x00,0x00,
-0x28,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,
-0x00,0x72,0x69,0x67,0x68,0x74,0x00,0x74,0x65,0x78,0x74,0x00,0x52,0x69,0x67,0x68,0x74,0x00,0x00,0x00,
-0x70,0x72,0x6f,0x67,0x72,0x65,0x73,0x73,0x5f,0x62,0x61,0x72,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
-0x46,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,
-0x00,0x62,0x61,0x72,0x31,0x00,0x76,0x61,0x6c,0x75,0x65,0x00,0x34,0x30,0x00,0x00,0x00,0x70,0x72,0x6f,
-0x67,0x72,0x65,0x73,0x73,0x5f,0x62,0x61,0x72,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x01,0x00,0x00,0x46,0x00,0x00,
-0x00,0x1e,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,0x62,0x61,
-0x72,0x32,0x00,0x76,0x61,0x6c,0x75,0x65,0x00,0x32,0x30,0x00,0x76,0x65,0x72,0x74,0x69,0x63,0x61,0x6c,
-0x00,0x74,0x72,0x75,0x65,0x00,0x00,0x00,0x63,0x68,0x65,0x63,0x6b,0x5f,0x62,0x75,0x74,0x74,0x6f,0x6e,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-0x00,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,
-0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,0x63,0x31,0x00,0x74,0x65,0x78,0x74,0x00,0x42,0x6f,0x6f,
-0x6b,0x00,0x00,0x00,0x63,0x68,0x65,0x63,0x6b,0x5f,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,0x63,0x31,0x00,0x74,0x65,0x78,0x74,
+0x00,0x42,0x6f,0x6f,0x6b,0x00,0x00,0x00,0x63,0x68,0x65,0x63,0x6b,0x5f,0x62,0x75,0x74,0x74,0x6f,0x6e,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-0x64,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-0x6e,0x61,0x6d,0x65,0x00,0x63,0x32,0x00,0x74,0x65,0x78,0x74,0x00,0x46,0x6f,0x6f,0x64,0x00,0x00,0x00,
-0x72,0x61,0x64,0x69,0x6f,0x5f,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,
-0x96,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,
-0x00,0x72,0x31,0x00,0x74,0x65,0x78,0x74,0x00,0x42,0x6f,0x6f,0x6b,0x00,0x00,0x00,0x72,0x61,0x64,0x69,
-0x6f,0x5f,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x96,0x00,0x00,0x00,
-0x50,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,0x72,0x32,0x00,
-0x74,0x65,0x78,0x74,0x00,0x46,0x6f,0x6f,0x64,0x00,0x00,0x00,0x72,0x61,0x64,0x69,0x6f,0x5f,0x62,0x75,
-0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xbe,0x00,0x00,0x00,0x96,0x00,0x00,0x00,0x50,0x00,0x00,0x00,
-0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,0x72,0x33,0x00,0x74,0x65,0x78,0x74,
-0x00,0x50,0x65,0x6e,0x63,0x69,0x6c,0x00,0x76,0x61,0x6c,0x75,0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x00,
-0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0a,0x00,0x00,
-0x00,0x68,0x01,0x00,0x00,0x28,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x72,0x61,
-0x77,0x5f,0x74,0x79,0x70,0x65,0x00,0x69,0x63,0x6f,0x6e,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x65,0x61,
-0x72,0x74,0x68,0x00,0x00,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-0x00,0x00,0x3c,0x00,0x00,0x00,0x68,0x01,0x00,0x00,0x28,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x00,0x00,
-0x00,0x00,0x64,0x72,0x61,0x77,0x5f,0x74,0x79,0x70,0x65,0x00,0x69,0x63,0x6f,0x6e,0x00,0x69,0x6d,0x61,
-0x67,0x65,0x00,0x72,0x67,0x62,0x61,0x00,0x00,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,0x63,0x32,0x00,0x74,0x65,0x78,0x74,0x00,0x46,0x6f,0x6f,
+0x64,0x00,0x00,0x00,0x00,0x63,0x6f,0x6c,0x75,0x6d,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+0x00,0x14,0x00,0x00,0x00,0xe6,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x5a,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x72,0x3a,0x33,0x20,0x63,0x3a,0x31,0x20,0x79,0x6d,0x3a,0x32,
+0x20,0x73,0x3a,0x31,0x30,0x00,0x00,0x72,0x61,0x64,0x69,0x6f,0x5f,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x00,0x00,0x00,0x68,0x01,0x00,0x00,0x28,0x00,0x00,0x00,0x28,0x00,
-0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x72,0x61,0x77,0x5f,0x74,0x79,0x70,0x65,0x00,0x69,0x63,0x6f,0x6e,
-0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x72,0x67,0x62,0x00,0x00,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xa0,0x00,0x00,0x00,0x68,0x01,0x00,0x00,0x28,0x00,0x00,
-0x00,0x28,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x72,0x61,0x77,0x5f,0x74,0x79,0x70,0x65,0x00,0x69,
-0x63,0x6f,0x6e,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x6d,0x65,0x73,0x73,0x61,0x67,0x65,0x00,0x00,0x00,
+0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,0x72,0x31,0x00,0x74,0x65,0x78,0x74,0x00,0x42,0x6f,0x6f,0x6b,
+0x00,0x00,0x00,0x72,0x61,0x64,0x69,0x6f,0x5f,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6e,
+0x61,0x6d,0x65,0x00,0x72,0x32,0x00,0x74,0x65,0x78,0x74,0x00,0x46,0x6f,0x6f,0x64,0x00,0x00,0x00,0x72,
+0x61,0x64,0x69,0x6f,0x5f,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,
+0x72,0x33,0x00,0x74,0x65,0x78,0x74,0x00,0x50,0x65,0x6e,0x63,0x69,0x6c,0x00,0x76,0x61,0x6c,0x75,0x65,
+0x00,0x74,0x72,0x75,0x65,0x00,0x00,0x00,0x00,0x67,0x72,0x69,0x64,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x03,0x01,0x00,0x14,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x64,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x72,0x3a,0x32,0x20,0x63,0x3a,0x33,0x20,
+0x78,0x6d,0x3a,0x32,0x20,0x73,0x3a,0x31,0x30,0x00,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x72,0x61,0x77,0x5f,0x74,0x79,0x70,0x65,0x00,0x69,0x63,0x6f,
+0x6e,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x65,0x61,0x72,0x74,0x68,0x00,0x00,0x00,0x69,0x6d,0x61,0x67,
+0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x72,0x61,0x77,0x5f,0x74,0x79,0x70,
+0x65,0x00,0x69,0x63,0x6f,0x6e,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x72,0x67,0x62,0x61,0x00,0x00,0x00,
0x69,0x6d,0x61,0x67,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,
-0x68,0x01,0x00,0x00,0x28,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x72,0x61,0x77,
-0x5f,0x74,0x79,0x70,0x65,0x00,0x69,0x63,0x6f,0x6e,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x72,0x65,0x64,
-0x5f,0x62,0x74,0x6e,0x5f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x9d,0xd6,};/*1614*/
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x72,0x61,0x77,
+0x5f,0x74,0x79,0x70,0x65,0x00,0x69,0x63,0x6f,0x6e,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x72,0x67,0x62,
+0x00,0x00,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,
+0x72,0x61,0x77,0x5f,0x74,0x79,0x70,0x65,0x00,0x69,0x63,0x6f,0x6e,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,
+0x6d,0x65,0x73,0x73,0x61,0x67,0x65,0x00,0x00,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x72,0x61,0x77,0x5f,0x74,0x79,0x70,0x65,0x00,0x69,0x63,0x6f,0x6e,
+0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x72,0x65,0x64,0x5f,0x62,0x74,0x6e,0x5f,0x6e,0x00,0x00,0x00,0x00,
+0x00,0x00,0x0e,0x00,0x08,};/*2165*/
diff --git a/demos/assets/inc/ui/color_picker_full.data b/demos/assets/inc/ui/color_picker_full.data
index 598ddefd2..74a47eec5 100644
--- a/demos/assets/inc/ui/color_picker_full.data
+++ b/demos/assets/inc/ui/color_picker_full.data
@@ -129,4 +129,4 @@ const unsigned char ui_color_picker_full[] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x03,
0x01,0x00,0x00,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,0x63,0x6c,0x6f,0x73,0x65,0x00,0x74,0x65,0x78,0x74,0x00,0x43,0x6c,
-0x6f,0x73,0x65,0x00,0x00,0x00,0x00,0x03,0x28,0x00,0x0c,};/*2611*/
+0x6f,0x73,0x65,0x00,0x00,0x00,0x00,0x00,0x43,0x00,0x00,};/*2611*/
diff --git a/demos/assets/inc/ui/color_picker_hsv.data b/demos/assets/inc/ui/color_picker_hsv.data
index 3e1f23162..ff4b5de8d 100644
--- a/demos/assets/inc/ui/color_picker_hsv.data
+++ b/demos/assets/inc/ui/color_picker_hsv.data
@@ -77,4 +77,4 @@ const unsigned char ui_color_picker_hsv[] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x03,
0x01,0x00,0x00,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,0x63,0x6c,0x6f,0x73,0x65,0x00,0x74,0x65,0x78,0x74,0x00,0x43,0x6c,
-0x6f,0x73,0x65,0x00,0x00,0x00,0x00,0x00,0x29,0x00,0x00,};/*1571*/
+0x6f,0x73,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};/*1571*/
diff --git a/demos/assets/inc/ui/color_picker_rgb.data b/demos/assets/inc/ui/color_picker_rgb.data
index 54ccb0344..ccb6b435e 100644
--- a/demos/assets/inc/ui/color_picker_rgb.data
+++ b/demos/assets/inc/ui/color_picker_rgb.data
@@ -77,4 +77,4 @@ const unsigned char ui_color_picker_rgb[] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x03,
0x01,0x00,0x00,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,0x63,0x6c,0x6f,0x73,0x65,0x00,0x74,0x65,0x78,0x74,0x00,0x43,0x6c,
-0x6f,0x73,0x65,0x00,0x00,0x00,0x00,0x00,0x29,0x00,0x00,};/*1571*/
+0x6f,0x73,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};/*1571*/
diff --git a/demos/assets/inc/ui/kb_float.data b/demos/assets/inc/ui/kb_float.data
index 9965368c3..bd893ae1d 100644
--- a/demos/assets/inc/ui/kb_float.data
+++ b/demos/assets/inc/ui/kb_float.data
@@ -81,4 +81,4 @@ const unsigned char ui_kb_float[] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x72,0x61,0x77,0x5f,
0x74,0x79,0x70,0x65,0x00,0x69,0x63,0x6f,0x6e,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x62,0x61,0x63,0x6b,
-0x73,0x70,0x61,0x63,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1a,0x99,0x98,0x03,};/*1656*/
+0x73,0x70,0x61,0x63,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};/*1656*/
diff --git a/demos/assets/inc/ui/kb_hex.data b/demos/assets/inc/ui/kb_hex.data
index 59b962df9..6ff9d5aca 100644
--- a/demos/assets/inc/ui/kb_hex.data
+++ b/demos/assets/inc/ui/kb_hex.data
@@ -94,4 +94,4 @@ const unsigned char ui_kb_hex[] = {
0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x64,0x72,0x61,0x77,0x5f,0x74,0x79,0x70,0x65,0x00,0x69,0x63,0x6f,0x6e,0x00,0x69,
0x6d,0x61,0x67,0x65,0x00,0x62,0x61,0x63,0x6b,0x73,0x70,0x61,0x63,0x65,0x00,0x00,0x00,0x00,0x00,0x00,
-0x00,0x00,0x00,0x00,0x00,};/*1905*/
+0x00,0x00,0x00,0x00,0xed,};/*1905*/
diff --git a/demos/assets/inc/ui/list_view_h.data b/demos/assets/inc/ui/list_view_h.data
index 59305df86..7315f71ed 100644
--- a/demos/assets/inc/ui/list_view_h.data
+++ b/demos/assets/inc/ui/list_view_h.data
@@ -108,4 +108,4 @@ const unsigned char ui_list_view_h[] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x32,0x00,
0x00,0x00,0x1e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,0x63,0x6c,0x6f,0x73,0x65,
-0x00,0x74,0x65,0x78,0x74,0x00,0x63,0x6c,0x6f,0x73,0x65,0x00,0x00,0x00,0x00,0x2e,0x70,0x64,0x62,};/*2199*/
+0x00,0x74,0x65,0x78,0x74,0x00,0x63,0x6c,0x6f,0x73,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};/*2199*/
diff --git a/demos/assets/inc/ui/lua.data b/demos/assets/inc/ui/lua.data
index af9bd1127..00cc5844a 100644
--- a/demos/assets/inc/ui/lua.data
+++ b/demos/assets/inc/ui/lua.data
@@ -78,4 +78,4 @@ const unsigned char ui_lua[] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xd2,0x00,0x00,0x00,0x68,0x01,0x00,0x00,0x28,
0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x72,0x65,0x64,
-0x5f,0x62,0x74,0x6e,0x5f,0x6e,0x00,0x00,0x00,0x00,0x6f,0x2e,0x70,0x64,};/*1594*/
+0x5f,0x62,0x74,0x6e,0x5f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};/*1594*/
diff --git a/demos/assets/inc/ui/tab_bottom.data b/demos/assets/inc/ui/tab_bottom.data
index 65e50dc57..4e11c0a2f 100644
--- a/demos/assets/inc/ui/tab_bottom.data
+++ b/demos/assets/inc/ui/tab_bottom.data
@@ -76,4 +76,4 @@ const unsigned char ui_tab_bottom[] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x69,0x63,0x6f,0x6e,0x00,0x6d,0x65,0x00,0x61,0x63,0x74,0x69,0x76,0x65,0x5f,0x69,0x63,0x6f,
0x6e,0x00,0x6d,0x65,0x5f,0x61,0x63,0x74,0x69,0x76,0x65,0x00,0x74,0x65,0x78,0x74,0x00,0x4d,0x65,0x00,
-0x00,0x00,0x00,0x00,0x67,0x65,0x5f,0x69,};/*1548*/
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};/*1548*/
diff --git a/demos/assets/inc/ui/tab_list.data b/demos/assets/inc/ui/tab_list.data
index e591bbc94..8dcaa20bb 100644
--- a/demos/assets/inc/ui/tab_list.data
+++ b/demos/assets/inc/ui/tab_list.data
@@ -173,4 +173,4 @@ const unsigned char ui_tab_list[] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x03,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,0x62,0x61,0x72,0x00,0x76,0x61,0x6c,0x75,0x65,0x00,0x30,
-0x00,0x00,0x00,0x00,0x00,0x7f,0x00,0x00,0xc8,};/*3489*/
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};/*3489*/
diff --git a/demos/assets/inc/ui/tab_top.data b/demos/assets/inc/ui/tab_top.data
index cfc538479..3a95d0229 100644
--- a/demos/assets/inc/ui/tab_top.data
+++ b/demos/assets/inc/ui/tab_top.data
@@ -69,4 +69,4 @@ const unsigned char ui_tab_top[] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x50,
0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6e,0x61,0x6d,0x65,0x00,0x63,0x6c,0x6f,0x73,
0x65,0x00,0x74,0x65,0x78,0x74,0x00,0x43,0x6c,0x6f,0x73,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-0x00,0x00,};/*1402*/
+0xc0,0x11,};/*1402*/
diff --git a/demos/assets/raw/ui/basic.bin b/demos/assets/raw/ui/basic.bin
index a9b5194b9..e43dbb38f 100644
Binary files a/demos/assets/raw/ui/basic.bin and b/demos/assets/raw/ui/basic.bin differ
diff --git a/demos/assets/raw/ui/basic.xml b/demos/assets/raw/ui/basic.xml
index 20d3048dd..fd977a83f 100644
--- a/demos/assets/raw/ui/basic.xml
+++ b/demos/assets/raw/ui/basic.xml
@@ -1,23 +1,40 @@
-
-
-
+
+
+
-
-
-
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
diff --git a/src/base/app_bar.c b/src/base/app_bar.c
new file mode 100755
index 000000000..e5cfe7a6d
--- /dev/null
+++ b/src/base/app_bar.c
@@ -0,0 +1,40 @@
+/**
+ * File: app_bar.h
+ * Author: AWTK Develop Team
+ * Brief: app_bar
+ *
+ * Copyright (c) 2018 - 2018 Guangzhou ZHIYUAN Electronics Co.,Ltd.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * License file for more details.
+ *
+ */
+
+/**
+ * History:
+ * ================================================================
+ * 2018-08-29 Li XianJing created
+ *
+ */
+
+#include "base/mem.h"
+#include "base/app_bar.h"
+
+static const widget_vtable_t s_app_bar_vtable = {
+ .size = sizeof(app_bar_t), .type = WIDGET_TYPE_APP_BAR, .create = app_bar_create};
+
+widget_t* app_bar_create(widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h) {
+ app_bar_t* app_bar = TKMEM_ZALLOC(app_bar_t);
+ widget_t* widget = WIDGET(app_bar);
+ return_value_if_fail(app_bar != NULL, NULL);
+
+ return widget_init(widget, parent, &s_app_bar_vtable, x, y, w, h);
+}
+
+widget_t* app_bar_cast(widget_t* widget) {
+ return_value_if_fail(widget != NULL && widget->vt == &s_app_bar_vtable, NULL);
+
+ return widget;
+}
diff --git a/src/base/app_bar.h b/src/base/app_bar.h
new file mode 100644
index 000000000..56952b9a9
--- /dev/null
+++ b/src/base/app_bar.h
@@ -0,0 +1,66 @@
+/**
+ * File: app_bar.h
+ * Author: AWTK Develop Team
+ * Brief: app_bar
+ *
+ * Copyright (c) 2018 - 2018 Guangzhou ZHIYUAN Electronics Co.,Ltd.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * License file for more details.
+ *
+ */
+
+/**
+ * History:
+ * ================================================================
+ * 2018-08-29 Li XianJing created
+ *
+ */
+
+#ifndef TK_APP_BAR_H
+#define TK_APP_BAR_H
+
+#include "base/widget.h"
+
+BEGIN_C_DECLS
+
+/**
+ * @class app_bar_t
+ * @parent widget_t
+ * @annotation ["scriptable"]
+ * app_bar。一个简单的容器控件,一般在窗口的顶部。
+ * 它本身不提供布局功能(可用layout参数指定),和view功能一致,仅提供具有语义的标签,让xml更具有可读性。
+ */
+typedef struct _app_bar_t {
+ widget_t widget;
+} app_bar_t;
+
+/**
+ * @method app_bar_create
+ * 创建app_bar对象
+ * @annotation ["constructor", "scriptable"]
+ * @param {widget_t*} parent 父控件
+ * @param {xy_t} x x坐标
+ * @param {xy_t} y y坐标
+ * @param {wh_t} w 宽度
+ * @param {wh_t} h 高度
+ *
+ * @return {widget_t*} 对象。
+ */
+widget_t* app_bar_create(widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
+
+/**
+ * @method app_bar_cast
+ * 转换为app_bar对象(供脚本语言使用)。
+ * @annotation ["cast", "scriptable"]
+ * @param {widget_t*} widget app_bar对象。
+ *
+ * @return {widget_t*} app_bar对象。
+ */
+widget_t* app_bar_cast(widget_t* widget);
+
+END_C_DECLS
+
+#endif /*TK_APP_BAR_H*/
diff --git a/src/base/column.c b/src/base/column.c
new file mode 100755
index 000000000..4982f51c4
--- /dev/null
+++ b/src/base/column.c
@@ -0,0 +1,40 @@
+/**
+ * File: column.h
+ * Author: AWTK Develop Team
+ * Brief: column
+ *
+ * Copyright (c) 2018 - 2018 Guangzhou ZHIYUAN Electronics Co.,Ltd.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * License file for more details.
+ *
+ */
+
+/**
+ * History:
+ * ================================================================
+ * 2018-08-29 Li XianJing created
+ *
+ */
+
+#include "base/mem.h"
+#include "base/column.h"
+
+static const widget_vtable_t s_column_vtable = {
+ .size = sizeof(column_t), .type = WIDGET_TYPE_COLUMN, .create = column_create};
+
+widget_t* column_create(widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h) {
+ column_t* column = TKMEM_ZALLOC(column_t);
+ widget_t* widget = WIDGET(column);
+ return_value_if_fail(column != NULL, NULL);
+
+ return widget_init(widget, parent, &s_column_vtable, x, y, w, h);
+}
+
+widget_t* column_cast(widget_t* widget) {
+ return_value_if_fail(widget != NULL && widget->vt == &s_column_vtable, NULL);
+
+ return widget;
+}
diff --git a/src/base/column.h b/src/base/column.h
new file mode 100644
index 000000000..04ced833d
--- /dev/null
+++ b/src/base/column.h
@@ -0,0 +1,66 @@
+/**
+ * File: column.h
+ * Author: AWTK Develop Team
+ * Brief: column
+ *
+ * Copyright (c) 2018 - 2018 Guangzhou ZHIYUAN Electronics Co.,Ltd.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * License file for more details.
+ *
+ */
+
+/**
+ * History:
+ * ================================================================
+ * 2018-08-29 Li XianJing created
+ *
+ */
+
+#ifndef TK_COLUMN_H
+#define TK_COLUMN_H
+
+#include "base/widget.h"
+
+BEGIN_C_DECLS
+
+/**
+ * @class column_t
+ * @parent widget_t
+ * @annotation ["scriptable"]
+ * column。一个简单的容器控件,垂直排列一组控件。
+ * 它本身不提供布局功能(可用layout参数指定),和view功能一致,仅提供具有语义的标签,让xml更具有可读性。
+ */
+typedef struct _column_t {
+ widget_t widget;
+} column_t;
+
+/**
+ * @method column_create
+ * 创建column对象
+ * @annotation ["constructor", "scriptable"]
+ * @param {widget_t*} parent 父控件
+ * @param {xy_t} x x坐标
+ * @param {xy_t} y y坐标
+ * @param {wh_t} w 宽度
+ * @param {wh_t} h 高度
+ *
+ * @return {widget_t*} 对象。
+ */
+widget_t* column_create(widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
+
+/**
+ * @method column_cast
+ * 转换为column对象(供脚本语言使用)。
+ * @annotation ["cast", "scriptable"]
+ * @param {widget_t*} widget column对象。
+ *
+ * @return {widget_t*} column对象。
+ */
+widget_t* column_cast(widget_t* widget);
+
+END_C_DECLS
+
+#endif /*TK_COLUMN_H*/
diff --git a/src/base/grid.c b/src/base/grid.c
new file mode 100755
index 000000000..ac27d14b5
--- /dev/null
+++ b/src/base/grid.c
@@ -0,0 +1,40 @@
+/**
+ * File: grid.h
+ * Author: AWTK Develop Team
+ * Brief: grid
+ *
+ * Copyright (c) 2018 - 2018 Guangzhou ZHIYUAN Electronics Co.,Ltd.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * License file for more details.
+ *
+ */
+
+/**
+ * History:
+ * ================================================================
+ * 2018-08-29 Li XianJing created
+ *
+ */
+
+#include "base/mem.h"
+#include "base/grid.h"
+
+static const widget_vtable_t s_grid_vtable = {
+ .size = sizeof(grid_t), .type = WIDGET_TYPE_ROW, .create = grid_create};
+
+widget_t* grid_create(widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h) {
+ grid_t* grid = TKMEM_ZALLOC(grid_t);
+ widget_t* widget = WIDGET(grid);
+ return_value_if_fail(grid != NULL, NULL);
+
+ return widget_init(widget, parent, &s_grid_vtable, x, y, w, h);
+}
+
+widget_t* grid_cast(widget_t* widget) {
+ return_value_if_fail(widget != NULL && widget->vt == &s_grid_vtable, NULL);
+
+ return widget;
+}
diff --git a/src/base/grid.h b/src/base/grid.h
new file mode 100644
index 000000000..c2a27ec2f
--- /dev/null
+++ b/src/base/grid.h
@@ -0,0 +1,66 @@
+/**
+ * File: grid.h
+ * Author: AWTK Develop Team
+ * Brief: grid
+ *
+ * Copyright (c) 2018 - 2018 Guangzhou ZHIYUAN Electronics Co.,Ltd.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * License file for more details.
+ *
+ */
+
+/**
+ * History:
+ * ================================================================
+ * 2018-08-29 Li XianJing created
+ *
+ */
+
+#ifndef TK_GRID_H
+#define TK_GRID_H
+
+#include "base/widget.h"
+
+BEGIN_C_DECLS
+
+/**
+ * @class grid_t
+ * @parent widget_t
+ * @annotation ["scriptable"]
+ * grid。一个简单的容器控件,用于网格排列一组控件。
+ * 它本身不提供布局功能(可用layout参数指定),和view功能一致,仅提供具有语义的标签,让xml更具有可读性。
+ */
+typedef struct _grid_t {
+ widget_t widget;
+} grid_t;
+
+/**
+ * @method grid_create
+ * 创建grid对象
+ * @annotation ["constructor", "scriptable"]
+ * @param {widget_t*} parent 父控件
+ * @param {xy_t} x x坐标
+ * @param {xy_t} y y坐标
+ * @param {wh_t} w 宽度
+ * @param {wh_t} h 高度
+ *
+ * @return {widget_t*} 对象。
+ */
+widget_t* grid_create(widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
+
+/**
+ * @method grid_cast
+ * 转换为grid对象(供脚本语言使用)。
+ * @annotation ["cast", "scriptable"]
+ * @param {widget_t*} widget grid对象。
+ *
+ * @return {widget_t*} grid对象。
+ */
+widget_t* grid_cast(widget_t* widget);
+
+END_C_DECLS
+
+#endif /*TK_GRID_H*/
diff --git a/src/base/row.c b/src/base/row.c
new file mode 100755
index 000000000..b7e412d24
--- /dev/null
+++ b/src/base/row.c
@@ -0,0 +1,40 @@
+/**
+ * File: row.h
+ * Author: AWTK Develop Team
+ * Brief: row
+ *
+ * Copyright (c) 2018 - 2018 Guangzhou ZHIYUAN Electronics Co.,Ltd.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * License file for more details.
+ *
+ */
+
+/**
+ * History:
+ * ================================================================
+ * 2018-08-29 Li XianJing created
+ *
+ */
+
+#include "base/mem.h"
+#include "base/row.h"
+
+static const widget_vtable_t s_row_vtable = {
+ .size = sizeof(row_t), .type = WIDGET_TYPE_ROW, .create = row_create};
+
+widget_t* row_create(widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h) {
+ row_t* row = TKMEM_ZALLOC(row_t);
+ widget_t* widget = WIDGET(row);
+ return_value_if_fail(row != NULL, NULL);
+
+ return widget_init(widget, parent, &s_row_vtable, x, y, w, h);
+}
+
+widget_t* row_cast(widget_t* widget) {
+ return_value_if_fail(widget != NULL && widget->vt == &s_row_vtable, NULL);
+
+ return widget;
+}
diff --git a/src/base/row.h b/src/base/row.h
new file mode 100644
index 000000000..d77fdd36c
--- /dev/null
+++ b/src/base/row.h
@@ -0,0 +1,66 @@
+/**
+ * File: row.h
+ * Author: AWTK Develop Team
+ * Brief: row
+ *
+ * Copyright (c) 2018 - 2018 Guangzhou ZHIYUAN Electronics Co.,Ltd.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * License file for more details.
+ *
+ */
+
+/**
+ * History:
+ * ================================================================
+ * 2018-08-29 Li XianJing created
+ *
+ */
+
+#ifndef TK_ROW_H
+#define TK_ROW_H
+
+#include "base/widget.h"
+
+BEGIN_C_DECLS
+
+/**
+ * @class row_t
+ * @parent widget_t
+ * @annotation ["scriptable"]
+ * row。一个简单的容器控件,用于水平排列一组控件。
+ * 它本身不提供布局功能(可用layout参数指定),和view功能一致,仅提供具有语义的标签,让xml更具有可读性。
+ */
+typedef struct _row_t {
+ widget_t widget;
+} row_t;
+
+/**
+ * @method row_create
+ * 创建row对象
+ * @annotation ["constructor", "scriptable"]
+ * @param {widget_t*} parent 父控件
+ * @param {xy_t} x x坐标
+ * @param {xy_t} y y坐标
+ * @param {wh_t} w 宽度
+ * @param {wh_t} h 高度
+ *
+ * @return {widget_t*} 对象。
+ */
+widget_t* row_create(widget_t* parent, xy_t x, xy_t y, wh_t w, wh_t h);
+
+/**
+ * @method row_cast
+ * 转换为row对象(供脚本语言使用)。
+ * @annotation ["cast", "scriptable"]
+ * @param {widget_t*} widget row对象。
+ *
+ * @return {widget_t*} row对象。
+ */
+widget_t* row_cast(widget_t* widget);
+
+END_C_DECLS
+
+#endif /*TK_ROW_H*/
diff --git a/src/base/widget.c b/src/base/widget.c
index 35dccf446..b95eb5cfa 100644
--- a/src/base/widget.c
+++ b/src/base/widget.c
@@ -490,7 +490,7 @@ ret_t widget_draw_icon_text(widget_t* widget, canvas_t* c, const char* icon, wst
canvas_draw_icon_in_rect(c, &img, &r);
canvas_set_text_align(c, ALIGN_H_LEFT, ALIGN_V_MIDDLE);
- r = rect_init(widget->h, margin, widget->w - widget->h - margin, h);
+ r = rect_init(widget->h + margin, margin, widget->w - widget->h - 2 * margin, h);
}
canvas_draw_text_in_rect(c, text->str, text->size, &r);
} else {
diff --git a/src/base/widget.h b/src/base/widget.h
index ac23ad3ea..6d1400c5b 100644
--- a/src/base/widget.h
+++ b/src/base/widget.h
@@ -120,6 +120,18 @@ struct _widget_t {
* 高度。
*/
wh_t h;
+ /**
+ * @property {char*} name
+ * @annotation ["set_prop","get_prop","readable","persitent","design","scriptable"]
+ * 控件名字。
+ */
+ char* name;
+ /**
+ * @property {char*} tr_text
+ * @annotation ["set_prop","get_prop","readable","persitent","design","scriptable"]
+ * 如果需要在切换语言时实时生效,则需要保存用于翻译的字符串tr_text。
+ */
+ char* tr_text;
/**
* @property {char*} style_name
* @annotation ["set_prop","get_prop","readable","persitent","design","scriptable"]
@@ -138,18 +150,6 @@ struct _widget_t {
* 是否可见。
*/
uint8_t visible : 1;
- /**
- * @property {char*} name
- * @annotation ["set_prop","get_prop","readable","persitent","design","scriptable"]
- * 控件名字。
- */
- char* name;
- /**
- * @property {char*} tr_text
- * @annotation ["set_prop","get_prop","readable","persitent","design","scriptable"]
- * 如果需要在切换语言时实时生效,则需要保存用于翻译的字符串tr_text。
- */
- char* tr_text;
/**
* @property {bool_t} focused
* @annotation ["readable"]
diff --git a/src/base/widget_consts.h b/src/base/widget_consts.h
index 5d981eda3..14d55b6f3 100644
--- a/src/base/widget_consts.h
+++ b/src/base/widget_consts.h
@@ -762,6 +762,30 @@ BEGIN_C_DECLS
*/
#define WIDGET_TYPE_RICH_TEXT "rich_text"
+/**
+ * @const WIDGET_TYPE_APP_BAR
+ *
+ */
+#define WIDGET_TYPE_APP_BAR "app_bar"
+
+/**
+ * @const WIDGET_TYPE_GRID
+ *
+ */
+#define WIDGET_TYPE_GRID "grid"
+
+/**
+ * @const WIDGET_TYPE_ROW
+ *
+ */
+#define WIDGET_TYPE_ROW "row"
+
+/**
+ * @const WIDGET_TYPE_COLUMN
+ *
+ */
+#define WIDGET_TYPE_COLUMN "column"
+
/**
* @enum widget_state_t
* @annotation ["scriptable"]
diff --git a/src/base/widget_factory.c b/src/base/widget_factory.c
index c5545ff60..7ee61c3ef 100644
--- a/src/base/widget_factory.c
+++ b/src/base/widget_factory.c
@@ -20,6 +20,9 @@
*/
#include "base/mem.h"
+#include "base/row.h"
+#include "base/grid.h"
+#include "base/view.h"
#include "base/utils.h"
#include "base/image.h"
#include "base/label.h"
@@ -30,8 +33,9 @@
#include "base/slider.h"
#include "base/edit.h"
#include "base/pages.h"
-#include "base/view.h"
#include "base/popup.h"
+#include "base/column.h"
+#include "base/app_bar.h"
#include "base/dragger.h"
#include "base/tab_button.h"
#include "base/tab_control.h"
@@ -80,6 +84,11 @@ static const creator_item_t s_builtin_creators[] = {
{WIDGET_TYPE_COMBO_BOX, combo_box_create},
{WIDGET_TYPE_COMBO_BOX_ITEM, combo_box_item_create},
{WIDGET_TYPE_POPUP, popup_create},
+ {WIDGET_TYPE_GRID, grid_create},
+ {WIDGET_TYPE_ROW, row_create},
+ {WIDGET_TYPE_COLUMN, column_create},
+ {WIDGET_TYPE_APP_BAR, app_bar_create},
+ {WIDGET_TYPE_POPUP, popup_create},
{WIDGET_TYPE_COLOR_TILE, color_tile_create}};
static const creator_item_t* widget_factory_find_builtin_creator(const char* type) {
diff --git a/tools/idl_gen/idl.json b/tools/idl_gen/idl.json
index a718751c2..d69216399 100644
--- a/tools/idl_gen/idl.json
+++ b/tools/idl_gen/idl.json
@@ -103,6 +103,77 @@
"type": "method",
"header": "src/awtk.h"
},
+ {
+ "type": "class",
+ "methods": [
+ {
+ "params": [
+ {
+ "type": "widget_t*",
+ "name": "parent",
+ "desc": "父控件"
+ },
+ {
+ "type": "xy_t",
+ "name": "x",
+ "desc": "x坐标"
+ },
+ {
+ "type": "xy_t",
+ "name": "y",
+ "desc": "y坐标"
+ },
+ {
+ "type": "wh_t",
+ "name": "w",
+ "desc": "宽度"
+ },
+ {
+ "type": "wh_t",
+ "name": "h",
+ "desc": "高度"
+ }
+ ],
+ "annotation": {
+ "constructor": true,
+ "scriptable": true
+ },
+ "desc": "创建app_bar对象",
+ "name": "app_bar_create",
+ "return": {
+ "type": "widget_t*",
+ "desc": "对象。"
+ }
+ },
+ {
+ "params": [
+ {
+ "type": "widget_t*",
+ "name": "widget",
+ "desc": "app_bar对象。"
+ }
+ ],
+ "annotation": {
+ "cast": true,
+ "scriptable": true
+ },
+ "desc": "转换为app_bar对象(供脚本语言使用)。",
+ "name": "app_bar_cast",
+ "return": {
+ "type": "widget_t*",
+ "desc": "app_bar对象。"
+ }
+ }
+ ],
+ "properties": [],
+ "header": "base/app_bar.h",
+ "desc": "app_bar。一个简单的容器控件,一般在窗口的顶部。它本身不提供布局功能(可用layout参数指定),和view功能一致,仅提供具有语义的标签,让xml更具有可读性。",
+ "name": "app_bar_t",
+ "parent": "widget_t",
+ "annotation": {
+ "scriptable": true
+ }
+ },
{
"type": "class",
"methods": [
@@ -1930,6 +2001,77 @@
"scriptable": true
}
},
+ {
+ "type": "class",
+ "methods": [
+ {
+ "params": [
+ {
+ "type": "widget_t*",
+ "name": "parent",
+ "desc": "父控件"
+ },
+ {
+ "type": "xy_t",
+ "name": "x",
+ "desc": "x坐标"
+ },
+ {
+ "type": "xy_t",
+ "name": "y",
+ "desc": "y坐标"
+ },
+ {
+ "type": "wh_t",
+ "name": "w",
+ "desc": "宽度"
+ },
+ {
+ "type": "wh_t",
+ "name": "h",
+ "desc": "高度"
+ }
+ ],
+ "annotation": {
+ "constructor": true,
+ "scriptable": true
+ },
+ "desc": "创建column对象",
+ "name": "column_create",
+ "return": {
+ "type": "widget_t*",
+ "desc": "对象。"
+ }
+ },
+ {
+ "params": [
+ {
+ "type": "widget_t*",
+ "name": "widget",
+ "desc": "column对象。"
+ }
+ ],
+ "annotation": {
+ "cast": true,
+ "scriptable": true
+ },
+ "desc": "转换为column对象(供脚本语言使用)。",
+ "name": "column_cast",
+ "return": {
+ "type": "widget_t*",
+ "desc": "column对象。"
+ }
+ }
+ ],
+ "properties": [],
+ "header": "base/column.h",
+ "desc": "column。一个简单的容器控件,垂直排列一组控件。它本身不提供布局功能(可用layout参数指定),和view功能一致,仅提供具有语义的标签,让xml更具有可读性。",
+ "name": "column_t",
+ "parent": "widget_t",
+ "annotation": {
+ "scriptable": true
+ }
+ },
{
"type": "class",
"methods": [
@@ -4785,6 +4927,77 @@
"desc": "字体管理器。(如果使用nanovg,字体由nanovg内部管理)",
"name": "font_manager_t"
},
+ {
+ "type": "class",
+ "methods": [
+ {
+ "params": [
+ {
+ "type": "widget_t*",
+ "name": "parent",
+ "desc": "父控件"
+ },
+ {
+ "type": "xy_t",
+ "name": "x",
+ "desc": "x坐标"
+ },
+ {
+ "type": "xy_t",
+ "name": "y",
+ "desc": "y坐标"
+ },
+ {
+ "type": "wh_t",
+ "name": "w",
+ "desc": "宽度"
+ },
+ {
+ "type": "wh_t",
+ "name": "h",
+ "desc": "高度"
+ }
+ ],
+ "annotation": {
+ "constructor": true,
+ "scriptable": true
+ },
+ "desc": "创建grid对象",
+ "name": "grid_create",
+ "return": {
+ "type": "widget_t*",
+ "desc": "对象。"
+ }
+ },
+ {
+ "params": [
+ {
+ "type": "widget_t*",
+ "name": "widget",
+ "desc": "grid对象。"
+ }
+ ],
+ "annotation": {
+ "cast": true,
+ "scriptable": true
+ },
+ "desc": "转换为grid对象(供脚本语言使用)。",
+ "name": "grid_cast",
+ "return": {
+ "type": "widget_t*",
+ "desc": "grid对象。"
+ }
+ }
+ ],
+ "properties": [],
+ "header": "base/grid.h",
+ "desc": "grid。一个简单的容器控件,用于网格排列一组控件。它本身不提供布局功能(可用layout参数指定),和view功能一致,仅提供具有语义的标签,让xml更具有可读性。",
+ "name": "grid_t",
+ "parent": "widget_t",
+ "annotation": {
+ "scriptable": true
+ }
+ },
{
"type": "class",
"methods": [
@@ -7809,6 +8022,77 @@
"scriptable": true
}
},
+ {
+ "type": "class",
+ "methods": [
+ {
+ "params": [
+ {
+ "type": "widget_t*",
+ "name": "parent",
+ "desc": "父控件"
+ },
+ {
+ "type": "xy_t",
+ "name": "x",
+ "desc": "x坐标"
+ },
+ {
+ "type": "xy_t",
+ "name": "y",
+ "desc": "y坐标"
+ },
+ {
+ "type": "wh_t",
+ "name": "w",
+ "desc": "宽度"
+ },
+ {
+ "type": "wh_t",
+ "name": "h",
+ "desc": "高度"
+ }
+ ],
+ "annotation": {
+ "constructor": true,
+ "scriptable": true
+ },
+ "desc": "创建row对象",
+ "name": "row_create",
+ "return": {
+ "type": "widget_t*",
+ "desc": "对象。"
+ }
+ },
+ {
+ "params": [
+ {
+ "type": "widget_t*",
+ "name": "widget",
+ "desc": "row对象。"
+ }
+ ],
+ "annotation": {
+ "cast": true,
+ "scriptable": true
+ },
+ "desc": "转换为row对象(供脚本语言使用)。",
+ "name": "row_cast",
+ "return": {
+ "type": "widget_t*",
+ "desc": "row对象。"
+ }
+ }
+ ],
+ "properties": [],
+ "header": "base/row.h",
+ "desc": "row。一个简单的容器控件,用于水平排列一组控件。它本身不提供布局功能(可用layout参数指定),和view功能一致,仅提供具有语义的标签,让xml更具有可读性。",
+ "name": "row_t",
+ "parent": "widget_t",
+ "annotation": {
+ "scriptable": true
+ }
+ },
{
"type": "class",
"methods": [
@@ -8143,7 +8427,7 @@
"desc": "str对象。"
},
{
- "type": "uint16_t",
+ "type": "uint32_t",
"name": "capacity",
"desc": "初始容量。"
}
@@ -8213,9 +8497,9 @@
"desc": "要设置的字符串。"
},
{
- "type": "uint16_t",
+ "type": "uint32_t",
"name": "len",
- "desc": "长度。"
+ "desc": "字符串长度。"
}
],
"annotation": {},
@@ -8247,6 +8531,115 @@
"desc": "返回RET_OK表示成功,否则表示失败。"
}
},
+ {
+ "params": [
+ {
+ "type": "str_t*",
+ "name": "str",
+ "desc": "str对象。"
+ },
+ {
+ "type": "char*",
+ "name": "text",
+ "desc": "要追加的字符串。"
+ },
+ {
+ "type": "uint32_t",
+ "name": "len",
+ "desc": "字符串长度。"
+ }
+ ],
+ "annotation": {},
+ "desc": "追加字符串。",
+ "name": "str_append_with_len",
+ "return": {
+ "type": "ret_t",
+ "desc": "返回RET_OK表示成功,否则表示失败。"
+ }
+ },
+ {
+ "params": [
+ {
+ "type": "str_t*",
+ "name": "str",
+ "desc": "str对象。"
+ },
+ {
+ "type": "uint32_t",
+ "name": "offset",
+ "desc": "偏移量。"
+ },
+ {
+ "type": "char*",
+ "name": "text",
+ "desc": "要插入的字符串。"
+ }
+ ],
+ "annotation": {},
+ "desc": "插入子字符串。",
+ "name": "str_insert",
+ "return": {
+ "type": "ret_t",
+ "desc": "返回RET_OK表示成功,否则表示失败。"
+ }
+ },
+ {
+ "params": [
+ {
+ "type": "str_t*",
+ "name": "str",
+ "desc": "str对象。"
+ },
+ {
+ "type": "uint32_t",
+ "name": "offset",
+ "desc": "偏移量。"
+ },
+ {
+ "type": "char*",
+ "name": "text",
+ "desc": "要插入的字符串。"
+ },
+ {
+ "type": "uint32_t",
+ "name": "len",
+ "desc": "字符串长度。"
+ }
+ ],
+ "annotation": {},
+ "desc": "插入子字符串。",
+ "name": "str_insert_with_len",
+ "return": {
+ "type": "ret_t",
+ "desc": "返回RET_OK表示成功,否则表示失败。"
+ }
+ },
+ {
+ "params": [
+ {
+ "type": "str_t*",
+ "name": "str",
+ "desc": "str对象。"
+ },
+ {
+ "type": "uint32_t",
+ "name": "offset",
+ "desc": "偏移量。"
+ },
+ {
+ "type": "uint32_t",
+ "name": "len",
+ "desc": "长度。"
+ }
+ ],
+ "annotation": {},
+ "desc": "删除子字符串。",
+ "name": "str_remove",
+ "return": {
+ "type": "ret_t",
+ "desc": "返回RET_OK表示成功,否则表示失败。"
+ }
+ },
{
"params": [
{
@@ -8289,6 +8682,32 @@
"desc": "返回RET_OK表示成功,否则表示失败。"
}
},
+ {
+ "params": [
+ {
+ "type": "str_t*",
+ "name": "str",
+ "desc": "str对象。"
+ },
+ {
+ "type": "char*",
+ "name": "text",
+ "desc": "要解码的XML文本。"
+ },
+ {
+ "type": "uint32_t",
+ "name": "len",
+ "desc": "字符串长度。"
+ }
+ ],
+ "annotation": {},
+ "desc": "对XML基本的entity进行解码,目前仅支持<>"a;&。",
+ "name": "str_decode_xml_entity_with_len",
+ "return": {
+ "type": "ret_t",
+ "desc": "返回RET_OK表示成功,否则表示失败。"
+ }
+ },
{
"params": [
{
@@ -8599,7 +9018,7 @@
{
"name": "size",
"desc": "长度。",
- "type": "uint16_t",
+ "type": "uint32_t",
"annotation": {
"readable": true
}
@@ -8607,7 +9026,7 @@
{
"name": "capacity",
"desc": "容量。",
- "type": "uint16_t",
+ "type": "uint32_t",
"annotation": {
"readable": true
}
@@ -12928,6 +13347,22 @@
{
"desc": "",
"name": "WIDGET_TYPE_RICH_TEXT"
+ },
+ {
+ "desc": "",
+ "name": "WIDGET_TYPE_APP_BAR"
+ },
+ {
+ "desc": "",
+ "name": "WIDGET_TYPE_GRID"
+ },
+ {
+ "desc": "",
+ "name": "WIDGET_TYPE_ROW"
+ },
+ {
+ "desc": "",
+ "name": "WIDGET_TYPE_COLUMN"
}
],
"header": "base/widget_consts.h",
@@ -14539,6 +14974,32 @@
"scriptable": true
}
},
+ {
+ "name": "name",
+ "desc": "控件名字。",
+ "type": "char*",
+ "annotation": {
+ "set_prop": true,
+ "get_prop": true,
+ "readable": true,
+ "persitent": true,
+ "design": true,
+ "scriptable": true
+ }
+ },
+ {
+ "name": "tr_text",
+ "desc": "如果需要在切换语言时实时生效,则需要保存用于翻译的字符串tr_text。",
+ "type": "char*",
+ "annotation": {
+ "set_prop": true,
+ "get_prop": true,
+ "readable": true,
+ "persitent": true,
+ "design": true,
+ "scriptable": true
+ }
+ },
{
"name": "style_name",
"desc": "Style Type。",
@@ -14579,32 +15040,6 @@
"scriptable": true
}
},
- {
- "name": "name",
- "desc": "控件名字。",
- "type": "char*",
- "annotation": {
- "set_prop": true,
- "get_prop": true,
- "readable": true,
- "persitent": true,
- "design": true,
- "scriptable": true
- }
- },
- {
- "name": "tr_text",
- "desc": "如果需要在切换语言时实时生效,则需要保存用于翻译的字符串tr_text。",
- "type": "char*",
- "annotation": {
- "set_prop": true,
- "get_prop": true,
- "readable": true,
- "persitent": true,
- "design": true,
- "scriptable": true
- }
- },
{
"name": "focused",
"desc": "是否得到焦点。",