summaryrefslogtreecommitdiff
path: root/rtgui
diff options
context:
space:
mode:
authorbernard.xiong <[email protected]>2010-02-12 16:02:00 +0000
committerbernard.xiong <[email protected]>2010-02-12 16:02:00 +0000
commit49e090149a37d6a011cb25959530ef931289402a (patch)
tree3906ffc5817ba62bde1c9f43fa2154f6de9ee940 /rtgui
parent3c831420de91906a829effacef83decfdb367035 (diff)
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
Diffstat (limited to 'rtgui')
-rw-r--r--rtgui/common/arial12font.c228
-rw-r--r--rtgui/common/arial16font.c228
-rw-r--r--rtgui/common/dc.c53
-rw-r--r--rtgui/common/font.c2
-rw-r--r--rtgui/common/rtgui_system.c5
-rw-r--r--rtgui/common/rtgui_theme.c53
-rw-r--r--rtgui/include/rtgui/rtgui_config.h13
-rw-r--r--rtgui/include/rtgui/rtgui_theme.h6
-rw-r--r--rtgui/include/rtgui/widgets/window.h5
-rw-r--r--rtgui/include/rtgui/widgets/workbench.h3
-rw-r--r--rtgui/server/server.c2
-rw-r--r--rtgui/server/topwin.c7
-rw-r--r--rtgui/widgets/filelist_view.c36
-rw-r--r--rtgui/widgets/list_view.c32
-rw-r--r--rtgui/widgets/radiobox.c3
-rw-r--r--rtgui/widgets/view.c11
-rw-r--r--rtgui/widgets/widget.c16
-rw-r--r--rtgui/widgets/window.c137
-rw-r--r--rtgui/widgets/workbench.c44
19 files changed, 335 insertions, 549 deletions
diff --git a/rtgui/common/arial12font.c b/rtgui/common/arial12font.c
deleted file mode 100644
index aa21ff08fe..0000000000
--- a/rtgui/common/arial12font.c
+++ /dev/null
@@ -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
diff --git a/rtgui/common/arial16font.c b/rtgui/common/arial16font.c
deleted file mode 100644
index 07f61987f4..0000000000
--- a/rtgui/common/arial16font.c
+++ /dev/null
@@ -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
diff --git a/rtgui/common/dc.c b/rtgui/common/dc.c
index 6a0075f8e6..68a02e863b 100644
--- a/rtgui/common/dc.c
+++ b/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 ;
diff --git a/rtgui/common/font.c b/rtgui/common/font.c
index 69267a2478..475effa726 100644
--- a/rtgui/common/font.c
+++ b/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
diff --git a/rtgui/common/rtgui_system.c b/rtgui/common/rtgui_system.c
index b2f86ac96e..55cecf8bb3 100644
--- a/rtgui/common/rtgui_system.c
+++ b/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;
}
diff --git a/rtgui/common/rtgui_theme.c b/rtgui/common/rtgui_theme.c
index 4f5ea3eb02..392ab67721 100644
--- a/rtgui/common/rtgui_theme.c
+++ b/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 */
diff --git a/rtgui/include/rtgui/rtgui_config.h b/rtgui/include/rtgui/rtgui_config.h
index 311007d71e..a941ad6422 100644
--- a/rtgui/include/rtgui/rtgui_config.h
+++ b/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
diff --git a/rtgui/include/rtgui/rtgui_theme.h b/rtgui/include/rtgui/rtgui_theme.h
index 979e1cb254..20912149bd 100644
--- a/rtgui/include/rtgui/rtgui_theme.h
+++ b/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>
diff --git a/rtgui/include/rtgui/widgets/window.h b/rtgui/include/rtgui/widgets/window.h
index ea730580ad..75c53eb69b 100644
--- a/rtgui/include/rtgui/widgets/window.h
+++ b/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);
diff --git a/rtgui/include/rtgui/widgets/workbench.h b/rtgui/include/rtgui/widgets/workbench.h
index 3d8668083a..ba863f080e 100644
--- a/rtgui/include/rtgui/widgets/workbench.h
+++ b/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;
diff --git a/rtgui/server/server.c b/rtgui/server/server.c
index 4c72781f66..2d4b5c317b 100644
--- a/rtgui/server/server.c
+++ b/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",
diff --git a/rtgui/server/topwin.c b/rtgui/server/topwin.c
index 059b06d4a6..abd7266119 100644
--- a/rtgui/server/topwin.c
+++ b/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
{
diff --git a/rtgui/widgets/filelist_view.c b/rtgui/widgets/filelist_view.c
index 894ac965fe..3724b84d6d 100644
--- a/rtgui/widgets/filelist_view.c
+++ b/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)
{
diff --git a/rtgui/widgets/list_view.c b/rtgui/widgets/list_view.c
index 91ff21970b..42f50b702c 100644
--- a/rtgui/widgets/list_view.c
+++ b/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;
diff --git a/rtgui/widgets/radiobox.c b/rtgui/widgets/radiobox.c
index d5bd39f841..babf9f9ce1 100644
--- a/rtgui/widgets/radiobox.c
+++ b/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;
diff --git a/rtgui/widgets/view.c b/rtgui/widgets/view.c
index ed436d5282..3c2c714eca 100644
--- a/rtgui/widgets/view.c
+++ b/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)
diff --git a/rtgui/widgets/widget.c b/rtgui/widgets/widget.c
index dbdf4f22c3..61043c81ec 100644
--- a/rtgui/widgets/widget.c
+++ b/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)
diff --git a/rtgui/widgets/window.c b/rtgui/widgets/window.c
index 1f6dfdcc34..03465f207e 100644
--- a/rtgui/widgets/window.c
+++ b/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;
+
+ /* set style */
+ win->style |= RTGUI_WIN_STYLE_MODAL;
/* get root toplevel */
- workbench = RTGUI_WORKBENCH(win->parent_toplevel);
- workbench->flag |= RTGUI_WORKBENCH_FLAG_MODAL_MODE;
+ 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;
+ 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);
}
diff --git a/rtgui/widgets/workbench.c b/rtgui/widgets/workbench.c
index 5ac2cd2452..cd0d5fedb3 100644
--- a/rtgui/widgets/workbench.c
+++ b/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;