📄 guidemo.c
字号:
/*********************************************************************************************************** uC/GUI* Universal graphic software for embedded applications** (c) Copyright 2002, Micrium Inc., Weston, FL* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH** 礐/GUI is protected by international copyright laws. Knowledge of the* source code may not be used to write a similar product. This file may* only be used in accordance with a license and should not be redistributed* in any way. We appreciate your understanding and fairness.*----------------------------------------------------------------------File : GUIDEMO.cPurpose : Several GUIDEMO routines----------------------------------------------------------------------*/#include <stddef.h>#include "GUI.h"#include "Progbar.h"#include "LISTBOX.h"#include "FrameWin.h"#include "BUTTON.H"#include "GUIDEMO.H"/*********************************************************************** Static variables************************************************************************/#if GUI_WINSUPPORT static BUTTON_Handle _ahButton[2]; static FRAMEWIN_Handle _ahFrameWin[2]; static FRAMEWIN_Handle _ahInfoWin[2]; static int _FrameWinPosX[2], _FrameWinPosY[2]; static int _FrameWinSizeX[2], _FrameWinSizeY[2]; static int _ButtonSizeX, _ButtonSizeY;#endifstatic int _iTest, _iTestMinor;static char _CmdNext;static const char* _sInfo;static const char* _sExplain;#define countof(Obj) (sizeof(Obj)/sizeof(Obj[0]))/*********************************************************************** Routine table*********************************************************************** The routines to be called are listed here. The advantage to calling directly is that we can execute some code before and after.*/typedef void fVoidVoid(void);static fVoidVoid * _apfTest[] = { GUIDEMO_HardwareInfo, GUIDEMO_Speed, #if GUI_SUPPORT_MEMDEV GUIDEMO_Graph, #endif GUIDEMO_Bitmap, GUIDEMO_ShowInternationalFonts, GUIDEMO_Dialog, GUIDEMO_ShowColorBar, GUIDEMO_ShowColorList, GUIDEMO_DemoLUT, GUIDEMO_DemoPolygon, GUIDEMO_Circle, GUIDEMO_ShowMemoryDevice, GUIDEMO_Automotive, GUIDEMO_Navigation, #if GUI_WINSUPPORT GUIDEMO_DemoProgBar, GUIDEMO_DemoFrameWin, #if GUI_SUPPORT_TOUCH GUIDEMO_Touch, #endif #endif 0 };/*********************************************************************** Static routines************************************************************************/static void _UpdateCmdWin(void) { #if GUI_WINSUPPORT && GUIDEMO_LARGE /* Update info in command window */ WM_HWIN hWin; GUI_CONTEXT ContextOld; GUI_SaveContext(&ContextOld); hWin = WM_SelectWindow(_ahInfoWin[1]); GUI_SetDefault(); GUI_SetBkColor(GUI_GRAY); GUI_Clear(); GUI_DispStringAt("Demo ", 0, 0); GUI_DispDecMin(_iTest + 1); GUI_DispString("."); GUI_DispDecMin(_iTestMinor); GUI_DispString("/"); GUI_DispDecMin(countof(_apfTest)); WM_SelectWindow(hWin); GUI_RestoreContext(&ContextOld); #endif}static void _UpdateInfoWin(void) { #if GUI_WINSUPPORT && GUIDEMO_LARGE GUI_RECT rClient; WM_HWIN hWin; GUI_CONTEXT ContextOld; GUI_SaveContext(&ContextOld); /* Update info window */ WM_ShowWindow(_ahInfoWin[0]); WM_ShowWindow(_ahFrameWin[0]); hWin = WM_SelectWindow(_ahInfoWin[0]); GUI_GetClientRect(&rClient); GUI_SetBkColor(GUI_WHITE); GUI_Clear(); GUI_SetColor(GUI_BLACK); GUI_SetFont(&GUI_Font13_1); GUI_SetTextAlign(GUI_TA_HCENTER); GUI_DispStringHCenterAt(_sInfo, (rClient.x1 - rClient.x0) / 2, 0); GUI_SetTextAlign(GUI_TA_LEFT); GUI_SetFont(&GUI_Font8_ASCII); GUI_DispStringAt(_sExplain, 0, 20); WM_SelectWindow(hWin); GUI_RestoreContext(&ContextOld); #endif}/*********************************************************************** Exported routines************************************************************************/int GUIDEMO_Delay(int t) { int r = 0; #if GUI_WINSUPPORT int tRem, tEnd = GUI_GetTime() + t; PROGBAR_Handle hProg; WM_SetForegroundWindow(_ahButton[0]); hProg = (t >100) ? PROGBAR_Create(_FrameWinPosX[1] + 10, _FrameWinPosY[1] + 25, _FrameWinSizeX[1] - 20, 7, WM_CF_SHOW|WM_CF_STAYONTOP) : 0; #if GUI_SUPPORT_MEMDEV PROGBAR_EnableMemdev(hProg); #endif PROGBAR_SetMinMax(hProg, 0, t); for (; tRem = tEnd - GUI_GetTime(), (tRem > 0) && !GUIDEMO_CheckCancel();) { PROGBAR_SetValue(hProg, t - tRem); WM_ExecIdle(); GUI_Delay(10); } PROGBAR_Delete(hProg); _UpdateCmdWin(); WM_ExecIdle(); #else GUI_Delay(t); #endif return r;}void GUIDEMO_Wait(void) { GUIDEMO_Delay(4000); GUIDEMO_NotifyStartNext();}int GUIDEMO_CheckCancel(void) { int c = GUI_GetKey(); #if GUI_WINSUPPORT WM_ExecIdle(); #endif if ((c == 'n') || (c=='N')) _CmdNext =1; if ((c == 's') || (c=='S')) { GUI_Delay(500); do { GUI_Delay(10); #if GUI_WINSUPPORT WM_ExecIdle(); #endif c = GUI_GetKey(); } while (!c); } return _CmdNext;}void GUIDEMO_ShowInfo(const char* s) { _sExplain = s; _UpdateInfoWin();}void GUIDEMO_HideInfoWin(void) { #if GUI_WINSUPPORT WM_HideWindow(_ahFrameWin[0]); #endif}void GUIDEMO_NotifyStartNext(void) { _CmdNext = 0; _UpdateCmdWin(); _iTestMinor++;}int GUIDEMO_WaitKey(void) { int r = 0; int tMax = GUI_GetTime() + 4000; int tDiff; #if GUI_WINSUPPORT PROGBAR_Handle hProg = PROGBAR_Create(LCD_GetXSize() - 70, LCD_GetYSize() - 40, 80, 5, WM_CF_SHOW); #endif while (tDiff = tMax-GUI_GetTime(), (tDiff > 0) && !GUIDEMO_CheckCancel()) { if ((r = GUI_GetKey()) != 0) break; } #if GUI_WINSUPPORT PROGBAR_Delete(hProg); WM_ExecIdle(); #endif return r;}void GUIDEMO_ShowIntro(const char * s, const char * sExp) { GUI_CONTEXT ContextOld; GUI_SaveContext(&ContextOld); _sInfo = s; _sExplain = sExp; GUI_SetDefault(); GUIDEMO_HideInfoWin(); GUI_SetBkColor(GUI_BLUE); GUI_SetColor(GUI_WHITE); GUI_Clear(); GUI_SetFont(&GUI_FontComic18B_ASCII); GUI_DispStringHCenterAt(s, LCD_GET_XSIZE() / 2, LCD_GET_YSIZE() / 3 - 10); if (_sExplain) { GUI_SetFont(&GUI_Font8_ASCII); GUI_DispStringHCenterAt(_sExplain, LCD_GET_XSIZE() / 2, LCD_GET_YSIZE() / 2 - 10); } GUIDEMO_Delay(_sExplain ? 2000 : 4000);#if GUI_WINSUPPORT _UpdateInfoWin(); _UpdateCmdWin();#endif GUI_RestoreContext(&ContextOld); #if GUI_WINSUPPORT WM_ExecIdle(); #endif GUIDEMO_NotifyStartNext(); GUI_SetBkColor(GUI_RED); GUI_Clear();}/*********************************************************************** GUIDEMO_main(): Complete Demo************************************************************************/#if GUIDEMO_LARGEvoid GUIDEMO_main(void) { #if GUI_WINSUPPORT int i; #endif GUI_Clear(); #if GUI_WINSUPPORT WM_SetCreateFlags(WM_CF_MEMDEV); /* Automatically use memory devices on all windows */ /* Calculate position and size of FrameWin[1] */ _FrameWinSizeX[1] = 80; _FrameWinSizeY[1] = 60; _FrameWinPosX[1] = LCD_GetXSize() - _FrameWinSizeX[1]; _FrameWinPosY[1] = LCD_GetYSize() - _FrameWinSizeY[1]; _ButtonSizeX = (_FrameWinSizeX[1] - 20) / 2; _ButtonSizeY = 20; /* Create the control window incl. buttons */ _ahFrameWin[1] = FRAMEWIN_Create("Control", NULL, WM_CF_SHOW | WM_CF_STAYONTOP, _FrameWinPosX[1], _FrameWinPosY[1], _FrameWinSizeX[1], _FrameWinSizeY[1]); _ahInfoWin[1] = WM_CreateWindowAsChild(0, 0, 0, 0, _ahFrameWin[1], WM_CF_SHOW | WM_CF_STAYONTOP, 0, 0); _ahButton[0] = BUTTON_CreateAsChild(_FrameWinSizeX[1] / 20, + 20, _ButtonSizeX, _ButtonSizeY, _ahFrameWin[1], 'H' , WM_CF_SHOW | WM_CF_STAYONTOP | WM_CF_MEMDEV); _ahButton[1] = BUTTON_CreateAsChild(_FrameWinSizeX[1] / 2, + 20, _ButtonSizeX, _ButtonSizeY, _ahFrameWin[1], 'N' , WM_CF_SHOW | WM_CF_STAYONTOP | WM_CF_MEMDEV); BUTTON_SetText(_ahButton[0], "Stop"); BUTTON_SetText(_ahButton[1], "Next"); _UpdateCmdWin(); WM_ExecIdle(); #endif /* Show Intro */ GUIDEMO_Intro(); #if GUI_WINSUPPORT /* Calculate position and size of FrameWin[0] */ _FrameWinSizeX[0] = LCD_GetXSize() / 2; _FrameWinSizeY[0] = 65; _FrameWinPosX[0] = LCD_GetXSize() - _FrameWinSizeX[0]; _FrameWinPosY[0] = 0; /* Create info window and run the individual demos */ _ahFrameWin[0] = FRAMEWIN_Create("礐/GUI Demo", NULL, WM_CF_STAYONTOP, _FrameWinPosX[0], _FrameWinPosY[0], _FrameWinSizeX[0], _FrameWinSizeY[0]); _ahInfoWin[0] = WM_CreateWindowAsChild(0, 0, 0, 0, _ahFrameWin[0], WM_CF_STAYONTOP, 0, 0); WM_ExecIdle(); #endif /* Run the individual demos ! */ for (_iTest = 0; _apfTest[_iTest]; _iTest++) { GUI_CONTEXT ContextOld; GUI_SaveContext(&ContextOld); _iTestMinor = 0; _UpdateCmdWin(); (*_apfTest[_iTest])(); _CmdNext = 0; GUI_RestoreContext(&ContextOld); } /* Cleanup */ #if GUI_WINSUPPORT for (i = 0; i < countof(_ahFrameWin); i++) { WM_DeleteWindow(_ahFrameWin[i]); } for (i = 0; i < countof(_ahInfoWin); i++) { WM_DeleteWindow(_ahInfoWin[i]); } #endif}#else /* GUIDEMO_LARGE */void GUIDEMO_main(void) { #if GUI_WINSUPPORT int i; #endif #if GUI_WINSUPPORT WM_SetCreateFlags(WM_CF_MEMDEV); /* Automatically use memory devices on all windows */ _ButtonSizeX = 27; _ButtonSizeY = 14; _ahButton[0] = BUTTON_Create(LCD_GetXSize() - _ButtonSizeX * 2 - 5, LCD_GetYSize() - _ButtonSizeY - 3, _ButtonSizeX, _ButtonSizeY, 'H' , WM_CF_SHOW | WM_CF_STAYONTOP | WM_CF_MEMDEV); _ahButton[1] = BUTTON_Create(LCD_GetXSize() - _ButtonSizeX - 3, LCD_GetYSize() - _ButtonSizeY - 3, _ButtonSizeX, _ButtonSizeY, 'N' , WM_CF_SHOW | WM_CF_STAYONTOP | WM_CF_MEMDEV); BUTTON_SetFont(_ahButton[0], &GUI_Font8_ASCII); BUTTON_SetFont(_ahButton[1], &GUI_Font8_ASCII); BUTTON_SetText(_ahButton[0], "Stop"); BUTTON_SetText(_ahButton[1], "Next"); _UpdateCmdWin(); WM_ExecIdle(); #endif /* Show Intro */ GUIDEMO_Intro(); /* Run the individual demos ! */ for (_iTest = 0; _apfTest[_iTest]; _iTest++) { GUI_CONTEXT ContextOld; GUI_SaveContext(&ContextOld); _iTestMinor = 0; _UpdateCmdWin(); (*_apfTest[_iTest])(); _CmdNext = 0; GUI_RestoreContext(&ContextOld); } /* Cleanup */ #if GUI_WINSUPPORT for (i = 0; i < countof(_ahButton); i++) { BUTTON_Delete(_ahButton[i]); } #endif}#endif /* GUIDEMO_LARGE */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -