mirror of
https://github.com/RT-Thread/rt-thread.git
synced 2025-12-26 01:07:21 +00:00
change graphic driver as RT-Thread device driver
git-svn-id: https://rt-thread.googlecode.com/svn/trunk@1454 bbd45198-f89e-11dd-88c7-29a3b14d5316
This commit is contained in:
@@ -13,58 +13,16 @@
|
||||
*/
|
||||
#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)
|
||||
{
|
||||
rtgui_list_insert(&_rtgui_graphic_driver_list, &(driver->list));
|
||||
}
|
||||
|
||||
void rtgui_graphic_driver_remove(struct rtgui_graphic_driver* driver)
|
||||
{
|
||||
rtgui_list_remove(&_rtgui_graphic_driver_list, &(driver->list));
|
||||
}
|
||||
|
||||
struct rtgui_graphic_driver* rtgui_graphic_driver_find(char* name)
|
||||
{
|
||||
struct rtgui_list_node* node;
|
||||
struct rtgui_graphic_driver* driver;
|
||||
|
||||
/* search in list */
|
||||
rtgui_list_foreach(node, &(_rtgui_graphic_driver_list))
|
||||
{
|
||||
driver = rtgui_list_entry(node, struct rtgui_graphic_driver, list);
|
||||
|
||||
/* find it */
|
||||
if (rt_strncmp(driver->name, name, RTGUI_NAME_MAX) == 0)
|
||||
{
|
||||
return driver;
|
||||
}
|
||||
}
|
||||
|
||||
return RT_NULL;
|
||||
}
|
||||
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()
|
||||
{
|
||||
return rtgui_list_entry(_rtgui_graphic_driver_list.next,
|
||||
struct rtgui_graphic_driver, list);
|
||||
return &_driver;
|
||||
}
|
||||
#else
|
||||
static const struct rtgui_graphic_driver* _default_graphic_driver = RT_NULL;
|
||||
|
||||
void rtgui_graphic_driver_add(const struct rtgui_graphic_driver* driver)
|
||||
{
|
||||
_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)
|
||||
{
|
||||
@@ -76,9 +34,51 @@ void rtgui_graphic_driver_get_rect(const struct rtgui_graphic_driver *driver, rt
|
||||
rect->y2 = driver->height;
|
||||
}
|
||||
|
||||
void rtgui_graphic_driver_get_default_rect(rtgui_rect_t *rect)
|
||||
rt_err_t rtgui_graphic_set_device(rt_device_t device)
|
||||
{
|
||||
/* return default the extent of default driver */
|
||||
rtgui_graphic_driver_get_rect(rtgui_graphic_driver_get_default(), rect);
|
||||
rt_err_t result;
|
||||
struct rt_lcd_info info;
|
||||
|
||||
/* get framebuffer address */
|
||||
result = rt_device_control(device, LCD_GET_INFO, &info);
|
||||
if (result != RT_EOK)
|
||||
{
|
||||
/* get device information failed */
|
||||
return -RT_ERROR;
|
||||
}
|
||||
|
||||
/* 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;
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
/* screen update */
|
||||
void rtgui_graphic_driver_screen_update(struct rtgui_graphic_driver* driver, rtgui_rect_t *rect)
|
||||
{
|
||||
rt_device_control(driver->device, LCD_RECT_UPDATE, rect);
|
||||
}
|
||||
|
||||
/* get video frame buffer */
|
||||
rt_uint8_t* rtgui_graphic_driver_get_framebuffer(struct rtgui_graphic_driver* driver)
|
||||
{
|
||||
return (rt_uint8_t*)driver->framebuffer;
|
||||
}
|
||||
|
||||
|
||||
@@ -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) \
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user