summaryrefslogtreecommitdiff
path: root/components/rtgui/server
diff options
context:
space:
mode:
author[email protected] <[email protected]>2011-06-05 15:16:41 +0000
committer[email protected] <[email protected]>2011-06-05 15:16:41 +0000
commitbbf68d15e513d4799f651acd4fd9f88fe3a03ffd (patch)
tree373cff350b3df4b8326df7a6e698a41a9f496c19 /components/rtgui/server
parentb936b13ed25d596694517bff813c0c72c3769b3c (diff)
change graphic driver as RT-Thread device driver
git-svn-id: https://rt-thread.googlecode.com/svn/trunk@1454 bbd45198-f89e-11dd-88c7-29a3b14d5316
Diffstat (limited to 'components/rtgui/server')
-rw-r--r--components/rtgui/server/driver.c96
-rw-r--r--components/rtgui/server/mouse.c6
-rw-r--r--components/rtgui/server/server.c8
3 files changed, 56 insertions, 54 deletions
diff --git a/components/rtgui/server/driver.c b/components/rtgui/server/driver.c
index 5e086f022e..43b4b8ac43 100644
--- a/components/rtgui/server/driver.c
+++ b/components/rtgui/server/driver.c
@@ -13,72 +13,72 @@
*/
#include <rtgui/driver.h>
-#ifdef RTGUI_USING_GRAPHIC_DRIVER_LIST
-struct rtgui_list_node _rtgui_graphic_driver_list = {RT_NULL};
+struct rtgui_graphic_driver _driver;
-void rtgui_graphic_driver_add(struct rtgui_graphic_driver* driver)
+extern const struct rtgui_graphic_driver_ops *rtgui_pixel_device_get_ops(int pixel_format);
+extern const struct rtgui_graphic_driver_ops *rtgui_framebuffer_get_ops(int pixel_format);
+
+/* get default driver */
+struct rtgui_graphic_driver* rtgui_graphic_driver_get_default()
{
- rtgui_list_insert(&_rtgui_graphic_driver_list, &(driver->list));
+ return &_driver;
}
-void rtgui_graphic_driver_remove(struct rtgui_graphic_driver* driver)
+void rtgui_graphic_driver_get_rect(const struct rtgui_graphic_driver *driver, rtgui_rect_t *rect)
{
- rtgui_list_remove(&_rtgui_graphic_driver_list, &(driver->list));
+ RT_ASSERT(rect != RT_NULL);
+ RT_ASSERT(driver != RT_NULL);
+
+ rect->x1 = rect->y1 = 0;
+ rect->x2 = driver->width;
+ rect->y2 = driver->height;
}
-struct rtgui_graphic_driver* rtgui_graphic_driver_find(char* name)
+rt_err_t rtgui_graphic_set_device(rt_device_t device)
{
- struct rtgui_list_node* node;
- struct rtgui_graphic_driver* driver;
+ rt_err_t result;
+ struct rt_lcd_info info;
- /* search in list */
- rtgui_list_foreach(node, &(_rtgui_graphic_driver_list))
+ /* get framebuffer address */
+ result = rt_device_control(device, LCD_GET_INFO, &info);
+ if (result != RT_EOK)
{
- driver = rtgui_list_entry(node, struct rtgui_graphic_driver, list);
-
- /* find it */
- if (rt_strncmp(driver->name, name, RTGUI_NAME_MAX) == 0)
- {
- return driver;
- }
+ /* get device information failed */
+ return -RT_ERROR;
}
- return RT_NULL;
-}
-
-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;
+ /* initialize framebuffer driver */
+ _driver.device = device;
+ _driver.pixel_format = info.pixel_format;
+ _driver.byte_per_pixel = info.byte_per_pixel;
+ _driver.width = info.width;
+ _driver.height = info.height;
+ _driver.pitch = _driver.width * _driver.byte_per_pixel;
+ _driver.framebuffer = info.framebuffer;
-void rtgui_graphic_driver_add(const struct rtgui_graphic_driver* driver)
-{
- _default_graphic_driver = driver;
+ if (info.framebuffer != RT_NULL)
+ {
+ /* is a frame buffer device */
+ _driver.ops = rtgui_framebuffer_get_ops(_driver.pixel_format);
+ }
+ else
+ {
+ /* is a pixel device */
+ _driver.ops = rtgui_pixel_device_get_ops(_driver.pixel_format);
+ }
+
+ return RT_EOK;
}
-const struct rtgui_graphic_driver* rtgui_graphic_driver_get_default()
+/* screen update */
+void rtgui_graphic_driver_screen_update(struct rtgui_graphic_driver* driver, rtgui_rect_t *rect)
{
- 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;
- rect->y2 = driver->height;
+ rt_device_control(driver->device, LCD_RECT_UPDATE, rect);
}
-void rtgui_graphic_driver_get_default_rect(rtgui_rect_t *rect)
+/* get video frame buffer */
+rt_uint8_t* rtgui_graphic_driver_get_framebuffer(struct rtgui_graphic_driver* driver)
{
- /* return default the extent of default driver */
- rtgui_graphic_driver_get_rect(rtgui_graphic_driver_get_default(), rect);
+ return (rt_uint8_t*)driver->framebuffer;
}
diff --git a/components/rtgui/server/mouse.c b/components/rtgui/server/mouse.c
index 83b3b171e9..a28087cd0b 100644
--- a/components/rtgui/server/mouse.c
+++ b/components/rtgui/server/mouse.c
@@ -140,7 +140,7 @@ void rtgui_mouse_init()
/* init cursor */
_rtgui_cursor->bpp = gd->byte_per_pixel;
- _rtgui_cursor->framebuffer = gd->get_framebuffer();
+ _rtgui_cursor->framebuffer = rtgui_graphic_driver_get_framebuffer(gd);
_rtgui_cursor->screen_pitch = _rtgui_cursor->bpp * gd->width;
#ifdef RTGUI_USING_MOUSE_CURSOR
@@ -430,7 +430,7 @@ static void rtgui_winrect_show()
void (*set_pixel) (rtgui_color_t *c, rt_base_t x, rt_base_t y);
c = black;
- set_pixel = rtgui_graphic_driver_get_default()->set_pixel;
+ set_pixel = rtgui_graphic_driver_get_default()->ops->set_pixel;
win_rect = _rtgui_cursor->win_rect;
win_rect_inner = win_rect;
@@ -470,7 +470,7 @@ static void rtgui_winrect_show()
}
/* update rect */
- rtgui_graphic_driver_get_default()->screen_update(&win_rect);
+ rtgui_graphic_driver_screen_update(rtgui_graphic_driver_get_default(), &win_rect);
}
#define display_direct_memcpy(src, dest, src_pitch, dest_pitch, height, len) \
diff --git a/components/rtgui/server/server.c b/components/rtgui/server/server.c
index 26a4bcf6e0..5b90b64b1b 100644
--- a/components/rtgui/server/server.c
+++ b/components/rtgui/server/server.c
@@ -188,10 +188,12 @@ void rtgui_server_handle_set_wm(struct rtgui_event_set_wm *event)
void rtgui_server_handle_update(struct rtgui_event_update_end* event)
{
- const struct rtgui_graphic_driver* driver = rtgui_graphic_driver_get_default();
+ struct rtgui_graphic_driver* driver;
+
+ driver = rtgui_graphic_driver_get_default();
if (driver != RT_NULL)
{
- driver->screen_update(&(event->rect));
+ rtgui_graphic_driver_screen_update(driver, &(event->rect));
}
}
@@ -277,7 +279,7 @@ void rtgui_server_handle_mouse_btn(struct rtgui_event_mouse* event)
if (rtgui_server_focus_topwin != wnd)
{
/* raise this window */
- rtgui_topwin_raise(wnd->wid, wnd->tid);
+ rtgui_topwin_activate_win(wnd);
rtgui_server_focus_panel = RT_NULL;
}