diff options
| author | [email protected] <[email protected]> | 2011-06-05 15:16:41 +0000 |
|---|---|---|
| committer | [email protected] <[email protected]> | 2011-06-05 15:16:41 +0000 |
| commit | bbf68d15e513d4799f651acd4fd9f88fe3a03ffd (patch) | |
| tree | 373cff350b3df4b8326df7a6e698a41a9f496c19 /components/rtgui/server | |
| parent | b936b13ed25d596694517bff813c0c72c3769b3c (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.c | 96 | ||||
| -rw-r--r-- | components/rtgui/server/mouse.c | 6 | ||||
| -rw-r--r-- | components/rtgui/server/server.c | 8 |
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; } |
