浏览代码

improve radio box drawing; fix focus issue; fix modal showing; add mouse support on list and file list view.

git-svn-id: https://rt-thread.googlecode.com/svn/trunk@409 bbd45198-f89e-11dd-88c7-29a3b14d5316
bernard.xiong 15 年之前
父节点
当前提交
49e090149a

+ 0 - 228
rtgui/common/arial12font.c

@@ -1,228 +0,0 @@
-/*
- * File      : arial16font.c
- * This file is part of RT-Thread RTOS
- * COPYRIGHT (C) 2006 - 2009, RT-Thread Development Team
- *
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- * http://www.rt-thread.org/license/LICENSE
- *
- * Change Logs:
- * Date           Author       Notes
- * 2010-01-21     Bernard      first version
- */
-#include <rtgui/font.h>
-
-#ifdef RTGUI_USING_FONT12
-const unsigned char arial12_font[]=
-{
-    /*---char:   ---*/
-    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-    /*---char: ! ---*/
-    0x00,0x00,0x10,0x41,0x04,0x10,0x41,0x00,0x10,
-    /*---char: " ---*/
-    0x00,0x00,0x28,0xa2,0x80,0x00,0x00,0x00,0x00,
-    /*---char: # ---*/
-    0x00,0x00,0x05,0x17,0xf2,0x8a,0xfc,0xa5,0x14,
-    /*---char: $ ---*/
-    0x00,0x00,0x0e,0x55,0x45,0x0e,0x15,0x55,0x4e,
-    /*---char: % ---*/
-    0x00,0x00,0x0c,0x49,0x24,0xcd,0x04,0x20,0x84,
-    /*---char: & ---*/
-    0x00,0x00,0x06,0x24,0x92,0x8c,0x49,0x14,0x4e,
-    /*---char: ' ---*/
-    0x00,0x00,0x10,0x41,0x00,0x00,0x00,0x00,0x00,
-    /*---char: ( ---*/
-    0x00,0x00,0x04,0x20,0x84,0x10,0x41,0x04,0x08,
-    /*---char: ) ---*/
-    0x00,0x00,0x20,0x41,0x02,0x08,0x20,0x82,0x10,
-    /*---char: * ---*/
-    0x00,0x00,0x08,0xf8,0x85,0x00,0x00,0x00,0x00,
-    /*---char: + ---*/
-    0x00,0x00,0x00,0x00,0x41,0x1f,0x10,0x40,0x00,
-    /*---char: , ---*/
-    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,
-    /*---char: - ---*/
-    0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0x00,0x00,
-    /*---char: . ---*/
-    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,
-    /*---char: / ---*/
-    0x00,0x00,0x08,0x21,0x04,0x10,0x41,0x08,0x20,
-    /*---char: 0 ---*/
-    0x00,0x00,0x0e,0x45,0x14,0x51,0x45,0x14,0x4e,
-    /*---char: 1 ---*/
-    0x00,0x00,0x04,0x31,0x41,0x04,0x10,0x41,0x04,
-    /*---char: 2 ---*/
-    0x00,0x00,0x0e,0x44,0x10,0x42,0x08,0x42,0x1f,
-    /*---char: 3 ---*/
-    0x00,0x00,0x0e,0x44,0x10,0x46,0x04,0x14,0x4e,
-    /*---char: 4 ---*/
-    0x00,0x00,0x02,0x18,0x62,0x8a,0x49,0xf0,0x82,
-    /*---char: 5 ---*/
-    0x00,0x00,0x0f,0x21,0x07,0x91,0x04,0x14,0x4e,
-    /*---char: 6 ---*/
-    0x00,0x00,0x0e,0x45,0x05,0x99,0x45,0x14,0x4e,
-    /*---char: 7 ---*/
-    0x00,0x00,0x1f,0x08,0x21,0x04,0x10,0x82,0x08,
-    /*---char: 8 ---*/
-    0x00,0x00,0x0e,0x45,0x14,0x4e,0x45,0x14,0x4e,
-    /*---char: 9 ---*/
-    0x00,0x00,0x0e,0x45,0x14,0x53,0x34,0x14,0x4e,
-    /*---char: : ---*/
-    0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x10,
-    /*---char: ; ---*/
-    0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x10,
-    /*---char: < ---*/
-    0x00,0x00,0x00,0x00,0x13,0x90,0x38,0x10,0x00,
-    /*---char: = ---*/
-    0x00,0x00,0x00,0x00,0x0f,0xc0,0x03,0xf0,0x00,
-    /*---char: > ---*/
-    0x00,0x00,0x00,0x01,0x03,0x81,0x39,0x00,0x00,
-    /*---char: ? ---*/
-    0x00,0x00,0x0e,0x45,0x10,0x42,0x10,0x40,0x04,
-    /*---char: @ ---*/
-    0x00,0x00,0x01,0x18,0x82,0x52,0x51,0x45,0x13,
-    /*---char: A ---*/
-    0x00,0x00,0x04,0x28,0xa2,0x91,0x7d,0x18,0x20,
-    /*---char: B ---*/
-    0x00,0x00,0x1f,0x41,0x04,0x1f,0x41,0x04,0x1f,
-    /*---char: C ---*/
-    0x00,0x00,0x07,0x21,0x04,0x10,0x41,0x02,0x07,
-    /*---char: D ---*/
-    0x00,0x00,0x1f,0x41,0x04,0x10,0x41,0x04,0x1f,
-    /*---char: E ---*/
-    0x00,0x00,0x1f,0x41,0x04,0x1f,0x41,0x04,0x1f,
-    /*---char: F ---*/
-    0x00,0x00,0x1f,0x41,0x04,0x1e,0x41,0x04,0x10,
-    /*---char: G ---*/
-    0x00,0x00,0x07,0x21,0x04,0x11,0x41,0x02,0x07,
-    /*---char: H ---*/
-    0x00,0x00,0x10,0x41,0x04,0x1f,0x41,0x04,0x10,
-    /*---char: I ---*/
-    0x00,0x00,0x10,0x41,0x04,0x10,0x41,0x04,0x10,
-    /*---char: J ---*/
-    0x00,0x00,0x02,0x08,0x20,0x82,0x0a,0x28,0x9c,
-    /*---char: K ---*/
-    0x00,0x00,0x10,0x41,0x14,0x94,0x69,0x14,0x10,
-    /*---char: L ---*/
-    0x00,0x00,0x10,0x41,0x04,0x10,0x41,0x04,0x1f,
-    /*---char: M ---*/
-    0x00,0x00,0x10,0x61,0x85,0x55,0x55,0x54,0x92,
-    /*---char: N ---*/
-    0x00,0x00,0x10,0x61,0x45,0x12,0x45,0x14,0x10,
-    /*---char: O ---*/
-    0x00,0x00,0x07,0x21,0x04,0x10,0x41,0x02,0x07,
-    /*---char: P ---*/
-    0x00,0x00,0x1f,0x41,0x04,0x1f,0x41,0x04,0x10,
-    /*---char: Q ---*/
-    0x00,0x00,0x07,0x21,0x04,0x10,0x41,0x32,0x07,
-    /*---char: R ---*/
-    0x00,0x00,0x1f,0x41,0x04,0x1f,0x45,0x04,0x10,
-    /*---char: S ---*/
-    0x00,0x00,0x0f,0x41,0x04,0x0f,0x01,0x04,0x0f,
-    /*---char: T ---*/
-    0x00,0x00,0x3f,0x10,0x41,0x04,0x10,0x41,0x04,
-    /*---char: U ---*/
-    0x00,0x00,0x10,0x41,0x04,0x10,0x41,0x02,0x07,
-    /*---char: V ---*/
-    0x00,0x00,0x20,0x81,0x14,0x51,0x28,0xa1,0x04,
-    /*---char: W ---*/
-    0x00,0x00,0x21,0x8a,0x24,0x94,0x51,0x42,0x08,
-    /*---char: X ---*/
-    0x00,0x00,0x20,0x45,0x12,0x84,0x29,0x14,0x60,
-    /*---char: Y ---*/
-    0x00,0x00,0x20,0x45,0x12,0x84,0x10,0x41,0x04,
-    /*---char: Z ---*/
-    0x00,0x00,0x1f,0x04,0x20,0x84,0x20,0x84,0x3f,
-    /*---char: [ ---*/
-    0x00,0x00,0x18,0x41,0x04,0x10,0x41,0x04,0x10,
-    /*---char: \ ---*/
-    0x00,0x00,0x20,0x81,0x04,0x10,0x41,0x02,0x08,
-    /*---char: ] ---*/
-    0x00,0x00,0x30,0x41,0x04,0x10,0x41,0x04,0x10,
-    /*---char: ^ ---*/
-    0x00,0x00,0x08,0x51,0x45,0x22,0x00,0x00,0x00,
-    /*---char: _ ---*/
-    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-    /*---char: ` ---*/
-    0x00,0x00,0x10,0x20,0x00,0x00,0x00,0x00,0x00,
-    /*---char: a ---*/
-    0x00,0x00,0x00,0x00,0xe4,0x41,0x3d,0x14,0xcd,
-    /*---char: b ---*/
-    0x00,0x00,0x10,0x41,0x66,0x51,0x45,0x16,0x56,
-    /*---char: c ---*/
-    0x00,0x00,0x00,0x00,0xc4,0x90,0x41,0x04,0x8c,
-    /*---char: d ---*/
-    0x00,0x00,0x01,0x04,0xd4,0xd1,0x45,0x14,0x4f,
-    /*---char: e ---*/
-    0x00,0x00,0x00,0x00,0xe4,0x51,0x7d,0x04,0x4e,
-    /*---char: f ---*/
-    0x00,0x00,0x0c,0x43,0x84,0x10,0x41,0x04,0x10,
-    /*---char: g ---*/
-    0x00,0x00,0x00,0x00,0xd4,0xd1,0x45,0x14,0xcd,
-    /*---char: h ---*/
-    0x00,0x00,0x10,0x41,0x66,0x51,0x45,0x14,0x51,
-    /*---char: i ---*/
-    0x00,0x00,0x10,0x01,0x04,0x10,0x41,0x04,0x10,
-    /*---char: j ---*/
-    0x00,0x00,0x10,0x01,0x04,0x10,0x41,0x04,0x10,
-    /*---char: k ---*/
-    0x00,0x00,0x10,0x41,0x14,0x94,0x71,0x24,0x91,
-    /*---char: l ---*/
-    0x00,0x00,0x10,0x41,0x04,0x10,0x41,0x04,0x10,
-    /*---char: m ---*/
-    0x00,0x00,0x00,0x01,0x66,0x51,0x45,0x14,0x51,
-    /*---char: n ---*/
-    0x00,0x00,0x00,0x01,0x66,0x51,0x45,0x14,0x51,
-    /*---char: o ---*/
-    0x00,0x00,0x00,0x00,0xe4,0x51,0x45,0x14,0x4e,
-    /*---char: p ---*/
-    0x00,0x00,0x00,0x01,0x66,0x51,0x45,0x16,0x56,
-    /*---char: q ---*/
-    0x00,0x00,0x00,0x00,0xd4,0xd1,0x45,0x14,0xcd,
-    /*---char: r ---*/
-    0x00,0x00,0x00,0x01,0x46,0x10,0x41,0x04,0x10,
-    /*---char: s ---*/
-    0x00,0x00,0x00,0x00,0xe4,0x50,0x38,0x14,0x4e,
-    /*---char: t ---*/
-    0x00,0x00,0x10,0x43,0x84,0x10,0x41,0x04,0x18,
-    /*---char: u ---*/
-    0x00,0x00,0x00,0x01,0x14,0x51,0x45,0x14,0x4f,
-    /*---char: v ---*/
-    0x00,0x00,0x00,0x02,0x28,0x94,0x51,0x42,0x08,
-    /*---char: w ---*/
-    0x00,0x00,0x00,0x02,0x28,0x95,0x55,0x52,0x08,
-    /*---char: x ---*/
-    0x00,0x00,0x00,0x02,0x25,0x14,0x21,0x45,0x22,
-    /*---char: y ---*/
-    0x00,0x00,0x00,0x02,0x28,0x94,0x51,0x42,0x08,
-    /*---char: z ---*/
-    0x00,0x00,0x00,0x03,0xe1,0x04,0x21,0x04,0x3e,
-    /*---char: { ---*/
-    0x00,0x00,0x08,0x41,0x04,0x10,0x81,0x04,0x10,
-    /*---char: | ---*/
-    0x00,0x00,0x10,0x41,0x04,0x10,0x41,0x04,0x10,
-    /*---char: } ---*/
-    0x00,0x00,0x10,0x20,0x82,0x08,0x10,0x82,0x08,
-    /*---char: ~ ---*/
-    0x00,0x00,0x00,0x00,0x00,0x0c,0x4c,0x00,0x00
-};
-
-struct rtgui_font_bitmap arial12 =
-{
-	(const rt_uint8_t*)arial12_font, 		/* bmp */
-	6, 					/* width */
-	12, 				/* height */
-	32,					/* first char */
-	127					/* last char */
-};
-
-struct rtgui_font rtgui_font_arial12 =
-{
-	"arial", 			/* family */
-	12, 				/* height */
-	1, 					/* refer count */
-	&bmp_font_engine, 	/* font engine */
-	&arial12,			/* font private data */
-};
-#endif

