123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203 |
- /*
- * Change Logs:
- * Date Author Notes
- * 2012-01-24 onelife add mono color support
- */
- #include <rtgui/rtgui_system.h>
- #include <rtgui/driver.h>
- #define gfx_device (rtgui_graphic_get_device()->device)
- #define gfx_device_ops rt_graphix_ops(gfx_device)
- static void _pixel_mono_set_pixel(rtgui_color_t *c, int x, int y)
- {
- rt_uint8_t pixel;
- pixel = rtgui_color_to_mono(*c);
- gfx_device_ops->set_pixel((char *)&pixel, x, y);
- }
- static void _pixel_rgb565p_set_pixel(rtgui_color_t *c, int x, int y)
- {
- rt_uint16_t pixel;
- pixel = rtgui_color_to_565p(*c);
- gfx_device_ops->set_pixel((char *)&pixel, x, y);
- }
- static void _pixel_rgb565_set_pixel(rtgui_color_t *c, int x, int y)
- {
- rt_uint16_t pixel;
- pixel = rtgui_color_to_565(*c);
- gfx_device_ops->set_pixel((char *)&pixel, x, y);
- }
- static void _pixel_rgb888_set_pixel(rtgui_color_t *c, int x, int y)
- {
- rt_uint32_t pixel;
- pixel = rtgui_color_to_888(*c);
- gfx_device_ops->set_pixel((char *)&pixel, x, y);
- }
- static void _pixel_mono_get_pixel(rtgui_color_t *c, int x, int y)
- {
- rt_uint8_t pixel;
- gfx_device_ops->get_pixel((char *)&pixel, x, y);
- *c = rtgui_color_from_mono(pixel);
- }
- static void _pixel_rgb565p_get_pixel(rtgui_color_t *c, int x, int y)
- {
- rt_uint16_t pixel;
- gfx_device_ops->get_pixel((char *)&pixel, x, y);
- *c = rtgui_color_from_565p(pixel);
- }
- static void _pixel_rgb565_get_pixel(rtgui_color_t *c, int x, int y)
- {
- rt_uint16_t pixel;
- gfx_device_ops->get_pixel((char *)&pixel, x, y);
- *c = rtgui_color_from_565(pixel);
- }
- static void _pixel_rgb888_get_pixel(rtgui_color_t *c, int x, int y)
- {
- rt_uint32_t pixel;
- gfx_device_ops->get_pixel((char *)&pixel, x, y);
- *c = rtgui_color_from_888(pixel);
- }
- static void _pixel_mono_draw_hline(rtgui_color_t *c, int x1, int x2, int y)
- {
- rt_uint8_t pixel;
- pixel = rtgui_color_to_mono(*c);
- gfx_device_ops->draw_hline((char *)&pixel, x1, x2, y);
- }
- static void _pixel_rgb565p_draw_hline(rtgui_color_t *c, int x1, int x2, int y)
- {
- rt_uint16_t pixel;
- pixel = rtgui_color_to_565p(*c);
- gfx_device_ops->draw_hline((char *)&pixel, x1, x2, y);
- }
- static void _pixel_rgb565_draw_hline(rtgui_color_t *c, int x1, int x2, int y)
- {
- rt_uint16_t pixel;
- pixel = rtgui_color_to_565(*c);
- gfx_device_ops->draw_hline((char *)&pixel, x1, x2, y);
- }
- static void _pixel_rgb888_draw_hline(rtgui_color_t *c, int x1, int x2, int y)
- {
- rt_uint32_t pixel;
- pixel = rtgui_color_to_888(*c);
- gfx_device_ops->draw_hline((char *)&pixel, x1, x2, y);
- }
- static void _pixel_mono_draw_vline(rtgui_color_t *c, int x, int y1, int y2)
- {
- rt_uint8_t pixel;
- pixel = rtgui_color_to_mono(*c);
- gfx_device_ops->draw_vline((char *)&pixel, x, y1, y2);
- }
- static void _pixel_rgb565p_draw_vline(rtgui_color_t *c, int x, int y1, int y2)
- {
- rt_uint16_t pixel;
- pixel = rtgui_color_to_565p(*c);
- gfx_device_ops->draw_vline((char *)&pixel, x, y1, y2);
- }
- static void _pixel_rgb565_draw_vline(rtgui_color_t *c, int x, int y1, int y2)
- {
- rt_uint16_t pixel;
- pixel = rtgui_color_to_565(*c);
- gfx_device_ops->draw_vline((char *)&pixel, x, y1, y2);
- }
- static void _pixel_rgb888_draw_vline(rtgui_color_t *c, int x, int y1, int y2)
- {
- rt_uint32_t pixel;
- pixel = rtgui_color_to_888(*c);
- gfx_device_ops->draw_vline((char *)&pixel, x, y1, y2);
- }
- static void _pixel_draw_raw_hline(rt_uint8_t *pixels, int x1, int x2, int y)
- {
- if (x2 > x1)
- gfx_device_ops->blit_line((char *)pixels, x1, y, (x2 - x1));
- else
- gfx_device_ops->blit_line((char *)pixels, x2, y, (x1 - x2));
- }
- /* pixel device */
- const struct rtgui_graphic_driver_ops _pixel_mono_ops =
- {
- _pixel_mono_set_pixel,
- _pixel_mono_get_pixel,
- _pixel_mono_draw_hline,
- _pixel_mono_draw_vline,
- _pixel_draw_raw_hline,
- };
- const struct rtgui_graphic_driver_ops _pixel_rgb565p_ops =
- {
- _pixel_rgb565p_set_pixel,
- _pixel_rgb565p_get_pixel,
- _pixel_rgb565p_draw_hline,
- _pixel_rgb565p_draw_vline,
- _pixel_draw_raw_hline,
- };
- const struct rtgui_graphic_driver_ops _pixel_rgb565_ops =
- {
- _pixel_rgb565_set_pixel,
- _pixel_rgb565_get_pixel,
- _pixel_rgb565_draw_hline,
- _pixel_rgb565_draw_vline,
- _pixel_draw_raw_hline,
- };
- const struct rtgui_graphic_driver_ops _pixel_rgb888_ops =
- {
- _pixel_rgb888_set_pixel,
- _pixel_rgb888_get_pixel,
- _pixel_rgb888_draw_hline,
- _pixel_rgb888_draw_vline,
- _pixel_draw_raw_hline,
- };
- const struct rtgui_graphic_driver_ops *rtgui_pixel_device_get_ops(int pixel_format)
- {
- switch (pixel_format)
- {
- case RTGRAPHIC_PIXEL_FORMAT_MONO:
- return &_pixel_mono_ops;
- case RTGRAPHIC_PIXEL_FORMAT_RGB565:
- return &_pixel_rgb565_ops;
- case RTGRAPHIC_PIXEL_FORMAT_RGB565P:
- return &_pixel_rgb565p_ops;
- case RTGRAPHIC_PIXEL_FORMAT_RGB888:
- return &_pixel_rgb888_ops;
- }
- return RT_NULL;
- }
|