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:
bernard.xiong@gmail.com
2011-06-05 15:16:41 +00:00
parent b936b13ed2
commit bbf68d15e5
13 changed files with 482 additions and 100 deletions
+18
View File
@@ -92,5 +92,23 @@ rt_inline rtgui_color_t rtgui_color_from_565p(rt_uint16_t pixel)
return color;
}
/* convert rtgui color to RGB */
rt_inline rt_uint32_t rtgui_color_to_888(rtgui_color_t c)
{
rt_uint32_t pixel;
pixel = RTGUI_RGB_R(c) << 16 | RTGUI_RGB_G(c) << 8 | RTGUI_RGB_B(c);
return pixel;
}
rt_inline rtgui_color_t rtgui_color_from_888(rt_uint32_t pixel)
{
rtgui_color_t color;
color = RTGUI_RGB(((pixel >> 16) & 0xff), ((pixel >> 8) & 0xff), pixel & 0xff);
return color;
}
#endif
-1
View File
@@ -24,7 +24,6 @@ enum rtgui_dc_type
RTGUI_DC_HW,
RTGUI_DC_CLIENT,
RTGUI_DC_BUFFER,
RTGUI_DC_IMLIB2,
};
struct rtgui_dc_engine
+54 -22
View File
@@ -17,24 +17,40 @@
#include <rtgui/list.h>
#include <rtgui/color.h>
struct rtgui_graphic_driver
#define LCD_RECT_UPDATE 0
#define LCD_ON 1
#define LCD_OFF 2
#define LCD_GET_INFO 3
#define LCD_MODE_SET 4
enum
{
/* driver name */
char* name;
PIXEL_FORMAT_MONO = 0,
PIXEL_FORMAT_GRAY4,
PIXEL_FORMAT_GRAY16,
PIXEL_FORMAT_RGB332,
PIXEL_FORMAT_RGB444,
PIXEL_FORMAT_RGB565,
PIXEL_FORMAT_RGB565P,
PIXEL_FORMAT_RGB666,
PIXEL_FORMAT_RGB888,
PIXEL_FORMAT_ARGB888
};
#define PIXEL_POSITION(x, y) ((x << 16) | y)
/* byte per pixel */
rt_uint16_t byte_per_pixel;
struct rt_lcd_info
{
rt_uint8_t pixel_format;
rt_uint8_t byte_per_pixel;
/* screen width and height */
rt_uint16_t width;
rt_uint16_t height;
/* screen update */
void (*screen_update)(rtgui_rect_t* rect);
/* get video frame buffer */
rt_uint8_t* (*get_framebuffer)(void);
rt_uint8_t *framebuffer;
};
struct rtgui_graphic_driver_ops
{
/* set and get pixel in (x, y) */
void (*set_pixel) (rtgui_color_t *c, rt_base_t x, rt_base_t y);
void (*get_pixel) (rtgui_color_t *c, rt_base_t x, rt_base_t y);
@@ -44,24 +60,40 @@ struct rtgui_graphic_driver
/* draw raw hline */
void (*draw_raw_hline)(rt_uint8_t *pixels, rt_base_t x1, rt_base_t x2, rt_base_t y);
/* the driver list */
rtgui_list_t list;
};
#ifdef RTGUI_USING_GRAPHIC_DRIVER_LIST
void rtgui_graphic_driver_add(struct rtgui_graphic_driver* driver);
void rtgui_graphic_driver_remove(struct rtgui_graphic_driver* driver);
struct rtgui_graphic_driver
{
/* pixel format and byte per pixel */
rt_uint8_t pixel_format;
rt_uint8_t byte_per_pixel;
rt_uint16_t pitch;
/* screen width and height */
rt_uint16_t width;
rt_uint16_t height;
/* framebuffer address and ops */
volatile rt_uint8_t *framebuffer;
rt_device_t device;
const struct rtgui_graphic_driver_ops *ops;
};
struct rtgui_graphic_driver* rtgui_graphic_driver_find(char* name);
#else
void rtgui_graphic_driver_add(const struct rtgui_graphic_driver* driver);
#endif
const struct rtgui_graphic_driver* rtgui_graphic_driver_get_default(void);
struct rtgui_graphic_driver* rtgui_graphic_driver_get_default(void);
void rtgui_graphic_driver_get_rect(const struct rtgui_graphic_driver *driver, rtgui_rect_t *rect);
void rtgui_graphic_driver_get_default_rect(rtgui_rect_t *rect);
void rtgui_graphic_driver_screen_update(struct rtgui_graphic_driver* driver, rtgui_rect_t *rect);
rt_uint8_t* rtgui_graphic_driver_get_framebuffer(struct rtgui_graphic_driver* driver);
rt_err_t rtgui_graphic_set_device(rt_device_t device);
rt_inline struct rtgui_graphic_driver* rtgui_graphic_get_device()
{
extern struct rtgui_graphic_driver _driver;
return &_driver;
}
#endif
@@ -152,6 +152,7 @@ void rtgui_widget_set_oncommand(rtgui_widget_t* widget, rtgui_event_handler_ptr
/* get and set rect of widget */
void rtgui_widget_get_rect(rtgui_widget_t* widget, rtgui_rect_t *rect);
void rtgui_widget_set_rect(rtgui_widget_t* widget, const rtgui_rect_t* rect);
void rtgui_widget_set_rectangle(rtgui_widget_t* widget, int x, int y, int width, int height);
void rtgui_widget_get_extent(rtgui_widget_t* widget, rtgui_rect_t *rect);
#ifndef RTGUI_USING_SMALL_SIZE