summaryrefslogtreecommitdiff
path: root/components/rtgui/server
diff options
context:
space:
mode:
author[email protected] <[email protected]>2010-07-04 23:58:35 +0000
committer[email protected] <[email protected]>2010-07-04 23:58:35 +0000
commitb25f307b9b94918da883ba083ea4b1c33807719d (patch)
treef32c8323a8a62736c00d0019e7f63307e8b6727c /components/rtgui/server
parente76cd77c561149c3aa259715571d68729672cae6 (diff)
implement hardware DC in each widget.
git-svn-id: https://rt-thread.googlecode.com/svn/trunk@787 bbd45198-f89e-11dd-88c7-29a3b14d5316
Diffstat (limited to 'components/rtgui/server')
-rw-r--r--components/rtgui/server/driver.c21
-rw-r--r--components/rtgui/server/mouse.c2
-rw-r--r--components/rtgui/server/panel.c14
-rw-r--r--components/rtgui/server/panel.h4
-rw-r--r--components/rtgui/server/server.c4
5 files changed, 40 insertions, 5 deletions
diff --git a/components/rtgui/server/driver.c b/components/rtgui/server/driver.c
index 6793ea1360..5e086f022e 100644
--- a/components/rtgui/server/driver.c
+++ b/components/rtgui/server/driver.c
@@ -13,6 +13,7 @@
*/
#include <rtgui/driver.h>
+#ifdef RTGUI_USING_GRAPHIC_DRIVER_LIST
struct rtgui_list_node _rtgui_graphic_driver_list = {RT_NULL};
void rtgui_graphic_driver_add(struct rtgui_graphic_driver* driver)
@@ -50,10 +51,25 @@ struct rtgui_graphic_driver* rtgui_graphic_driver_get_default()
return rtgui_list_entry(_rtgui_graphic_driver_list.next,
struct rtgui_graphic_driver, list);
}
+#else
+static const struct rtgui_graphic_driver* _default_graphic_driver = RT_NULL;
-void rtgui_graphic_driver_get_rect(struct rtgui_graphic_driver *driver, rtgui_rect_t *rect)
+void rtgui_graphic_driver_add(const struct rtgui_graphic_driver* driver)
{
- if (rect == RT_NULL || driver == RT_NULL) return;
+ _default_graphic_driver = driver;
+}
+
+const struct rtgui_graphic_driver* rtgui_graphic_driver_get_default()
+{
+ return _default_graphic_driver;
+}
+#endif
+
+
+void rtgui_graphic_driver_get_rect(const struct rtgui_graphic_driver *driver, rtgui_rect_t *rect)
+{
+ RT_ASSERT(rect != RT_NULL);
+ RT_ASSERT(driver != RT_NULL);
rect->x1 = rect->y1 = 0;
rect->x2 = driver->width;
@@ -65,3 +81,4 @@ void rtgui_graphic_driver_get_default_rect(rtgui_rect_t *rect)
/* return default the extent of default driver */
rtgui_graphic_driver_get_rect(rtgui_graphic_driver_get_default(), rect);
}
+
diff --git a/components/rtgui/server/mouse.c b/components/rtgui/server/mouse.c
index 32965c5115..83b3b171e9 100644
--- a/components/rtgui/server/mouse.c
+++ b/components/rtgui/server/mouse.c
@@ -129,7 +129,7 @@ static void rtgui_winrect_show (void);
#define WIN_MOVE_BORDER 4
void rtgui_mouse_init()
{
- struct rtgui_graphic_driver* gd = rtgui_graphic_driver_get_default();
+ const struct rtgui_graphic_driver* gd = rtgui_graphic_driver_get_default();
_rtgui_cursor = (struct rtgui_cursor*) rtgui_malloc(sizeof(struct rtgui_cursor));
rt_memset(_rtgui_cursor, 0, sizeof(struct rtgui_cursor));
diff --git a/components/rtgui/server/panel.c b/components/rtgui/server/panel.c
index 0d767a3f3d..a7689007d2 100644
--- a/components/rtgui/server/panel.c
+++ b/components/rtgui/server/panel.c
@@ -54,6 +54,7 @@ void rtgui_panel_register(char* name, rtgui_rect_t* extent)
panel->extent = *extent;
panel->wm_thread = RT_NULL;
+ panel->is_focusable = RT_TRUE;
/* init list */
rtgui_list_init(&(panel->sibling));
@@ -90,6 +91,18 @@ void rtgui_panel_set_default_focused(char* name)
}
}
+void rtgui_panel_set_nofocused(char* name)
+{
+ extern struct rtgui_panel* rtgui_server_focus_panel;
+ struct rtgui_panel* panel;
+
+ panel = rtgui_panel_find(name);
+ if (panel != RT_NULL)
+ {
+ panel->is_focusable = RT_FALSE;
+ }
+}
+
struct rtgui_panel* rtgui_panel_find(char* name)
{
struct rtgui_list_node* node;
@@ -304,3 +317,4 @@ void rtgui_panel_set_wm(rtgui_panel_t* panel, rt_thread_t wm)
panel->wm_thread = wm;
}
+
diff --git a/components/rtgui/server/panel.h b/components/rtgui/server/panel.h
index fffaa35dc0..559ddc4307 100644
--- a/components/rtgui/server/panel.h
+++ b/components/rtgui/server/panel.h
@@ -47,6 +47,9 @@ struct rtgui_panel
/* the workbench manager thread */
rt_thread_t wm_thread;
+
+ /* is focusable */
+ rt_bool_t is_focusable;
};
/* find panel by name */
@@ -66,3 +69,4 @@ void rtgui_panel_append_monitor_rect(rtgui_panel_t* panel, rt_thread_t tid, rtgu
void rtgui_panel_remove_monitor_rect(rtgui_panel_t* panel, rt_thread_t tid, rtgui_rect_t* rect);
#endif
+
diff --git a/components/rtgui/server/server.c b/components/rtgui/server/server.c
index 7e980c458c..4b143438fc 100644
--- a/components/rtgui/server/server.c
+++ b/components/rtgui/server/server.c
@@ -182,7 +182,7 @@ void rtgui_server_handle_set_wm(struct rtgui_event_set_wm *event)
void rtgui_server_handle_update(struct rtgui_event_update_end* event)
{
- struct rtgui_graphic_driver* driver = rtgui_graphic_driver_get_default();
+ const struct rtgui_graphic_driver* driver = rtgui_graphic_driver_get_default();
if (driver != RT_NULL)
{
driver->screen_update(&(event->rect));
@@ -290,7 +290,7 @@ void rtgui_server_handle_mouse_btn(struct rtgui_event_mouse* event)
/* get the panel which contains the mouse */
panel = rtgui_panel_get_contain(event->x, event->y);
- if (panel != RT_NULL)
+ if ((panel != RT_NULL) && (panel->is_focusable == RT_TRUE))
{
/* deactivate old window */
if (rtgui_server_focus_topwin != RT_NULL)