GUI_DrawGraph.c
上传用户:zbk8730
上传日期:2017-08-10
资源大小:12168k
文件大小:2k
源码类别:

uCOS

开发平台:

C/C++

  1. /*
  2. *********************************************************************************************************
  3. *                                                uC/GUI
  4. *                        Universal graphic software for embedded applications
  5. *
  6. *                       (c) Copyright 2002, Micrium Inc., Weston, FL
  7. *                       (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
  8. *
  9. *              礐/GUI is protected by international copyright laws. Knowledge of the
  10. *              source code may not be used to write a similar product. This file may
  11. *              only be used in accordance with a license and should not be redistributed
  12. *              in any way. We appreciate your understanding and fairness.
  13. *
  14. ----------------------------------------------------------------------
  15. File        : GUI_DrawPolyline.c
  16. Purpose     : Implementation of GUI_DrawPolyline (part of emWin GSC)
  17. ---------------------------END-OF-HEADER------------------------------
  18. */
  19. #include <stddef.h>           /* needed for definition of NULL */
  20. #include "GUI_Protected.H"
  21. static void _DrawGraph(I16 *pay, int NumPoints, int xOff, int yOff) {
  22.   int i;
  23.   int y0, y1;
  24.   int yClip0, yClip1;
  25.   /* Perform high level clipping in x */
  26.   yClip0 = GUI_Context.pClipRect_HL->y0;
  27.   yClip1 = GUI_Context.pClipRect_HL->y1;
  28.   i=0;
  29.   if (GUI_Context.pClipRect_HL) {
  30.     if (xOff < GUI_Context.pClipRect_HL->x0)
  31.       i = GUI_Context.pClipRect_HL->x0 - xOff;
  32.     if (xOff+NumPoints-1 > GUI_Context.pClipRect_HL->x1)
  33.       NumPoints = GUI_Context.pClipRect_HL->x1 - xOff + 1;
  34.   }
  35.   /* Start drawing if there is something left to do after x-clipping */
  36.   if (i < NumPoints) {
  37.     y0 = *(pay + i++) + yOff;
  38.     /* Iterate */
  39.     for (; i < NumPoints; i++) {
  40.       /* Perform high level clipping in y */
  41.       y1 = *(pay + i) + yOff;
  42.       if ((y0 >= yClip0) | (y1 >= yClip0)) {
  43.         if ((y0 <= yClip1) | (y1 <= yClip1)) {
  44.           int y01;
  45.           y01 = (y1 + y0) / 2;
  46.           if (y0 <= y1) {
  47.             LCD_DrawVLine(i + xOff - 1, y0, y01);
  48.             LCD_DrawVLine(i + xOff, y01, y1);
  49.           } else {
  50.             LCD_DrawVLine(i + xOff - 1, y01, y0);
  51.             LCD_DrawVLine(i + xOff, y1, y01);
  52.           }
  53.         }
  54.       }
  55.       y0 = y1;
  56.     }
  57.   }
  58. }
  59.   
  60. void GUI_DrawGraph(I16 *pay, int NumPoints, int x0, int y0) {
  61.   GUI_LOCK();
  62.   #if (GUI_WINSUPPORT)
  63.     WM_ADDORG(x0,y0);
  64.     WM_ITERATE_START(NULL); {
  65.   #endif
  66.   _DrawGraph(pay, NumPoints, x0, y0);
  67.   #if (GUI_WINSUPPORT)
  68.     } WM_ITERATE_END();
  69.   #endif
  70.   GUI_UNLOCK();
  71. }