+ 0 - 228
rtgui/common/arial16font.c

@@ -1,228 +0,0 @@
-/*
- * File      : arial16font.c
- * This file is part of RT-Thread RTOS
- * COPYRIGHT (C) 2006 - 2009, RT-Thread Development Team
- *
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- * http://www.rt-thread.org/license/LICENSE
- *
- * Change Logs:
- * Date           Author       Notes
- * 2010-01-21     Bernard      first version
- */
-#include <rtgui/font.h>
-
-#ifdef RTGUI_USING_FONT16
-const unsigned char arial16_font[]=
-{
-    /*---char:   ---*/
-    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-    /*---char: ! ---*/
-    0x00,0x00,0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x20,0x00,
-    /*---char: " ---*/
-    0x00,0x00,0x00,0x48,0x48,0x48,0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-    /*---char: # ---*/
-    0x00,0x00,0x00,0x11,0x11,0x11,0x22,0xff,0x22,0x22,0x22,0xff,0x44,0x44,0x44,0x00,
-    /*---char: $ ---*/
-    0x00,0x00,0x08,0x1e,0x29,0x49,0x48,0x48,0x38,0x0e,0x09,0x09,0x49,0x2a,0x1c,0x08,
-    /*---char: % ---*/
-    0x00,0x00,0x00,0x38,0x44,0x44,0x45,0x45,0x39,0x02,0x02,0x04,0x04,0x08,0x08,0x00,
-    /*---char: & ---*/
-    0x00,0x00,0x00,0x1c,0x22,0x22,0x22,0x14,0x18,0x28,0x44,0x42,0x41,0x22,0x1c,0x00,
-    /*---char: ' ---*/
-    0x00,0x00,0x00,0x40,0x40,0x40,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-    /*---char: ( ---*/
-    0x00,0x00,0x00,0x10,0x20,0x20,0x20,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x20,0x20,
-    /*---char: ) ---*/
-    0x00,0x00,0x00,0x40,0x20,0x20,0x20,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x20,0x20,
-    /*---char: * ---*/
-    0x00,0x00,0x00,0x20,0xf8,0x20,0x50,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-    /*---char: + ---*/
-    0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x08,0x7f,0x08,0x08,0x08,0x00,0x00,0x00,
-    /*---char: , ---*/
-    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x20,
-    /*---char: - ---*/
-    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0x00,
-    /*---char: . ---*/
-    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,
-    /*---char: / ---*/
-    0x00,0x00,0x00,0x10,0x10,0x20,0x20,0x20,0x20,0x40,0x40,0x40,0x40,0x80,0x80,0x00,
-    /*---char: 0 ---*/
-    0x00,0x00,0x00,0x1c,0x22,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x22,0x1c,0x00,
-    /*---char: 1 ---*/
-    0x00,0x00,0x00,0x04,0x0c,0x14,0x24,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,
-    /*---char: 2 ---*/
-    0x00,0x00,0x00,0x1e,0x22,0x41,0x01,0x01,0x02,0x02,0x04,0x08,0x10,0x20,0x7f,0x00,
-    /*---char: 3 ---*/
-    0x00,0x00,0x00,0x1c,0x22,0x42,0x02,0x06,0x1c,0x02,0x01,0x01,0x41,0x62,0x1c,0x00,
-    /*---char: 4 ---*/
-    0x00,0x00,0x00,0x02,0x06,0x0a,0x12,0x12,0x22,0x42,0x82,0xff,0x02,0x02,0x02,0x00,
-    /*---char: 5 ---*/
-    0x00,0x00,0x00,0x3f,0x20,0x20,0x40,0x7c,0x42,0x01,0x01,0x01,0x41,0x22,0x1c,0x00,
-    /*---char: 6 ---*/
-    0x00,0x00,0x00,0x1c,0x22,0x41,0x40,0x5c,0x62,0x41,0x41,0x41,0x41,0x22,0x1c,0x00,
-    /*---char: 7 ---*/
-    0x00,0x00,0x00,0x7f,0x02,0x02,0x04,0x04,0x08,0x08,0x08,0x08,0x10,0x10,0x10,0x00,
-    /*---char: 8 ---*/
-    0x00,0x00,0x00,0x1c,0x22,0x41,0x41,0x22,0x1c,0x22,0x41,0x41,0x41,0x22,0x1c,0x00,
-    /*---char: 9 ---*/
-    0x00,0x00,0x00,0x1c,0x22,0x41,0x41,0x41,0x41,0x23,0x1d,0x01,0x41,0x22,0x1c,0x00,
-    /*---char: : ---*/
-    0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,
-    /*---char: ; ---*/
-    0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x40,
-    /*---char: < ---*/
-    0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x0e,0x30,0x40,0x30,0x0e,0x01,0x00,0x00,0x00,
-    /*---char: = ---*/
-    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x00,
-    /*---char: > ---*/
-    0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x38,0x06,0x01,0x06,0x38,0x40,0x00,0x00,0x00,
-    /*---char: ? ---*/
-    0x00,0x00,0x00,0x1c,0x22,0x41,0x41,0x01,0x02,0x04,0x08,0x08,0x08,0x00,0x08,0x00,
-    /*---char: @ ---*/
-    0x00,0x00,0x00,0x03,0x0c,0x10,0x21,0x22,0x44,0x48,0x48,0x48,0x48,0x44,0x23,0x10,
-    /*---char: A ---*/
-    0x00,0x00,0x00,0x04,0x0a,0x0a,0x0a,0x11,0x11,0x11,0x3f,0x20,0x20,0x40,0x40,0x00,
-    /*---char: B ---*/
-    0x00,0x00,0x00,0x7f,0x40,0x40,0x40,0x40,0x7f,0x40,0x40,0x40,0x40,0x40,0x7f,0x00,
-    /*---char: C ---*/
-    0x00,0x00,0x00,0x0f,0x10,0x20,0x40,0x40,0x40,0x40,0x40,0x40,0x20,0x10,0x0f,0x00,
-    /*---char: D ---*/
-    0x00,0x00,0x00,0x7f,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x7f,0x00,
-    /*---char: E ---*/
-    0x00,0x00,0x00,0x7f,0x40,0x40,0x40,0x40,0x7f,0x40,0x40,0x40,0x40,0x40,0x7f,0x00,
-    /*---char: F ---*/
-    0x00,0x00,0x00,0x7f,0x40,0x40,0x40,0x40,0x40,0x7f,0x40,0x40,0x40,0x40,0x40,0x00,
-    /*---char: G ---*/
-    0x00,0x00,0x00,0x0f,0x10,0x20,0x40,0x40,0x40,0x43,0x40,0x40,0x20,0x10,0x0f,0x00,
-    /*---char: H ---*/
-    0x00,0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x7f,0x40,0x40,0x40,0x40,0x40,0x40,0x00,
-    /*---char: I ---*/
-    0x00,0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,
-    /*---char: J ---*/
-    0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x42,0x42,0x42,0x3c,0x00,
-    /*---char: K ---*/
-    0x00,0x00,0x00,0x40,0x40,0x41,0x42,0x44,0x4c,0x54,0x62,0x41,0x41,0x40,0x40,0x00,
-    /*---char: L ---*/
-    0x00,0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x7f,0x00,
-    /*---char: M ---*/
-    0x00,0x00,0x00,0x40,0x60,0x60,0x50,0x50,0x48,0x48,0x45,0x45,0x45,0x42,0x42,0x00,
-    /*---char: N ---*/
-    0x00,0x00,0x00,0x40,0x60,0x50,0x50,0x48,0x44,0x44,0x42,0x41,0x41,0x40,0x40,0x00,
-    /*---char: O ---*/
-    0x00,0x00,0x00,0x0f,0x10,0x20,0x40,0x40,0x40,0x40,0x40,0x40,0x20,0x10,0x0f,0x00,
-    /*---char: P ---*/
-    0x00,0x00,0x00,0x7f,0x40,0x40,0x40,0x40,0x40,0x7f,0x40,0x40,0x40,0x40,0x40,0x00,
-    /*---char: Q ---*/
-    0x00,0x00,0x00,0x0f,0x10,0x20,0x40,0x40,0x40,0x40,0x40,0x40,0x23,0x10,0x0f,0x00,
-    /*---char: R ---*/
-    0x00,0x00,0x00,0x7f,0x40,0x40,0x40,0x40,0x40,0x7f,0x42,0x41,0x41,0x40,0x40,0x00,
-    /*---char: S ---*/
-    0x00,0x00,0x00,0x1f,0x20,0x40,0x40,0x20,0x1c,0x03,0x00,0x00,0x40,0x20,0x1f,0x00,
-    /*---char: T ---*/
-    0x00,0x00,0x00,0xff,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x00,
-    /*---char: U ---*/
-    0x00,0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x20,0x1f,0x00,
-    /*---char: V ---*/
-    0x00,0x00,0x00,0x40,0x40,0x20,0x20,0x20,0x11,0x11,0x11,0x0a,0x0a,0x04,0x04,0x00,
-    /*---char: W ---*/
-    0x00,0x00,0x00,0x81,0x82,0x42,0x42,0x44,0x44,0x24,0x28,0x28,0x28,0x10,0x10,0x00,
-    /*---char: X ---*/
-    0x00,0x00,0x00,0x40,0x20,0x11,0x11,0x0a,0x04,0x0a,0x11,0x11,0x20,0x40,0x80,0x00,
-    /*---char: Y ---*/
-    0x00,0x00,0x00,0x80,0x41,0x41,0x22,0x14,0x14,0x08,0x08,0x08,0x08,0x08,0x08,0x00,
-    /*---char: Z ---*/
-    0x00,0x00,0x00,0x7f,0x01,0x02,0x02,0x04,0x08,0x08,0x10,0x20,0x20,0x40,0xff,0x00,
-    /*---char: [ ---*/
-    0x00,0x00,0x00,0x70,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
-    /*---char: \ ---*/
-    0x00,0x00,0x00,0x80,0x80,0x40,0x40,0x40,0x40,0x20,0x20,0x20,0x20,0x10,0x10,0x00,
-    /*---char: ] ---*/
-    0x00,0x00,0x00,0xe0,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
-    /*---char: ^ ---*/
-    0x00,0x00,0x00,0x10,0x28,0x28,0x44,0x44,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-    /*---char: _ ---*/
-    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-    /*---char: ` ---*/
-    0x00,0x00,0x00,0x40,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-    /*---char: a ---*/
-    0x00,0x00,0x00,0x00,0x00,0x00,0x1e,0x21,0x41,0x07,0x39,0x41,0x41,0x43,0x3d,0x00,
-    /*---char: b ---*/
-    0x00,0x00,0x00,0x40,0x40,0x40,0x5c,0x62,0x41,0x41,0x41,0x41,0x41,0x62,0x5c,0x00,
-    /*---char: c ---*/
-    0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x22,0x40,0x40,0x40,0x40,0x40,0x22,0x1c,0x00,
-    /*---char: d ---*/
-    0x00,0x00,0x00,0x01,0x01,0x01,0x1d,0x23,0x41,0x41,0x41,0x41,0x41,0x23,0x1d,0x00,
-    /*---char: e ---*/
-    0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x22,0x41,0x41,0x7f,0x40,0x41,0x22,0x1c,0x00,
-    /*---char: f ---*/
-    0x00,0x00,0x00,0x30,0x40,0x40,0xf0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,
-    /*---char: g ---*/
-    0x00,0x00,0x00,0x00,0x00,0x00,0x1d,0x23,0x41,0x41,0x41,0x41,0x41,0x23,0x1d,0x01,
-    /*---char: h ---*/
-    0x00,0x00,0x00,0x40,0x40,0x40,0x5c,0x62,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x00,
-    /*---char: i ---*/
-    0x00,0x00,0x00,0x40,0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,
-    /*---char: j ---*/
-    0x00,0x00,0x00,0x40,0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
-    /*---char: k ---*/
-    0x00,0x00,0x00,0x40,0x40,0x40,0x41,0x42,0x44,0x48,0x58,0x64,0x44,0x42,0x41,0x00,
-    /*---char: l ---*/
-    0x00,0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,
-    /*---char: m ---*/
-    0x00,0x00,0x00,0x00,0x00,0x00,0x5c,0x63,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x00,
-    /*---char: n ---*/
-    0x00,0x00,0x00,0x00,0x00,0x00,0x5c,0x62,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x00,
-    /*---char: o ---*/
-    0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x22,0x41,0x41,0x41,0x41,0x41,0x22,0x1c,0x00,
-    /*---char: p ---*/
-    0x00,0x00,0x00,0x00,0x00,0x00,0x5c,0x62,0x41,0x41,0x41,0x41,0x41,0x62,0x5c,0x40,
-    /*---char: q ---*/
-    0x00,0x00,0x00,0x00,0x00,0x00,0x1d,0x23,0x41,0x41,0x41,0x41,0x41,0x23,0x1d,0x01,
-    /*---char: r ---*/
-    0x00,0x00,0x00,0x00,0x00,0x00,0x58,0x60,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,
-    /*---char: s ---*/
-    0x00,0x00,0x00,0x00,0x00,0x00,0x3c,0x42,0x40,0x40,0x3c,0x02,0x02,0x42,0x3c,0x00,
-    /*---char: t ---*/
-    0x00,0x00,0x00,0x00,0x40,0x40,0xf0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x70,0x00,
-    /*---char: u ---*/
-    0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x46,0x3a,0x00,
-    /*---char: v ---*/
-    0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x82,0x44,0x44,0x28,0x28,0x28,0x10,0x10,0x00,
-    /*---char: w ---*/
-    0x00,0x00,0x00,0x00,0x00,0x00,0x84,0x84,0x4a,0x4a,0x51,0x51,0x51,0x20,0x20,0x00,
-    /*---char: x ---*/
-    0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x44,0x28,0x28,0x10,0x28,0x28,0x44,0x82,0x00,
-    /*---char: y ---*/
-    0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x82,0x84,0x44,0x44,0x28,0x28,0x28,0x10,0x10,
-    /*---char: z ---*/
-    0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x04,0x08,0x08,0x10,0x20,0x20,0x40,0xfe,0x00,
-    /*---char: { ---*/
-    0x00,0x00,0x00,0x18,0x20,0x20,0x20,0x20,0x20,0x20,0xc0,0x20,0x20,0x20,0x20,0x20,
-    /*---char: | ---*/
-    0x00,0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
-    /*---char: } ---*/
-    0x00,0x00,0x00,0xc0,0x20,0x20,0x20,0x20,0x20,0x20,0x18,0x20,0x20,0x20,0x20,0x20,
-    /*---char: ~ ---*/
-    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x71,0x8e,0x00,0x00,0x00,0x00,0x00,0x00
-};
-
-struct rtgui_font_bitmap arial16 =
-{
-	(const rt_uint8_t*)arial16_font, 		/* bmp */
-	8, 					/* width */
-	16, 				/* height */
-	32,					/* first char */
-	127					/* last char */
-};
-
-struct rtgui_font rtgui_font_arial16 =
-{
-	"arial", 			/* family */
-	16, 				/* height */
-	1, 					/* refer count */
-	&bmp_font_engine, 	/* font engine */
-	&arial16,			/* font private data */
-};
-#endif

