Просмотр исходного кода

update rtgui_driver.c , add _framebuffer_rgb888_ops

Signed-off-by: yangfasheng <yangfasheng@rt-thread.com>
yangfasheng 7 лет назад
Родитель
Сommit
85db7dee31
1 измененных файлов с 52 добавлено и 1 удалено
  1. 52 1
      src/rtgui_driver.c

+ 52 - 1
src/rtgui_driver.c

@@ -379,6 +379,46 @@ static void _rgb565p_draw_vline(rtgui_color_t *c, int x , int y1, int y2)
     }
 }
 
+static void _rgb888_set_pixel(rtgui_color_t *c, int x, int y)
+{
+    *GET_PIXEL(rtgui_graphic_get_device(), x, y, rtgui_color_t) = *c;
+}
+
+static void _rgb888_get_pixel(rtgui_color_t *c, int x, int y)
+{
+    *c = ((rtgui_color_t)*GET_PIXEL(rtgui_graphic_get_device(), x, y, rtgui_color_t) & 0xFFFFFF) + 0xFF000000;
+}
+
+static void _rgb888_draw_hline(rtgui_color_t *c, int x1, int x2, int y)
+{
+    int index;
+    rtgui_color_t *pixel_ptr;
+
+    /* get pixel pointer in framebuffer */
+    pixel_ptr = GET_PIXEL(rtgui_graphic_get_device(), x1, y, rtgui_color_t);
+
+    for (index = x1; index < x2; index++)
+    {
+        *pixel_ptr = *c;
+        pixel_ptr++;
+    }
+}
+
+static void _rgb888_draw_vline(rtgui_color_t *c, int x, int y1, int y2)
+{
+    struct rtgui_graphic_driver *drv;
+    rtgui_color_t *dst;
+    int index;
+
+    drv = rtgui_graphic_get_device();
+    dst = GET_PIXEL(drv, x, y1, rtgui_color_t);
+    for (index = y1; index < y2; index++)
+    {
+        *dst = *c;
+        dst += drv->width;
+    }
+}
+
 static void _argb888_set_pixel(rtgui_color_t *c, int x, int y)
 {
     *GET_PIXEL(rtgui_graphic_get_device(), x, y, rtgui_color_t) = *c;
@@ -428,7 +468,7 @@ static void framebuffer_draw_raw_hline(rt_uint8_t *pixels, int x1, int x2, int y
     drv = rtgui_graphic_get_device();
     dst = GET_PIXEL(drv, x1, y, rt_uint8_t);
     memcpy(dst, pixels,
-              (x2 - x1) * _UI_BITBYTES(drv->bits_per_pixel));
+           (x2 - x1) * _UI_BITBYTES(drv->bits_per_pixel));
 }
 
 const struct rtgui_graphic_driver_ops _framebuffer_rgb565_ops =
@@ -449,6 +489,15 @@ const struct rtgui_graphic_driver_ops _framebuffer_rgb565p_ops =
     framebuffer_draw_raw_hline,
 };
 
+const struct rtgui_graphic_driver_ops _framebuffer_rgb888_ops =
+{
+    _rgb888_set_pixel,
+    _rgb888_get_pixel,
+    _rgb888_draw_hline,
+    _rgb888_draw_vline,
+    framebuffer_draw_raw_hline,
+};
+
 const struct rtgui_graphic_driver_ops _framebuffer_argb888_ops =
 {
     _argb888_set_pixel,
@@ -554,6 +603,8 @@ const struct rtgui_graphic_driver_ops *rtgui_framebuffer_get_ops(int pixel_forma
         return &_framebuffer_rgb565_ops;
     case RTGRAPHIC_PIXEL_FORMAT_RGB565P:
         return &_framebuffer_rgb565p_ops;
+    case RTGRAPHIC_PIXEL_FORMAT_RGB888:
+        return &_framebuffer_rgb888_ops;
     case RTGRAPHIC_PIXEL_FORMAT_ARGB888:
         return &_framebuffer_argb888_ops;
     default: