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

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        : GUIDEMO_MemDevB.c
  16. Purpose     : Memory device demo
  17. ----------------------------------------------------------------------
  18. */
  19. #include "GUI.H"
  20. #include "GUIDEMO.H"
  21. #include "WM.h"
  22. #include "stdio.h"
  23. #if GUI_SUPPORT_MEMDEV
  24. /*********************************************************************
  25. *
  26. *       Static data
  27. *
  28. **********************************************************************
  29. */
  30. static const GUI_POINT _aArrow[] = {
  31.   {  0, 0   +85},
  32.   {-40, -35 +85},
  33.   {-10, -25 +85},
  34.   {-10, -85 +85},
  35.   { 10, -85 +85},
  36.   { 10, -25 +85},
  37.   { 40, -35 +85}
  38. };
  39. /* Define the callback structure. The structure should contain all the data
  40.    required by the callback drawing funtion
  41. */
  42. typedef struct {
  43.   int Angle;
  44.   int DoClear;
  45. } tDrawContext;
  46. /*********************************************************************
  47. *
  48. *       Static functions
  49. *
  50. **********************************************************************
  51. */
  52. /* The user defined callback routine */
  53. static void _Draw(void * p) {
  54.   int XSize = LCD_GetXSize();
  55.   int YSize = LCD_GetYSize();
  56.   tDrawContext * pContext = (tDrawContext *)p;
  57.   int i = pContext->Angle;
  58.   static int iLast = -1;
  59.   static GUI_POINT aPoint[7];
  60.   if (pContext->DoClear)
  61.     GUI_Clear();
  62.   GUI_SetFont(&GUI_FontD24x32);
  63.   GUI_SetTextMode(GUI_TM_TRANS);
  64.   GUI_SetColor(GUI_GRAY);
  65.   GUI_SetFont(&GUI_FontComic18B_1);
  66.   GUI_DispStringHCenterAt("Below arrow", XSize / 2, YSize / 2 - 20);
  67.   if (iLast != i) {
  68.     float Angle = 0.02 * (float)i;
  69.     iLast = i;
  70.     GUI_RotatePolygon(aPoint, _aArrow, 7, Angle);
  71.   }
  72.   GUI_SetColor(GUI_WHITE);
  73.   GUI_FillPolygon(&aPoint[0], 7, XSize / 2, YSize / 2 + 30);
  74.   GUI_SetTextMode(GUI_TM_TRANS);
  75.   GUI_SetColor(GUI_DARKGRAY);
  76.   GUI_SetFont(&GUI_FontComic18B_1);
  77.   GUI_DispStringHCenterAt("Above arrow", XSize / 2, YSize / 2);
  78. }
  79. /*********************************************************************
  80. *
  81. *       GUIDEMO_ShowMemoryDevice
  82. *
  83. **********************************************************************
  84. */
  85. void GUIDEMO_ShowMemoryDevice(void) {
  86.   int i, tDiff, t0;
  87.   tDrawContext DrawContext;
  88.   GUI_COLOR colorBack;
  89.   GUI_RECT rView, rPrev, rTemp;
  90.   GUIDEMO_ShowIntro("Memory devices",
  91.                     "For flicker free animation"
  92.                     "nand other purposes");
  93.   GUIDEMO_NotifyStartNext();
  94.   GUI_SetBkColor(GUI_GREEN); 
  95.   GUI_Clear();
  96.   /* Use banding memory device  */
  97.   GUI_GetClientRect(&rView);  
  98.   colorBack = GUI_ColorIsAvailable(GUI_RED) ? GUI_RED : GUI_BLACK;
  99.   GUI_SetBkColor(colorBack);
  100.   GUI_Clear();
  101.   t0 = GUI_GetTime();
  102.   for (i = 0; tDiff = GUI_GetTime() - t0, (tDiff < 8000) && !GUIDEMO_CheckCancel(); i++) {
  103.     DrawContext.Angle = 90 + tDiff / 50;
  104.     /* Calculate required size */
  105.     {
  106.       GUI_HMEM hMem = GUI_MEASDEV_Create();
  107.       GUI_MEASDEV_Select(hMem);
  108.       DrawContext.DoClear = 0;
  109.       _Draw(&DrawContext);
  110.       GUI_MEASDEV_GetRect(hMem, &rView);
  111.       GUI_MEASDEV_Delete(hMem);
  112.       rTemp = rView;
  113.       if (i)
  114.         GUI_MergeRect(&rView, &rView, &rPrev);
  115.       rPrev = rTemp;
  116.     }
  117.     DrawContext.DoClear = 1;
  118.     GUI_MEMDEV_Draw(&rView, _Draw, &DrawContext, 0, GUI_MEMDEV_NOTRANS);
  119.   }
  120.   GUI_SetFont(&GUI_FontComic24B_ASCII);
  121.   GUI_SetColor(GUI_WHITE);
  122.   GUI_DispStringAt("ms/Update: ", 10 , 200);
  123.   if (i) {
  124.     GUI_DispDecMin(tDiff / i);
  125.   }
  126.   GUIDEMO_Delay(1000);
  127.   GUI_Clear();
  128. }
  129. #else
  130.   void GUIDEMO_ShowMemoryDevice(void) {}
  131. #endif /* GUI_SUPPORT_MEMDEV */