+ 46 - 7
rtgui/common/dc.c

@@ -226,8 +226,8 @@ void rtgui_dc_draw_text (struct rtgui_dc* dc, const rt_uint8_t* text, struct rtg
 #endif
 }
 
-void rtgui_dc_draw_byte(struct rtgui_dc*dc, int x, int y, int h, const rt_uint8_t* data)
-{
+void rtgui_dc_draw_byte(struct rtgui_dc*dc, int x, int y, int h, const rt_uint8_t* data)
+{
 	int i, k;
 
 	/* draw byte */
@@ -240,7 +240,7 @@ void rtgui_dc_draw_byte(struct rtgui_dc*dc, int x, int y, int h, const rt_uint8_
 				rtgui_dc_draw_point(dc, x + k, y + i);
 			}
 		}
-	}
+	}
 }
 
 void rtgui_dc_draw_word(struct rtgui_dc*dc, int x, int y, int h, const rt_uint8_t* data)
@@ -638,6 +638,44 @@ void rtgui_dc_fill_polygon(struct rtgui_dc* dc, const int* vx, const int* vy, in
 	}
 }
 
+#if 1
+void rtgui_dc_draw_circle(struct rtgui_dc *dc, 
+	int xCenter, int yCenter, int radius)
+{
+	int x =0;
+	int y = radius;
+	int p = 1-radius;
+
+	rtgui_dc_draw_point(dc,xCenter+x,yCenter+y);
+	rtgui_dc_draw_point(dc,xCenter-x,yCenter+y);
+	rtgui_dc_draw_point(dc,xCenter+x,yCenter-y);
+	rtgui_dc_draw_point(dc,xCenter-x,yCenter-y);
+	
+	rtgui_dc_draw_point(dc,xCenter+y,yCenter+x);
+	rtgui_dc_draw_point(dc,xCenter-y,yCenter+x);
+	rtgui_dc_draw_point(dc,xCenter+y,yCenter-x);
+	rtgui_dc_draw_point(dc,xCenter-y,yCenter-x);
+
+	while(x<y){
+		x++;
+		if(p<0)
+			p+=2*x+1;
+		else{
+			y--;
+			p+=2*(x-y)+1;
+		}
+		rtgui_dc_draw_point(dc,xCenter+x,yCenter+y);
+		rtgui_dc_draw_point(dc,xCenter-x,yCenter+y);
+		rtgui_dc_draw_point(dc,xCenter+x,yCenter-y);
+		rtgui_dc_draw_point(dc,xCenter-x,yCenter-y);
+
+		rtgui_dc_draw_point(dc,xCenter+y,yCenter+x);
+		rtgui_dc_draw_point(dc,xCenter-y,yCenter+x);
+		rtgui_dc_draw_point(dc,xCenter+y,yCenter-x);
+		rtgui_dc_draw_point(dc,xCenter-y,yCenter-x);
+	}
+}
+#else
 void rtgui_dc_draw_circle(struct rtgui_dc* dc, int x, int y, int r)
 {
     rt_int16_t cx = 0;
@@ -713,6 +751,7 @@ void rtgui_dc_draw_circle(struct rtgui_dc* dc, int x, int y, int r)
 	    cx++;
 	}while (cx <= cy);
 }
