reader_gui.c
上传用户:holyzs
上传日期:2022-06-29
资源大小:2335k
文件大小:2k
源码类别:

编辑器/阅读器

开发平台:

C/C++

  1. #include <reader_core.h>
  2. void reader_lineto(screen_t screen, int x1, int y1, int x2, int y2, color_t color) {
  3.   int from, to, x, y;
  4.   if (x1 == x2) {
  5.     if (y1 > y2) {
  6.       from = y2;
  7.       to = y1;
  8.     } else {
  9.       from = y1;
  10.       to = y2;
  11.     }
  12.     for (y = from; y <= to; y++) {
  13.       reader_setpixel(screen, x1, y, color);
  14.     }
  15.   }
  16.   if (y1 == y2) {
  17.     if (x1 > x2) {
  18.       from = x2;
  19.       to = x1;
  20.     } else {
  21.       from = x1;
  22.       to = x2;
  23.     }
  24.     for (x = from; x <= to; x++) {
  25.       reader_setpixel(screen, x, y1, color);
  26.     }
  27.   }
  28. }
  29. void reader_rectangle(screen_t screen, int x1, int y1, int x2, int y2, color_t color, int fill) {
  30.   int left_x, right_x, up_y, down_y;
  31.   //draw border
  32.   reader_lineto(screen, x1, y1, x2, y1, color);
  33.   reader_lineto(screen, x1, y1, x1, y2, color);
  34.   reader_lineto(screen, x2, y1, x2, y2, color);
  35.   reader_lineto(screen, x1, y2, x2, y2, color);
  36.   if (fill) {
  37.     if (x1 > x2) {
  38.       left_x = x2;
  39.       right_x = x1;
  40.     } else {
  41.       right_x = x2;
  42.       left_x = x1;
  43.     }
  44.     if (y1 > y2) {
  45.       up_y = y2;
  46.       down_y = y1;
  47.     } else {
  48.       down_y = y2;
  49.       up_y = y1;
  50.     }
  51.     //borader already drawn
  52.     left_x ++;
  53.     right_x --;
  54.     while (up_y ++ < down_y) {
  55.       reader_lineto(screen, left_x, up_y, right_x, up_y, color);
  56.     }
  57.   }
  58. }
  59. void reader_caption(screen_t screen, unsigned short *str) {
  60.   //draw caption bg
  61.   reader_rectangle(screen, 0, DEFAULT_HEADER_BLANK, READER_SCREEN_WIDTH - 1,
  62.                    DEFAULT_FONT_SIZE + DEFAULT_HEADER_BLANK, READER_COLOR_BLUE, 1);
  63.   //draw caption text
  64.   //prompt
  65.   reader_textout_ex(screen, 0, DEFAULT_HEADER_BLANK, str, reader_wcslen(str),
  66.                     DEFAULT_FONT_SIZE, READER_COLOR_YELLOW, 0);
  67. }
  68. void reader_arrow(screen_t screen, int x, int y, int size, arrow_pointer_t ap, color_t color) {
  69.   int i = 0, x0, y0, y_lim;
  70.   if (ap == LEFT_POINTER) {
  71.     for (i = 0; i < size; i ++) {
  72.       y_lim = y + i;
  73.       x0 = x + i;
  74.       for (y0 = y - i; y0 < y_lim; y0 ++) {
  75.         reader_setpixel(screen, x0, y0, color);
  76.       }
  77.     }
  78.   } else {
  79.     for (i = 0; i < size; i ++) {
  80.       y_lim = y + i;
  81.       x0 = x - i;
  82.       for (y0 = y - i; y0 < y_lim; y0 ++) {
  83.         reader_setpixel(screen, x0, y0, color);
  84.       }
  85.     }
  86.   }
  87. }