pixel_driver.c 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. #include <rtgui/rtgui_system.h>
  2. #include <rtgui/driver.h>
  3. #define gfx_device (rtgui_graphic_get_device()->device)
  4. #define gfx_device_ops rt_graphix_ops(gfx_device)
  5. static void _pixel_rgb565p_set_pixel(rtgui_color_t *c, int x, int y)
  6. {
  7. rt_uint16_t pixel;
  8. pixel = rtgui_color_to_565p(*c);
  9. gfx_device_ops->set_pixel((char*)&pixel, x, y);
  10. }
  11. static void _pixel_rgb565_set_pixel(rtgui_color_t *c, int x, int y)
  12. {
  13. rt_uint16_t pixel;
  14. pixel = rtgui_color_to_565(*c);
  15. gfx_device_ops->set_pixel((char*)&pixel, x, y);
  16. }
  17. static void _pixel_rgb888_set_pixel(rtgui_color_t *c, int x, int y)
  18. {
  19. rt_uint32_t pixel;
  20. pixel = rtgui_color_to_888(*c);
  21. gfx_device_ops->set_pixel((char*)&pixel, x, y);
  22. }
  23. static void _pixel_rgb565p_get_pixel(rtgui_color_t *c, int x, int y)
  24. {
  25. rt_uint16_t pixel;
  26. gfx_device_ops->get_pixel((char*)&pixel, x, y);
  27. *c = rtgui_color_from_565p(pixel);
  28. }
  29. static void _pixel_rgb565_get_pixel(rtgui_color_t *c, int x, int y)
  30. {
  31. rt_uint16_t pixel;
  32. gfx_device_ops->get_pixel((char*)&pixel, x, y);
  33. *c = rtgui_color_from_565(pixel);
  34. }
  35. static void _pixel_rgb888_get_pixel(rtgui_color_t *c, int x, int y)
  36. {
  37. rt_uint32_t pixel;
  38. gfx_device_ops->get_pixel((char*)&pixel, x, y);
  39. *c = rtgui_color_from_888(pixel);
  40. }
  41. static void _pixel_rgb565p_draw_hline(rtgui_color_t *c, int x1, int x2, int y)
  42. {
  43. rt_uint16_t pixel;
  44. pixel = rtgui_color_to_565p(*c);
  45. gfx_device_ops->draw_hline((char*)&pixel, x1, x2, y);
  46. }
  47. static void _pixel_rgb565_draw_hline(rtgui_color_t *c, int x1, int x2, int y)
  48. {
  49. rt_uint16_t pixel;
  50. pixel = rtgui_color_to_565(*c);
  51. gfx_device_ops->draw_hline((char*)&pixel, x1, x2, y);
  52. }
  53. static void _pixel_rgb888_draw_hline(rtgui_color_t *c, int x1, int x2, int y)
  54. {
  55. rt_uint32_t pixel;
  56. pixel = rtgui_color_to_888(*c);
  57. gfx_device_ops->draw_hline((char*)&pixel, x1, x2, y);
  58. }
  59. static void _pixel_rgb565p_draw_vline(rtgui_color_t *c, int x, int y1, int y2)
  60. {
  61. rt_uint16_t pixel;
  62. pixel = rtgui_color_to_565p(*c);
  63. gfx_device_ops->draw_vline((char*)&pixel, x, y1, y2);
  64. }
  65. static void _pixel_rgb565_draw_vline(rtgui_color_t *c, int x, int y1, int y2)
  66. {
  67. rt_uint16_t pixel;
  68. pixel = rtgui_color_to_565(*c);
  69. gfx_device_ops->draw_vline((char*)&pixel, x, y1, y2);
  70. }
  71. static void _pixel_rgb888_draw_vline(rtgui_color_t *c, int x, int y1, int y2)
  72. {
  73. rt_uint32_t pixel;
  74. pixel = rtgui_color_to_888(*c);
  75. gfx_device_ops->draw_vline((char*)&pixel, x, y1, y2);
  76. }
  77. static void _pixel_draw_raw_hline(rt_uint8_t *pixels, int x1, int x2, int y)
  78. {
  79. if (x2 > x1)
  80. gfx_device_ops->blit_line((char*)pixels, x1, y, (x2 - x1));
  81. else
  82. gfx_device_ops->blit_line((char*)pixels, x2, y, (x1 - x2));
  83. }
  84. /* pixel device */
  85. const struct rtgui_graphic_driver_ops _pixel_rgb565p_ops =
  86. {
  87. _pixel_rgb565p_set_pixel,
  88. _pixel_rgb565p_get_pixel,
  89. _pixel_rgb565p_draw_hline,
  90. _pixel_rgb565p_draw_vline,
  91. _pixel_draw_raw_hline,
  92. };
  93. const struct rtgui_graphic_driver_ops _pixel_rgb565_ops =
  94. {
  95. _pixel_rgb565_set_pixel,
  96. _pixel_rgb565_get_pixel,
  97. _pixel_rgb565_draw_hline,
  98. _pixel_rgb565_draw_vline,
  99. _pixel_draw_raw_hline,
  100. };
  101. const struct rtgui_graphic_driver_ops _pixel_rgb888_ops =
  102. {
  103. _pixel_rgb888_set_pixel,
  104. _pixel_rgb888_get_pixel,
  105. _pixel_rgb888_draw_hline,
  106. _pixel_rgb888_draw_vline,
  107. _pixel_draw_raw_hline,
  108. };
  109. const struct rtgui_graphic_driver_ops *rtgui_pixel_device_get_ops(int pixel_format)
  110. {
  111. switch (pixel_format)
  112. {
  113. case RTGRAPHIC_PIXEL_FORMAT_RGB565:
  114. return &_pixel_rgb565_ops;
  115. case RTGRAPHIC_PIXEL_FORMAT_RGB565P:
  116. return &_pixel_rgb565p_ops;
  117. case RTGRAPHIC_PIXEL_FORMAT_RGB888:
  118. return &_pixel_rgb888_ops;
  119. }
  120. return RT_NULL;
  121. }