+#endif
 
 void rtgui_dc_fill_circle(struct rtgui_dc* dc, rt_int16_t x, rt_int16_t y, rt_int16_t r)
 {
@@ -801,10 +840,10 @@ void rtgui_dc_draw_arc(struct rtgui_dc *dc, rt_int16_t x, rt_int16_t y, rt_int16
 	rt_uint8_t drawoct;
 	int startoct, endoct, oct, stopval_start, stopval_end;
 	double temp;
-
-	stopval_start = 0;
-	stopval_end = 0;
-	temp = 0;
+
+	stopval_start = 0;
+	stopval_end = 0;
+	temp = 0;
 
 	/* Sanity check radius */
 	if (r < 0) return ;

+ 0 - 2
rtgui/common/font.c

@@ -35,7 +35,6 @@ void rtgui_font_system_init()
 
 #ifdef RTGUI_USING_FONT16
 	rtgui_font_system_add_font(&rtgui_font_asc16);
-	rtgui_font_system_add_font(&rtgui_font_arial16);
 #ifdef RTGUI_USING_FONTHZ
 	rtgui_font_system_add_font(&rtgui_font_hz16);
 #endif
@@ -43,7 +42,6 @@ void rtgui_font_system_init()
 
 #ifdef RTGUI_USING_FONT12
 	rtgui_font_system_add_font(&rtgui_font_asc12);
-	rtgui_font_system_add_font(&rtgui_font_arial12);
 #ifdef RTGUI_USING_FONTHZ
 	rtgui_font_system_add_font(&rtgui_font_hz12);
 #endif

+ 4 - 1
rtgui/common/rtgui_system.c

@@ -361,7 +361,10 @@ rt_err_t rtgui_thread_send(rt_thread_t tid, rtgui_event_t* event, rt_size_t even
 
 	result = rt_mq_send(thread->mq, event, event_size);
 	if (result != RT_EOK)
-		rt_kprintf("send event failed\n");
+	{
+		if (event->type != RTGUI_EVENT_TIMER)
+			rt_kprintf("send event to %s failed\n", thread->tid->name);
+	}
 
 	return result;
 }

+ 34 - 19
rtgui/common/rtgui_theme.c

@@ -37,19 +37,19 @@ extern struct rtgui_font rtgui_font_arial12;
 
 /* init theme */
 void rtgui_system_theme_init()
-{
-#if RTGUI_DEFAULT_FONT_SIZE == 16
-	rtgui_font_set_defaut(&rtgui_font_asc16);
+{
+#if RTGUI_DEFAULT_FONT_SIZE == 16
+	rtgui_font_set_defaut(&rtgui_font_asc16);
 #elif RTGUI_DEFAULT_FONT_SIZE == 12
-	rtgui_font_set_defaut(&rtgui_font_asc12);
-#else
-	rtgui_font_set_defaut(&rtgui_font_asc12);
+	rtgui_font_set_defaut(&rtgui_font_asc12);
+#else
+	rtgui_font_set_defaut(&rtgui_font_asc12);
 #endif
 }
 
-static const rt_uint8_t close_byte[14] = {0x06, 0x18, 0x03, 0x30, 0x01, 0xE0, 0x00,
-	0xC0, 0x01, 0xE0, 0x03, 0x30, 0x06, 0x18
-};
+static const rt_uint8_t close_byte[14] = {0x06, 0x18, 0x03, 0x30, 0x01, 0xE0, 0x00,
+	0xC0, 0x01, 0xE0, 0x03, 0x30, 0x06, 0x18
+};
 
 /* window drawing */
 void rtgui_theme_draw_win(struct rtgui_topwin* win)
@@ -406,10 +406,7 @@ void rtgui_theme_draw_iconbox(rtgui_iconbox_t* iconbox)
 	rtgui_dc_end_drawing(dc);
 }
 
-#define CHECK_BOX_W		13
-#define CHECK_BOX_H		13
-static const rt_uint8_t checked_byte[7] = {0x02, 0x06, 0x8E, 0xDC, 0xF8, 0x70, 0x20};
-
+static const rt_uint8_t checked_byte[7] = {0x02, 0x06, 0x8E, 0xDC, 0xF8, 0x70, 0x20};
 void rtgui_theme_draw_checkbox(struct rtgui_checkbox* checkbox)
 {
 	struct rtgui_dc* dc;
@@ -472,6 +469,21 @@ void rtgui_theme_draw_checkbox(struct rtgui_checkbox* checkbox)
 	return;
 }
 
+static const rt_uint8_t radio_unchecked_byte[] = 
+{
+	0x0f, 0x00, 0x30, 0xc0, 0x40, 0x20,
+	0x40, 0x20,	0x80, 0x10,	0x80, 0x10,
+	0x80, 0x10,	0x80, 0x10,	0x40, 0x20,
+	0x40, 0x20,	0x30, 0xc0,	0x0f, 0x00,
+};
+static const rt_uint8_t radio_checked_byte[] = 
+{
+	0x0f, 0x00, 0x30, 0xc0, 0x40, 0x20, 
+	0x40, 0x20, 0x86, 0x10, 0x8f, 0x10, 
+	0x8f, 0x10, 0x86, 0x10, 0x40, 0x20, 
+	0x40, 0x20, 0x30, 0xc0, 0x0f, 0x00,
+};
+
 void rtgui_theme_draw_radiobox(struct rtgui_radiobox* radiobox)
 {
 	struct rtgui_dc* dc;
@@ -531,9 +543,12 @@ void rtgui_theme_draw_radiobox(struct rtgui_radiobox* radiobox)
 
 	if (radiobox->orient == RTGUI_VERTICAL)
 	{
+		rt_uint16_t offset;
+		
 		/* set the first text rect */
 		item_rect.y2 = item_rect.y1 + item_size;
 
+		offset = (item_size - RADIO_BOX_H) / 2;
 		/* draw each radio button */
 		for (index = 0; index < radiobox->item_count; index ++)
 		{
@@ -544,12 +559,12 @@ void rtgui_theme_draw_radiobox(struct rtgui_radiobox* radiobox)
 			{
 				if (RTGUI_WIDGET_IS_FOCUSED(RTGUI_WIDGET(radiobox)))
 					rtgui_dc_draw_focus_rect(dc, &item_rect);
-				rtgui_dc_draw_circle(dc, item_rect.x1 + item_size/2 + 2, item_rect.y1 + item_size/2 + 2, item_size/2 - 2);
-				rtgui_dc_fill_circle(dc, item_rect.x1 + item_size/2 + 2, item_rect.y1 + item_size/2 + 2, item_size/2 - 4);
+
+				rtgui_dc_draw_word(dc, item_rect.x1, item_rect.y1 + offset, RADIO_BOX_H, radio_checked_byte);
 			}
 			else
 			{
-				rtgui_dc_draw_circle(dc, item_rect.x1 + item_size/2 + 2, item_rect.y1 + item_size/2 + 2, item_size/2 - 2);
+				rtgui_dc_draw_word(dc, item_rect.x1, item_rect.y1 + offset, RADIO_BOX_H, radio_unchecked_byte);
 			}
 
 			/* draw text */
@@ -576,12 +591,12 @@ void rtgui_theme_draw_radiobox(struct rtgui_radiobox* radiobox)
 			if (radiobox->item_selection == index)
 			{
 				rtgui_dc_draw_focus_rect(dc, &item_rect);
-				rtgui_dc_draw_circle(dc, item_rect.x1 + bord_size/2 + 2, item_rect.y1 + bord_size/2 + 2, bord_size/2 - 2);
-				rtgui_dc_fill_circle(dc, item_rect.x1 + bord_size/2 + 2, item_rect.y1 + bord_size/2 + 2, bord_size/2 - 4);
+
+				rtgui_dc_draw_word(dc, item_rect.x1, item_rect.y1, RADIO_BOX_H, radio_checked_byte);
 			}
 			else
 			{
-				rtgui_dc_draw_circle(dc, item_rect.x1 + bord_size/2 + 2, item_rect.y1 + bord_size/2 + 2, bord_size/2 - 2);
+				rtgui_dc_draw_word(dc, item_rect.x1, item_rect.y1, RADIO_BOX_H, radio_unchecked_byte);
 			}
 
 			/* draw text */

+ 13 - 0
rtgui/include/rtgui/rtgui_config.h

@@ -19,6 +19,19 @@
 /* RTGUI options */
 
 #ifdef _WIN32
+/* name length of RTGUI object */
+#define RTGUI_NAME_MAX		12
+/* support 16 weight font */
+#define RTGUI_USING_FONT16
+/* support Chinese font */
+#define RTGUI_USING_FONTHZ
+/* use small size in RTGUI */
+#define RTGUI_USING_SMALL_SIZE
+/* use mouse cursor */
+/* #define RTGUI_USING_MOUSE_CURSOR */
+/* default font size in RTGUI */
+#define RTGUI_DEFAULT_FONT_SIZE	12
+
 #define RTGUI_USING_STDIO_FILERW
 #define RTGUI_IMAGE_PNG
 #define RTGUI_IMAGE_JPEG

+ 6 - 0
rtgui/include/rtgui/rtgui_theme.h

@@ -17,6 +17,12 @@
 #include <rtgui/rtgui.h>
 #include <rtgui/rtgui_server.h>
 
+#define CHECK_BOX_W		13
+#define CHECK_BOX_H		13
+
+#define RADIO_BOX_W		12
+#define RADIO_BOX_H		12
+
 #include <rtgui/widgets/label.h>
 #include <rtgui/widgets/button.h>
 #include <rtgui/widgets/textbox.h>

+ 4 - 1
rtgui/include/rtgui/widgets/window.h

@@ -52,7 +52,10 @@ struct rtgui_win
 
 	/* top window style */
 	rt_uint8_t style;
+
+	rt_uint8_t flag;
 	rtgui_modal_code_t modal_code;
+	rtgui_widget_t* modal_widget;
 
 	/* window title */
 	char* title;
@@ -69,7 +72,7 @@ struct rtgui_win
 rtgui_type_t *rtgui_win_type_get(void);
 
 rtgui_win_t* rtgui_win_create(rtgui_toplevel_t* parent_toplevel, const char* title, 
-	rtgui_rect_t *rect, rt_uint32_t flag);
+	rtgui_rect_t *rect, rt_uint8_t flag);
 void rtgui_win_destroy(rtgui_win_t* win);
 
 rtgui_modal_code_t rtgui_win_show(rtgui_win_t* win, rt_bool_t is_modal);

+ 3 - 0
rtgui/include/rtgui/widgets/workbench.h

@@ -33,6 +33,8 @@
 
 #define RTGUI_WORKBENCH_FLAG_DEFAULT	RTGUI_WORKBENCH_FLAG_VISIBLE | RTGUI_WORKBENCH_FLAG_CLOSEBLE
 
+#define RTGUI_WORKBENCH_IS_MODAL_MODE(w) ((w)->flag & RTGUI_WORKBENCH_FLAG_MODAL_MODE)
+
 /** Gets the type of a workbench */
 #define RTGUI_WORKBENCH_TYPE       (rtgui_workbench_type_get())
 /** Casts the object to an rtgui_workbench */
@@ -51,6 +53,7 @@ struct rtgui_workbench
 	/* workbench flag */
 	rt_uint8_t flag;
 	rtgui_modal_code_t modal_code;
+	rtgui_widget_t *modal_widget;
 
 	/* workbench title */
 	unsigned char* title;

+ 1 - 1
rtgui/server/server.c

@@ -483,7 +483,7 @@ static void rtgui_server_entry(void* parameter)
 #ifdef RTGUI_USING_SMALL_SIZE
 	/* create rtgui server msgq */
 	rtgui_server_mq = rt_mq_create("rtgui",
-		32, 8, RT_IPC_FLAG_FIFO);
+		32, 16, RT_IPC_FLAG_FIFO);
 #else
 	/* create rtgui server msgq */
 	rtgui_server_mq = rt_mq_create("rtgui",

+ 6 - 1
rtgui/server/topwin.c

@@ -224,7 +224,7 @@ void rtgui_topwin_activate_win(struct rtgui_topwin* win)
 		rtgui_theme_draw_win(win);
 	}
 
-	if (rtgui_server_focus_topwin != RT_NULL)
+	if ((rtgui_server_focus_topwin != RT_NULL) && (rtgui_server_focus_topwin != win))
 	{
 		/* deactivate the old focus win  */
 		RTGUI_EVENT_WIN_DEACTIVATE_INIT(&event);
@@ -465,6 +465,11 @@ void rtgui_topwin_show(struct rtgui_event_win* event)
 				/* not the front window, raise it */
 				rtgui_topwin_raise(wid, sender);
 			}
+			else
+			{
+				/* just raise it */
+				rtgui_topwin_raise(wid, sender);
+			}
 		}
 		else
 		{

+ 36 - 0
rtgui/widgets/filelist_view.c

@@ -415,6 +415,38 @@ rt_bool_t rtgui_filelist_view_event_handler(struct rtgui_widget* widget, struct
         }
         break;
 
+	case RTGUI_EVENT_MOUSE_BUTTON:
+		{
+			rtgui_rect_t rect;
+			struct rtgui_event_mouse* emouse;
+
+			emouse = (struct rtgui_event_mouse*)event;
+
+			/* calculate selected item */
+
+			/* get physical extent information */
+			rtgui_widget_get_rect(widget, &rect);
+			rtgui_widget_rect_to_device(widget, &rect);
+
+			if (rtgui_rect_contains_point(&rect, emouse->x, emouse->y) == RT_EOK)
+			{
+				rt_uint16_t index;
+				index = (emouse->y - rect.y1) / (2 + rtgui_theme_get_selected_height());
+
+				if ((index < view->items_count) && (index < view->page_items))
+				{
+					rt_uint16_t old_item;
+
+					old_item = view->current_item;
+
+					/* set selected item */
+					view->current_item = (old_item/view->page_items) * view->page_items + index;
+					rtgui_filelist_view_update_current(view, old_item);
+				}
+			}
+		}
+		break;
+
     case RTGUI_EVENT_KBD:
         {
             struct rtgui_event_kbd* ekbd = (struct rtgui_event_kbd*)event;
@@ -474,7 +506,11 @@ rt_bool_t rtgui_filelist_view_event_handler(struct rtgui_widget* widget, struct
 							}
 						}
 						else if (view->current_item == 0 && 
+#ifdef _WIN32
+							(view->current_directory[1] == ':') && (view->current_directory[2] == '\\'))
+#else
 							(view->current_directory[0] == '/') && (view->current_directory[1] == '\0'))
+#endif
 						{
 							if (RTGUI_VIEW(view)->modal_show == RT_TRUE)
 							{

+ 32 - 0
rtgui/widgets/list_view.c

@@ -182,6 +182,38 @@ rt_bool_t rtgui_list_view_event_handler(struct rtgui_widget* widget, struct rtgu
         }
         break;
 
+	case RTGUI_EVENT_MOUSE_BUTTON:
+		{
+			rtgui_rect_t rect;
+			struct rtgui_event_mouse* emouse;
+
+			emouse = (struct rtgui_event_mouse*)event;
+
+			/* calculate selected item */
+
+			/* get physical extent information */
+			rtgui_widget_get_rect(widget, &rect);
+			rtgui_widget_rect_to_device(widget, &rect);
+
+			if (rtgui_rect_contains_point(&rect, emouse->x, emouse->y) == RT_EOK)
+			{
+				rt_uint16_t index;
+				index = (emouse->y - rect.y1) / (2 + rtgui_theme_get_selected_height());
+
+				if ((index < view->items_count) && (index < view->page_items))
+				{
+					rt_uint16_t old_item;
+
+					old_item = view->current_item;
+
+					/* set selected item */
+					view->current_item = view->current_item/view->page_items + index;
+					rtgui_list_view_update_current(view, old_item);
+				}
+			}
+		}
+		break;
+
     case RTGUI_EVENT_KBD:
         {
             struct rtgui_event_kbd* ekbd = (struct rtgui_event_kbd*)event;

+ 3 - 0
rtgui/widgets/radiobox.c

@@ -192,6 +192,9 @@ struct rtgui_radiobox* rtgui_radiobox_create(const char* label, int orient, char
 					radiobox->item_size = board_size + 3 + rtgui_rect_width(rect);
 			}
 		}
+
+		if (radiobox->item_size < RADIO_BOX_H + 2)
+			radiobox->item_size = RADIO_BOX_H + 2;
 	}
 
 	return radiobox;

+ 10 - 1
rtgui/widgets/view.c

@@ -116,7 +116,10 @@ rtgui_view_t* rtgui_view_create(const char* title)
 
 void rtgui_view_destroy(rtgui_view_t* view)
 {
-	rtgui_widget_destroy(RTGUI_WIDGET(view));
+	if (view->modal_show == RT_TRUE)
+		rtgui_view_end_modal(view, RTGUI_MODAL_CANCEL);
+	else
+		rtgui_widget_destroy(RTGUI_WIDGET(view));
 }
 
 void rtgui_view_set_box(rtgui_view_t* view, rtgui_box_t* box)
@@ -151,9 +154,12 @@ rtgui_modal_code_t rtgui_view_show(rtgui_view_t* view, rt_bool_t is_modal)
 	{
 		/* set modal mode */
 		workbench->flag |= RTGUI_WORKBENCH_FLAG_MODAL_MODE;
+		workbench->modal_widget = RTGUI_WIDGET(view);
 
 		/* perform workbench event loop */
 		rtgui_workbench_event_loop(workbench);
+
+		workbench->modal_widget = RT_NULL;
 		return workbench->modal_code;
 	}
 
@@ -171,6 +177,9 @@ void rtgui_view_end_modal(rtgui_view_t* view, rtgui_modal_code_t modal_code)
 	workbench = RTGUI_WORKBENCH(RTGUI_WIDGET(view)->parent);
 	workbench->modal_code = modal_code;
 	workbench->flag &= ~RTGUI_WORKBENCH_FLAG_MODAL_MODE;
+
+	/* remove modal mode */
+	view->modal_show = RT_FALSE;
 }
 
 void rtgui_view_hide(rtgui_view_t* view)

+ 8 - 8
rtgui/widgets/widget.c

@@ -37,10 +37,11 @@ static void _rtgui_widget_constructor(rtgui_widget_t *widget)
 	widget->toplevel		= RT_NULL;
 
 	/* some common event handler */
-#ifndef RTGUI_USING_SMALL_SIZE
-	widget->on_draw 		= RT_NULL;
 	widget->on_focus_in		= RT_NULL;
 	widget->on_focus_out	= RT_NULL;
+
+#ifndef RTGUI_USING_SMALL_SIZE
+	widget->on_draw 		= RT_NULL;
 	widget->on_mouseclick 	= RT_NULL;
 	widget->on_key 			= RT_NULL;
 	widget->on_size 		= RT_NULL;
@@ -276,11 +277,9 @@ void rtgui_widget_focus(rtgui_widget_t *widget)
 		if (RTGUI_WIDGET_IS_HIDE(RTGUI_WIDGET(parent))) break;
 	}
 
-#ifndef RTGUI_USING_SMALL_SIZE
 	/* invoke on focus in call back */
 	if (widget->on_focus_in != RT_NULL)
    		widget->on_focus_in(widget, RT_NULL);
-#endif
 }
 
 /**
@@ -291,15 +290,16 @@ void rtgui_widget_unfocus(rtgui_widget_t *widget)
 {
 	RT_ASSERT(widget != RT_NULL);
 
-	widget->flag &= ~RTGUI_WIDGET_FLAG_FOCUS;
-
 	if (!widget->toplevel || !RTGUI_WIDGET_IS_FOCUSED(widget))
 		return;
 
-#ifndef RTGUI_USING_SMALL_SIZE
+	widget->flag &= ~RTGUI_WIDGET_FLAG_FOCUS;
+
 	if (widget->on_focus_out != RT_NULL)
    		widget->on_focus_out(widget, RT_NULL);
-#endif
+
+	/* refresh widget */
+	rtgui_widget_update(widget);
 }
 
 void rtgui_widget_point_to_device(rtgui_widget_t* widget, rtgui_point_t* point)

+ 96 - 43
rtgui/widgets/window.c

@@ -113,7 +113,7 @@ rtgui_type_t *rtgui_win_type_get(void)
 	return win_type;
 }
 
-rtgui_win_t* rtgui_win_create(rtgui_toplevel_t* parent_toplevel, const char* title, rtgui_rect_t *rect, rt_uint32_t style)
+rtgui_win_t* rtgui_win_create(rtgui_toplevel_t* parent_toplevel, const char* title, rtgui_rect_t *rect, rt_uint8_t style)
 {
 	struct rtgui_win* win;
 
@@ -143,28 +143,14 @@ rtgui_win_t* rtgui_win_create(rtgui_toplevel_t* parent_toplevel, const char* tit
 
 void rtgui_win_destroy(struct rtgui_win* win)
 {
-	if (win->parent_toplevel != RT_NULL)
-	{
-		if (win->style & RTGUI_WIN_STYLE_MODAL)
-		{
-			/* exit modal mode */
-			win->style &= ~RTGUI_WIN_STYLE_MODAL;
-			/* set style to closed */
-			win->style |= RTGUI_WIN_STYLE_CLOSED;
-		}
-		else rtgui_widget_destroy(RTGUI_WIDGET(win));
-
-	}
-	else if (win->style & RTGUI_WIN_STYLE_CLOSED)
+	if (win->style & RTGUI_WIN_STYLE_MODAL)
 	{
-		rtgui_widget_destroy(RTGUI_WIDGET(win));
+		/* end modal */
+		rtgui_win_end_modal(win, RTGUI_MODAL_CANCEL);
 	}
 	else
 	{
-		/* exit modal mode */
-		win->style &= ~RTGUI_WIN_STYLE_MODAL;
-		/* set style to closed */
-		win->style |= RTGUI_WIN_STYLE_CLOSED;
+		rtgui_widget_destroy(RTGUI_WIDGET(win));
 	}
 }
 
@@ -205,15 +191,37 @@ rtgui_modal_code_t rtgui_win_show(struct rtgui_win* win, rt_bool_t is_modal)
 	{
 		if (win->parent_toplevel != RT_NULL)
 		{
-			rtgui_workbench_t* workbench;
+			rtgui_widget_t *parent_widget;
 
-			/* get root toplevel */
-			workbench = RTGUI_WORKBENCH(win->parent_toplevel);
-			workbench->flag |= RTGUI_WORKBENCH_FLAG_MODAL_MODE;
+			/* set style */
+			win->style |= RTGUI_WIN_STYLE_MODAL;
 
-			rtgui_workbench_event_loop(workbench);
-			result = workbench->modal_code;
-			workbench->flag &= ~RTGUI_WORKBENCH_FLAG_MODAL_MODE;
+			/* get root toplevel */
+			parent_widget = RTGUI_WIDGET(win->parent_toplevel);
+			if (RTGUI_IS_WORKBENCH(parent_widget))
+			{
+				rtgui_workbench_t* workbench;
+				workbench = RTGUI_WORKBENCH(win->parent_toplevel);
+				workbench->flag |= RTGUI_WORKBENCH_FLAG_MODAL_MODE;
+				workbench->modal_widget = RTGUI_WIDGET(win);
+
+				rtgui_workbench_event_loop(workbench);
+				result = workbench->modal_code;
+				workbench->flag &= ~RTGUI_WORKBENCH_FLAG_MODAL_MODE;
+				workbench->modal_widget = RT_NULL;
+			}
+			else if (RTGUI_IS_WIN(parent_widget))
+			{
+				rtgui_win_t* parent_win;
+				parent_win = RTGUI_WIN(win->parent_toplevel);
+				parent_win->flag |= RTGUI_WORKBENCH_FLAG_MODAL_MODE;
+				parent_win->modal_widget = RTGUI_WIDGET(win);
+
+				rtgui_win_event_loop(parent_win);
+				result = parent_win->modal_code;
+				parent_win->flag &= ~RTGUI_WORKBENCH_FLAG_MODAL_MODE;
+				parent_win->modal_widget = RT_NULL;
+			}
 		}
 		else
 		{
@@ -233,19 +241,33 @@ void rtgui_win_end_modal(struct rtgui_win* win, rtgui_modal_code_t modal_code)
 {
 	if (win->parent_toplevel != RT_NULL)
 	{
-		rtgui_workbench_t* workbench;
+		if (RTGUI_IS_WORKBENCH(win->parent_toplevel))
+		{
+			rtgui_workbench_t* workbench;
+
+			/* which is shown under workbench */
+			workbench = RTGUI_WORKBENCH(win->parent_toplevel);
+			workbench->modal_code = modal_code;
+			workbench->flag &= ~RTGUI_WORKBENCH_FLAG_MODAL_MODE;
+		}
+		else if (RTGUI_IS_WIN(win->parent_toplevel))
+		{
+			rtgui_win_t* parent_win;
 
-		/* which is shown under workbench */
-		workbench = RTGUI_WORKBENCH(win->parent_toplevel);
-		workbench->modal_code = modal_code;
-		workbench->flag &= ~RTGUI_WORKBENCH_FLAG_MODAL_MODE;
+			/* which is shown under win */
+			parent_win = RTGUI_WIN(win->parent_toplevel);
+			parent_win->modal_code = modal_code;
+			parent_win->flag &= ~RTGUI_WORKBENCH_FLAG_MODAL_MODE;		
+		}
 	}
 	else
 	{
 		/* which is a stand alone window */
 		win->modal_code = modal_code;
-		win->style &= ~RTGUI_WIN_STYLE_MODAL;
 	}
+
+	/* remove modal mode */
+	win->style &= ~RTGUI_WIN_STYLE_MODAL;
 }
 
 void rtgui_win_hiden(struct rtgui_win* win)
@@ -359,8 +381,15 @@ rt_bool_t rtgui_win_event_handler(struct rtgui_widget* widget, struct rtgui_even
 			if (win->on_close(widget, event) == RT_FALSE) return RT_TRUE;
 		}
 
-		/* destroy window */
-		rtgui_win_destroy(win);
+		if (win->style & RTGUI_WIN_STYLE_MODAL)
+		{
+			rtgui_win_end_modal(win, RTGUI_MODAL_CANCEL);
+		}
+		else
+		{
+			/* destroy window */
+			rtgui_win_destroy(win);
+		}
 
 		/* exit event loop */
 		return RT_TRUE;
@@ -394,16 +423,29 @@ rt_bool_t rtgui_win_event_handler(struct rtgui_widget* widget, struct rtgui_even
 		break;
 
 	case RTGUI_EVENT_WIN_DEACTIVATE:
-		win->style &= ~RTGUI_WIN_STYLE_ACTIVATE;
+		if (win->style & RTGUI_WIN_STYLE_MODAL)
+		{
+			/* do not deactivate a modal win */
+			struct rtgui_event_win_show eshow;
+			RTGUI_EVENT_WIN_SHOW_INIT(&eshow);
+			eshow.wid = win;
+
+			rtgui_thread_send(RTGUI_TOPLEVEL(win)->server, RTGUI_EVENT(&eshow),
+				sizeof(struct rtgui_event_win_show));
+		}
+		else
+		{
+			win->style &= ~RTGUI_WIN_STYLE_ACTIVATE;
 #ifndef RTGUI_USING_SMALL_SIZE
-		if (widget->on_draw != RT_NULL) widget->on_draw(widget, event);
-		else 
+			if (widget->on_draw != RT_NULL) widget->on_draw(widget, event);
+			else 
 #endif
-			rtgui_win_ondraw(win);
+				rtgui_win_ondraw(win);
 
-		if (win->on_deactivate != RT_NULL)
-		{
-			win->on_deactivate(widget, event);
+			if (win->on_deactivate != RT_NULL)
+			{
+				win->on_deactivate(widget, event);
+			}
 		}
 		break;
 
@@ -416,7 +458,13 @@ rt_bool_t rtgui_win_event_handler(struct rtgui_widget* widget, struct rtgui_even
 		break;
 
 	case RTGUI_EVENT_MOUSE_BUTTON:
-		if (rtgui_container_dispatch_mouse_event(RTGUI_CONTAINER(win), (struct rtgui_event_mouse*)event) == RT_FALSE)
+		if (win->flag & RTGUI_WORKBENCH_FLAG_MODAL_MODE)
+		{
+			if (win->modal_widget != RT_NULL)
+				return win->modal_widget->event_handler(win->modal_widget, event);
+		}
+ 		else if (rtgui_container_dispatch_mouse_event(RTGUI_CONTAINER(win), 
+			(struct rtgui_event_mouse*)event) == RT_FALSE)
 		{
 #ifndef RTGUI_USING_SMALL_SIZE
 			if (widget->on_mouseclick != RT_NULL)
@@ -445,7 +493,12 @@ rt_bool_t rtgui_win_event_handler(struct rtgui_widget* widget, struct rtgui_even
 		break;
 
     case RTGUI_EVENT_KBD:
-		if (RTGUI_CONTAINER(win)->focused != widget)
+		if (win->flag & RTGUI_WORKBENCH_FLAG_MODAL_MODE)
+		{
+			if (win->modal_widget != RT_NULL)
+				return win->modal_widget->event_handler(win->modal_widget, event);
+		}
+		else if (RTGUI_CONTAINER(win)->focused != widget)
 		{
 			RTGUI_CONTAINER(win)->focused->event_handler(RTGUI_CONTAINER(win)->focused, event);
 		}

+ 34 - 10
rtgui/widgets/workbench.c

@@ -294,12 +294,24 @@ rt_bool_t rtgui_workbench_event_handler(rtgui_widget_t* widget, rtgui_event_t* e
 			}
 			else
 			{
-				/* let viewer to handle it */
-				rtgui_view_t* view = workbench->current_view;
-				if (view != RT_NULL &&
-						RTGUI_WIDGET(view)->event_handler != RT_NULL)
+				if (RTGUI_WORKBENCH_IS_MODAL_MODE(workbench))
 				{
-					RTGUI_WIDGET(view)->event_handler(RTGUI_WIDGET(view), event);
+					/* let modal widget to handle it */
+					if (workbench->modal_widget != RT_NULL &&
+							workbench->modal_widget->event_handler != RT_NULL)
+					{
+						workbench->modal_widget->event_handler(workbench->modal_widget, event);
+					}
+				}
+				else
+				{
+					/* let viewer to handle it */
+					rtgui_view_t* view = workbench->current_view;
+					if (view != RT_NULL &&
+							RTGUI_WIDGET(view)->event_handler != RT_NULL)
+					{
+						RTGUI_WIDGET(view)->event_handler(RTGUI_WIDGET(view), event);
+					}
 				}
 			}
 		}
@@ -317,14 +329,26 @@ rt_bool_t rtgui_workbench_event_handler(rtgui_widget_t* widget, rtgui_event_t* e
 			}
 			else
 			{
-				if (RTGUI_CONTAINER(widget)->focused == widget)
+				if (RTGUI_WORKBENCH_IS_MODAL_MODE(workbench))
 				{
-					/* set focused widget to the current view */
-					if (workbench->current_view != RT_NULL)
-						rtgui_widget_focus(RTGUI_WIDGET(RTGUI_CONTAINER(workbench->current_view)->focused));
+					/* let modal widget to handle it */
+					if (workbench->modal_widget != RT_NULL &&
+							workbench->modal_widget->event_handler != RT_NULL)
+					{
+						workbench->modal_widget->event_handler(workbench->modal_widget, event);
+					}
 				}
+				else
+				{
+					if (RTGUI_CONTAINER(widget)->focused == widget)
+					{
+						/* set focused widget to the current view */
+						if (workbench->current_view != RT_NULL)
+							rtgui_widget_focus(RTGUI_WIDGET(RTGUI_CONTAINER(workbench->current_view)->focused));
+					}
 
-				return rtgui_toplevel_event_handler(widget, event);
+					return rtgui_toplevel_event_handler(widget, event);
+				}
 			}
 		}
 		break;