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

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        : GUIAALine.C
  16. Purpose     : Drawing lines with antialiasing
  17. ---------------------------END-OF-HEADER------------------------------
  18. */
  19. #include "GUI_Protected.h"
  20. #include <stddef.h>
  21. /*********************************************************************
  22. *
  23. *                       GL_AA_DrawLine
  24. *
  25. **********************************************************************
  26. */
  27. void GL_AA_DrawLine(int x0, int y0, int x1, int y1) {
  28.   int xMin, xMax;
  29.   U8 PenSizeOld = GUI_GetPenSize();
  30.   U8 PenSizeHR  = PenSizeOld * GUI_Context.AA_Factor;
  31.   U8 OldPenShape = GUI_SetPenShape(GUI_PS_FLAT);
  32.   /* Calculate left and right borders for AA module */
  33.   if (x0 < x1) {
  34.     xMin = x0;
  35.     xMax = x1;
  36.   } else {
  37.     xMin = x1;
  38.     xMax = x0;
  39.   }
  40.   if (GUI_Context.AA_HiResEnable) {
  41.     xMin -= PenSizeHR;
  42.     xMax += PenSizeHR;
  43.     xMin /= GUI_Context.AA_Factor;
  44.     xMax /= GUI_Context.AA_Factor;
  45.   } else {
  46.     xMin -= PenSizeOld;
  47.     xMax += PenSizeOld;
  48.     x0 *= GUI_Context.AA_Factor;
  49.     x1 *= GUI_Context.AA_Factor;
  50.     y0 *= GUI_Context.AA_Factor;
  51.     y1 *= GUI_Context.AA_Factor;
  52.   }
  53.   /* Do the actual drawing */
  54.   GUI_AA_Init(xMin, xMax);
  55.   GUI_SetPenSize(PenSizeHR);
  56.   GL_DrawLine(x0 , y0 , x1 ,  y1 );
  57.   GUI_AA_Exit();
  58.   /* Draw end points (can be optimized away in future, TBD*/
  59.   switch (OldPenShape) {
  60.   case GUI_PS_ROUND:
  61.     {
  62.       int r = GUI_Context.AA_Factor * PenSizeOld / 2;
  63.       GL_FillCircleAA_HiRes(x0 , y0 , r);
  64.       GL_FillCircleAA_HiRes(x1 , y1 , r);
  65.     }
  66.     break;
  67.   }
  68.   GUI_SetPenSize(PenSizeOld);
  69.   GUI_SetPenShape(OldPenShape);
  70. }
  71. /*********************************************************************
  72. *
  73. *                       GUI_AA_DrawLine
  74. *
  75. **********************************************************************
  76. */
  77. void GUI_AA_DrawLine(int x0, int y0, int x1, int y1) {
  78.   GUI_LOCK();
  79.   #if (GUI_WINSUPPORT)
  80.     WM_ADDORG(x0,y0);
  81.     WM_ITERATE_START(NULL); {
  82.   #endif
  83.   GL_AA_DrawLine(x0, y0, x1, y1);
  84.   #if (GUI_WINSUPPORT)
  85.     } WM_ITERATE_END();
  86.   #endif
  87.   GUI_UNLOCK();
  88. }