📄 memdev_banding.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 : MEMDEV_Banding.c
Purpose : Example demonstrating the use of banding memory devices
----------------------------------------------------------------------
*/
#include "GUI.h"
/*******************************************************************
*
* defines
*
********************************************************************
*/
#define USE_BANDING_MEMDEV (1) /* Set to 0 for drawing without banding memory device */
#define SIZE_OF_ARRAY(Array) (sizeof(Array) / sizeof(Array[0]))
/*******************************************************************
*
* static variables
*
********************************************************************
*/
static const GUI_POINT aPoints[] = {
{-50, 0},
{-10, 10},
{ 0, 50},
{ 10, 10},
{ 50, 0},
{ 10,-10},
{ 0,-50},
{-10,-10}
};
typedef struct {
int XPos_Poly, YPos_Poly;
int XPos_Text, YPos_Text;
GUI_POINT aPointsDest[8];
} tDrawItContext;
/*******************************************************************
*
* static code
*
********************************************************************
*/
/*******************************************************************
*
* _DrawIt
*/
static void _DrawIt(void * pData) {
tDrawItContext * pDrawItContext = (tDrawItContext *)pData;
GUI_Clear();
GUI_SetFont(&GUI_Font8x8);
GUI_SetTextMode(GUI_TM_TRANS);
/* draw background */
GUI_SetColor(GUI_GREEN);
GUI_FillRect(pDrawItContext->XPos_Text,
pDrawItContext->YPos_Text - 25,
pDrawItContext->XPos_Text + 100,
pDrawItContext->YPos_Text - 5);
/* draw polygon */
GUI_SetColor(GUI_BLUE);
GUI_FillPolygon(pDrawItContext->aPointsDest, SIZE_OF_ARRAY(aPoints), 160, 120);
/* draw foreground */
GUI_SetColor(GUI_RED);
GUI_FillRect(220 - pDrawItContext->XPos_Text,
pDrawItContext->YPos_Text + 5,
220 - pDrawItContext->XPos_Text + 100,
pDrawItContext->YPos_Text + 25);
}
/*******************************************************************
*
* _DemoBandingMemdev
*/
static void _DemoBandingMemdev(void) {
tDrawItContext DrawItContext;
int i, swap=0;
GUI_SetBkColor(GUI_BLACK);
GUI_Clear();
GUI_SetColor(GUI_WHITE);
GUI_SetFont(&GUI_Font24_ASCII);
GUI_DispStringHCenterAt("MEMDEV_Banding - Sample", 160, 5);
GUI_SetFont(&GUI_Font8x9);
GUI_DispStringHCenterAt("Banding memory device\nwithout flickering", 160, 40);
DrawItContext.XPos_Poly = 160;
DrawItContext.YPos_Poly = 120;
DrawItContext.YPos_Text = 116;
while (1) {
swap = ~swap;
for (i = 0; i < 220; i++) {
float angle = i * 3.1415926 / 55;
DrawItContext.XPos_Text = (swap) ? i : 220 - i;
/* Rotate the polygon */
GUI_RotatePolygon(DrawItContext.aPointsDest, aPoints,
SIZE_OF_ARRAY(aPoints), angle);
#if USE_BANDING_MEMDEV
{
GUI_RECT Rect = {0, 70, 320,170};
/* Use banding memory device for drawing */
GUI_MEMDEV_Draw(&Rect, &_DrawIt, &DrawItContext, 0, 0);
}
#else
/* Simple drawing without using memory devices */
_DrawIt((void *)&DrawItContext);
#endif
#ifdef WIN32
GUI_Delay(20); /* Use a short delay only in the simulation */
#endif
}
}
}
/*******************************************************************
*
* MainTask
*
* Demonstrates banding memory devices
*
********************************************************************
*/
void MainTask(void) {
GUI_Init();
_DemoBandingMemdev();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -