GUIAAPoly.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        : GUIPolyAA.C
  16. Purpose     : Draw Polygon routines with Antialiasing
  17. ---------------------------END-OF-HEADER------------------------------
  18. */
  19. #include "GUI_Private.h"
  20. #include <stdio.h>
  21. #include <string.h>
  22. #include <math.h>
  23. /*
  24.           **********************************************
  25.           *                                            *
  26.           *              GL_FillPolygonAA              *
  27.           *                                            *
  28.           **********************************************
  29. */
  30. static void _FillPolygonAA      (GUI_POINT* paPoint, int NumPoints, int x, int y) {
  31.   int i;
  32.   int Stat;
  33.   int x0,x1;
  34.   int PosFactor = GUI_Context.AA_HiResEnable ? 1 : GUI_Context.AA_Factor;
  35. /* Calc horizontal limits and init GUI_AA */
  36.   x0 = x1 = paPoint[0].x;
  37.   for (i=1; i< NumPoints; i++) {
  38.     int x =  paPoint[i].x;
  39.     if (x<x0)
  40.       x0 = x;
  41.     if (x>x1)
  42.       x1 = x;
  43.   }
  44.   if (!GUI_Context.AA_HiResEnable) {
  45.     Stat = GUI_AA_Init(x0+x,x1+x);
  46.   } else {
  47.     Stat = GUI_AA_Init((x0+x)/GUI_Context.AA_Factor,(x1+x)/GUI_Context.AA_Factor);
  48.   }
  49.   if (Stat ==0) {
  50.     /* Modify pointlist */
  51.     if (!GUI_Context.AA_HiResEnable) {
  52.       for (i=0; i< NumPoints; i++) {
  53.         paPoint[i].x *= GUI_Context.AA_Factor;
  54.         paPoint[i].y *= GUI_Context.AA_Factor;
  55.       }
  56.     }
  57.     GL_FillPolygon(paPoint, NumPoints, x * PosFactor, y * PosFactor);
  58.     /* Restore pointlist */
  59.     if (!GUI_Context.AA_HiResEnable) {
  60.       for (i=0; i< NumPoints; i++) {
  61.         paPoint[i].x /= GUI_Context.AA_Factor;
  62.         paPoint[i].y /= GUI_Context.AA_Factor;
  63.       }
  64.     }
  65.     /* Cleanup */
  66.   }
  67.   GUI_AA_Exit();
  68. }
  69. void GUI_AA_FillPolygon(/*const*/ GUI_POINT* pPoints, int NumPoints, int x0, int y0) {
  70.   GUI_LOCK();
  71.   #if (GUI_WINSUPPORT)
  72.     WM_ADDORG(x0,y0);
  73.     WM_ITERATE_START(NULL); {
  74.   #endif
  75. /* Variables in MEMDEV module (with memory devices only) */
  76.   #if GUI_SUPPORT_MEMDEV
  77.     if (GUI_Context.pDeviceAPI->pfFillPolygonAA)
  78.       GUI_Context.pDeviceAPI->pfFillPolygonAA(pPoints, NumPoints, x0, y0);
  79.     else
  80.   #endif
  81.   _FillPolygonAA (pPoints, NumPoints, x0, y0);
  82.   #if (GUI_WINSUPPORT)
  83.     } WM_ITERATE_END();
  84.   #endif
  85.   GUI_UNLOCK();
  86. }