158 lines
4.4 KiB
C
158 lines
4.4 KiB
C
/*
|
|
*********************************************************************************************************
|
|
* uC/GUI
|
|
* Universal graphic software for embedded applications
|
|
*
|
|
* (c) Copyright 2002, Micrium Inc., Weston, FL
|
|
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
|
|
*
|
|
* µC/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_MemDevB.c
|
|
Purpose : Memory device demo
|
|
----------------------------------------------------------------------
|
|
*/
|
|
|
|
#include "GUI.h"
|
|
#include "GUIDEMO.h"
|
|
#if GUI_WINSUPPORT
|
|
#include "WM.h"
|
|
#endif
|
|
#include "stdio.h"
|
|
|
|
#if GUI_SUPPORT_MEMDEV
|
|
|
|
/*********************************************************************
|
|
*
|
|
* Static data
|
|
*
|
|
**********************************************************************
|
|
*/
|
|
|
|
static const GUI_POINT _aArrow[] = {
|
|
{ 0, 0 +85},
|
|
{-40, -35 +85},
|
|
{-10, -25 +85},
|
|
{-10, -85 +85},
|
|
{ 10, -85 +85},
|
|
{ 10, -25 +85},
|
|
{ 40, -35 +85}
|
|
};
|
|
|
|
/* Define the callback structure. The structure should contain all the data
|
|
required by the callback drawing funtion
|
|
*/
|
|
typedef struct {
|
|
int Angle;
|
|
int DoClear;
|
|
GUI_COLOR BkColor;
|
|
} tDrawContext;
|
|
|
|
/*********************************************************************
|
|
*
|
|
* Static functions
|
|
*
|
|
**********************************************************************
|
|
*/
|
|
|
|
/* The user defined callback routine */
|
|
static void _Draw(void * p) {
|
|
int XSize = LCD_GetXSize();
|
|
int YSize = LCD_GetYSize();
|
|
tDrawContext * pContext = (tDrawContext *)p;
|
|
int i = pContext->Angle;
|
|
static int iLast = -1;
|
|
static GUI_POINT aPoint[7];
|
|
if (pContext->DoClear) {
|
|
GUI_SetBkColor(pContext->BkColor);
|
|
GUI_Clear();
|
|
}
|
|
GUI_SetFont(&GUI_FontD24x32);
|
|
GUI_SetTextMode(GUI_TM_TRANS);
|
|
GUI_SetColor(GUI_GRAY);
|
|
GUI_SetFont(&GUI_FontComic18B_ASCII);
|
|
GUI_DispStringHCenterAt("Below arrow", XSize / 2, YSize / 2 - 20);
|
|
if (iLast != i) {
|
|
float Angle = 0.02 * (float)i;
|
|
iLast = i;
|
|
GUI_RotatePolygon(aPoint, _aArrow, 7, Angle);
|
|
}
|
|
GUI_SetColor(GUI_WHITE);
|
|
GUI_FillPolygon(&aPoint[0], 7, XSize / 2, YSize / 2 + 30);
|
|
GUI_SetTextMode(GUI_TM_TRANS);
|
|
GUI_SetColor(GUI_DARKGRAY);
|
|
GUI_SetFont(&GUI_FontComic18B_ASCII);
|
|
GUI_DispStringHCenterAt("Above arrow", XSize / 2, YSize / 2);
|
|
}
|
|
|
|
/*********************************************************************
|
|
*
|
|
* GUIDEMO_ShowMemoryDevice
|
|
*
|
|
**********************************************************************
|
|
*/
|
|
|
|
void GUIDEMO_ShowMemoryDevice(void) {
|
|
int i;
|
|
U32 tDiff, t0;
|
|
tDrawContext DrawContext;
|
|
GUI_RECT rView, rPrev, rTemp;
|
|
GUIDEMO_ShowIntro("Memory devices",
|
|
"\nFor flicker free animation"
|
|
"\nand other purposes");
|
|
GUIDEMO_NotifyStartNext();
|
|
GUI_SetBkColor(GUI_GREEN);
|
|
GUI_Clear();
|
|
/* Use banding memory device */
|
|
GUI_GetClientRect(&rView);
|
|
DrawContext.BkColor = GUI_ColorIsAvailable(GUI_RED) ? GUI_RED : GUI_BLACK;
|
|
GUI_SetBkColor(DrawContext.BkColor);
|
|
GUI_Clear();
|
|
t0 = GUI_GetTime();
|
|
for (i = 0; tDiff = GUI_GetTime() - t0, (tDiff < 8000) && !GUIDEMO_CheckCancel(); i++) {
|
|
U32 t = GUI_GetTime();
|
|
DrawContext.Angle = 90 + tDiff / 50;
|
|
/* Calculate required size */
|
|
{
|
|
GUI_HMEM hMem = GUI_MEASDEV_Create();
|
|
GUI_MEASDEV_Select(hMem);
|
|
DrawContext.DoClear = 0;
|
|
_Draw(&DrawContext);
|
|
GUI_MEASDEV_GetRect(hMem, &rView);
|
|
GUI_MEASDEV_Delete(hMem);
|
|
rTemp = rView;
|
|
if (i)
|
|
GUI_MergeRect(&rView, &rView, &rPrev);
|
|
rPrev = rTemp;
|
|
}
|
|
DrawContext.DoClear = 1;
|
|
GUI_MEMDEV_Draw(&rView, _Draw, &DrawContext, 0, GUI_MEMDEV_NOTRANS);
|
|
t = (GUI_GetTime() - t);
|
|
if (t < 20) {
|
|
GUI_Delay(20 -t);
|
|
}
|
|
}
|
|
GUI_SetFont(&GUI_FontComic24B_ASCII);
|
|
GUI_SetColor(GUI_WHITE);
|
|
GUI_SetBkColor(DrawContext.BkColor);
|
|
GUI_DispStringAt("ms/Update: ", 10 , 200);
|
|
if (i) {
|
|
GUI_DispDecMin(tDiff / i);
|
|
}
|
|
GUIDEMO_Delay(1000);
|
|
GUI_Clear();
|
|
}
|
|
|
|
#else
|
|
|
|
void GUIDEMO_ShowMemoryDevice(void) {}
|
|
|
|
#endif /* GUI_SUPPORT_MEMDEV */
|
|
|
|
|
|
|