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

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_Navi.c
  16. Purpose     : Navigation system demo
  17. ----------------------------------------------------------------------
  18. */
  19. #include "GUI.h"
  20. #include "WM.h"
  21. #include "GUIDEMO.H"
  22. #include "FrameWin.h"
  23. #if GUI_WINSUPPORT & GUI_SUPPORT_MEMDEV
  24. #include "Map.h"
  25. /*********************************************************************
  26. *
  27. *       Typedefs
  28. *
  29. **********************************************************************
  30. */
  31. typedef struct {
  32.   int x;
  33.   int y;
  34.   int xHere, yHere;
  35.   const GUI_BITMAP* pBitmap;
  36. } tDrawContext;
  37. /*********************************************************************
  38. *
  39. *       Static functions
  40. *
  41. **********************************************************************
  42. */
  43. /* The user defined callback routine */
  44. static void _Draw(void*p) {
  45.   tDrawContext* pPara;
  46.   GUI_CONTEXT ContextOld;
  47.   GUI_SaveContext(&ContextOld);
  48.   pPara = (tDrawContext*)p;
  49.   GUI_DrawBitmap(pPara->pBitmap, -pPara->x, -pPara->y);
  50.   GUI_SetPenSize(3);
  51.   GUI_SetDrawMode(GUI_DRAWMODE_NORMAL);
  52.   GUI_SetColor(GUI_RED);
  53.   GUI_DrawCircle(pPara->xHere, pPara->yHere, 5);
  54.   GUI_SetTextMode(GUI_TM_TRANS);
  55.   GUI_SetFont(&GUI_FontComic18B_ASCII);
  56.   GUI_DispStringAt("You are here", pPara->xHere - 20, pPara->yHere - 20);
  57.   GUI_RestoreContext(&ContextOld);
  58. }
  59. static void _ShowMovingMap(void) {
  60.   int i;
  61.   tDrawContext DrawContext = {0};
  62.   GUI_RECT r;
  63.   int t0, t, tRef;
  64.   #if GUIDEMO_LARGE
  65.     int y0 = 70;
  66.   #else
  67.     int y0 = 20;
  68.   #endif
  69.   WM_HWIN hFrameWin, hClientWin;
  70.   int XSize = LCD_GetXSize();
  71.   #if GUIDEMO_LARGE
  72.     hFrameWin  = FRAMEWIN_Create("Map to Segger Hilden", NULL, WM_CF_SHOW, 
  73.                                  10, y0, (XSize > 270 ? 260 : XSize - 20), 160);
  74.   #else
  75.     hFrameWin  = FRAMEWIN_Create("Map to Segger Hilden", NULL, WM_CF_SHOW, 
  76.                                  10, 10, (XSize > 270 ? 260 : XSize - 20), LCD_YSIZE - 20);
  77.   #endif
  78.   hClientWin = WM_CreateWindowAsChild(0, 0, 0, 0, hFrameWin, WM_CF_SHOW , 0 , 0);
  79.   FRAMEWIN_SetActive(hFrameWin, 0);
  80.   WM_SelectWindow(hClientWin);
  81.   WM_GetWindowRect(&r);
  82.   DrawContext.pBitmap = &bmMap;
  83. /* Move text */
  84.   for (i = 0, t0 = GUI_GetTime(); t = GUI_GetTime() - t0, (t < 2000) && !GUIDEMO_CheckCancel(); i++) {
  85.     DrawContext.x = 0;
  86.     DrawContext.y = 0;
  87.     DrawContext.xHere = y0 + 2 * i;
  88.     DrawContext.yHere = y0;
  89.     tRef = GUI_GetTime() + 100;
  90.     GUI_MEMDEV_Draw(&r, _Draw, &DrawContext, 0, GUI_MEMDEV_NOTRANS);
  91.     tRef -= GUI_GetTime();
  92.     GUI_Delay(tRef);
  93.   }
  94. /* Move map in x */
  95.   for (t0 = GUI_GetTime(); t = GUI_GetTime() - t0, (t < 500) && !GUIDEMO_CheckCancel();) {
  96.     DrawContext.x += 2;
  97.     tRef = GUI_GetTime() + 100;
  98.     GUI_MEMDEV_Draw(&r, _Draw, &DrawContext, 0, GUI_MEMDEV_NOTRANS);
  99.     tRef -= GUI_GetTime();
  100.     GUI_Delay(tRef);
  101.   }
  102. /* Move map in y */
  103.   for (t0 = GUI_GetTime(); t = GUI_GetTime() - t0, (t < 500) && !GUIDEMO_CheckCancel(); ) {
  104.     DrawContext.y += 2;
  105.     tRef = GUI_GetTime() + 100;
  106.     GUI_MEMDEV_Draw(&r, _Draw, &DrawContext, 0, GUI_MEMDEV_NOTRANS);
  107.     tRef -= GUI_GetTime();
  108.     GUI_Delay(tRef);
  109.   }
  110. /* Move map in x and y */
  111.   for (t0 = GUI_GetTime(); t = GUI_GetTime()- t0, (t < 500) && !GUIDEMO_CheckCancel();) {
  112.     DrawContext.x -= 2;
  113.     DrawContext.y -= 2;
  114.     tRef = GUI_GetTime() + 100;
  115.     GUI_MEMDEV_Draw(&r, _Draw, &DrawContext, 0, GUI_MEMDEV_NOTRANS);
  116.     tRef -= GUI_GetTime();
  117.     GUI_Delay(tRef);
  118.   }
  119.   WM_DeleteWindow(hFrameWin);
  120.   /*WM_DeleteWindow(hClientWin);*/
  121. }
  122. #else
  123. #define _ShowMovingMap()
  124. #endif
  125. /*********************************************************************
  126. *
  127. *       GUIDEMO_Navigation
  128. *
  129. **********************************************************************
  130. */
  131. void GUIDEMO_Navigation(void) {
  132.   GUIDEMO_ShowIntro("Navigation system",
  133.                     "Samples used in"
  134.                     "nNavigation systems");
  135.   _ShowMovingMap();
  136. }