/*********************************************************************
* Portions COPYRIGHT 2016 STMicroelectronics *
* Portions SEGGER Microcontroller GmbH & Co. KG *
* Solutions for real time microcontroller applications *
**********************************************************************
* *
* (c) 1996 - 2015 SEGGER Microcontroller GmbH & Co. KG *
* *
* Internet: www.segger.com Support: support@segger.com *
* *
**********************************************************************
** emWin V5.28 - Graphical user interface for embedded applications **
All Intellectual Property rights in the Software belongs to SEGGER.
emWin 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 the following terms:
The software has been licensed to STMicroelectronics International
N.V. a Dutch company with a Swiss branch and its headquarters in Plan-
les-Ouates, Geneva, 39 Chemin du Champ des Filles, Switzerland for the
purposes of creating libraries for ARM Cortex-M-based 32-bit microcon_
troller products commercialized by Licensee only, sublicensed and dis_
tributed under the terms and conditions of the End User License Agree_
ment supplied by STMicroelectronics International N.V.
Full source code is available at: www.segger.com
We appreciate your understanding and fairness.
----------------------------------------------------------------------
File : GUIDEMO.c
Purpose : Several GUIDEMO routines
----------------------------------------------------------------------
*/
/**
******************************************************************************
* @file GUIDEMO.c
* @author MCD Application Team
* @brief Several GUIDEMO routines
******************************************************************************
* @attention
*
*
© Copyright (c) 2017 STMicroelectronics International N.V.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted, provided that the following conditions are met:
*
* 1. Redistribution of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. Neither the name of STMicroelectronics nor the names of other
* contributors to this software may be used to endorse or promote products
* derived from this software without specific written permission.
* 4. This software, including modifications and/or derivative works of this
* software, must execute solely and exclusively on microcontroller or
* microprocessor devices manufactured by or for STMicroelectronics.
* 5. Redistribution and use of this software other than as permitted under
* this license is void and will automatically terminate your rights under
* this license.
*
* THIS SOFTWARE IS PROVIDED BY STMICROELECTRONICS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS, IMPLIED OR STATUTORY WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
* PARTICULAR PURPOSE AND NON-INFRINGEMENT OF THIRD PARTY INTELLECTUAL PROPERTY
* RIGHTS ARE DISCLAIMED TO THE FULLEST EXTENT PERMITTED BY LAW. IN NO EVENT
* SHALL STMICROELECTRONICS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
******************************************************************************
*/
#include "GUIDEMO.h"
/*********************************************************************
*
* Dialog resources
*
**********************************************************************
*/
static const GUI_WIDGET_CREATE_INFO _aFrameWinControl[] = {
{ FRAMEWIN_CreateIndirect, "Control", 0, 0, 0, CONTROL_SIZE_X, CONTROL_SIZE_Y, 0, 0 },
{ BUTTON_CreateIndirect, "Halt", GUI_ID_HALT, 2, 24, BUTTON_SIZE_X, BUTTON_SIZE_Y, 0, 0 },
{ BUTTON_CreateIndirect, "Next", GUI_ID_NEXT, 36, 24, BUTTON_SIZE_X, BUTTON_SIZE_Y, 0, 0 },
{ PROGBAR_CreateIndirect, 0, GUI_ID_PROGBAR0, 2, 11, PROGBAR_SIZE_X, PROGBAR_SIZE_Y, WM_CF_HIDE, 0 },
{ TEXT_CreateIndirect, 0, GUI_ID_TEXT0, 2, 2, TEXT_SIZE_X, TEXT_SIZE_Y, 0, 0 }
};
static const GUI_WIDGET_CREATE_INFO _aFrameWinInfo[] = {
{ FRAMEWIN_CreateIndirect, "STemWin Demo", 0, 0, 0, 0, 0, 0, 0 },
{ TEXT_CreateIndirect, "", GUI_ID_TEXT0, 3, 3, 0, 0, 0, 0 }
};
/*********************************************************************
*
* Static variables
*
**********************************************************************
*/
static GUIDEMO_CONFIG _GUIDemoConfig;
static WM_HWIN _hDialogControl;
static WM_HWIN _hDialogInfo;
static void (* _pfDrawBk)(int DrawLogo);
static int _iDemo;
static int _iDemoMinor;
static int _HaltTime;
static int _HaltTimeStart;
static int _Halt;
static int _Next;
static int _Pressed;
static U8 _DrawLogo;
/*********************************************************************
*
* Static functions
*
**********************************************************************
*/
/*********************************************************************
*
* _ClearHalt
*
* This function is called if the next button is pressed after
* the demo was halted
*/
static void _ClearHalt(void) {
_Halt = 0;
_HaltTime = 0;
_HaltTimeStart = 0;
}
/*********************************************************************
*
* _DrawBkSimple
*/
static void _DrawBkSimple(int DrawLogo) {
GUI_SetBkColor(BK_COLOR_1);
GUI_Clear();
if (DrawLogo) {
GUI_DrawBitmap(&bmSTLogo70x35, 5, 5);
}
}
#if GUIDEMO_USE_AUTO_BK
/*********************************************************************
*
* _DrawBk
*/
static void _DrawBk(int DrawLogo) {
int xSize;
int ySize;
xSize = LCD_GetXSize();
ySize = LCD_GetYSize();
GUI_DrawGradientV(0, 0, xSize, ySize, BK_COLOR_0, BK_COLOR_1);
if (DrawLogo) {
GUI_DrawBitmap(&bmSTLogo70x35, 5, 5);
}
}
/*********************************************************************
*
* _DrawBkCircle
*/
static void _DrawBkCircle(int DrawLogo) {
static GUI_MEMDEV_Handle hMemStretch;
GUI_MEMDEV_Handle hMemGradient;
GUI_MEMDEV_Handle hMemCircle;
GUI_MEMDEV_Handle hMemOld;
int CircleWidth;
int ySizeV;
int xSize;
int ySize;
int i;
U32 * pData;
xSize = LCD_GetXSize();
ySize = LCD_GetYSize();
ySizeV = LCD_GetVYSize();
if (ySizeV > ySize) {
GUI_SetBkColor(BK_COLOR_1);
GUI_ClearRect(0, 0, xSize, ySizeV);
}
if (hMemStretch == 0) {
CircleWidth = (CIRCLE_RADIUS << 1) + 1;
hMemCircle = GUI_MEMDEV_CreateFixed(0, 0, CircleWidth, CircleWidth, GUI_MEMDEV_NOTRANS, GUI_MEMDEV_APILIST_32, GUI_COLOR_CONV_8888);
hMemStretch = GUI_MEMDEV_CreateEx (0, 0, xSize, ySize, GUI_MEMDEV_NOTRANS);
hMemGradient = GUI_MEMDEV_CreateFixed(0, 0, 1, CIRCLE_RADIUS, GUI_MEMDEV_NOTRANS, GUI_MEMDEV_APILIST_32, GUI_COLOR_CONV_8888);
//
// Initialize background
//
hMemOld = GUI_MEMDEV_Select(hMemCircle);
GUI_SetBkColor(BK_COLOR_1);
GUI_Clear();
//
// Create Gradient
//
GUI_MEMDEV_Select(hMemGradient);
GUI_DrawGradientV(0, 0, 0, CIRCLE_RADIUS, BK_COLOR_0, BK_COLOR_1);
//
// Get color and draw circles
//
pData = (U32 *)GUI_MEMDEV_GetDataPtr(hMemGradient);
GUI_MEMDEV_Select(hMemCircle);
for (i = 0; i < CIRCLE_RADIUS; i++, pData++) {
GUI_SetColor(*pData);
GUI_DrawCircle(CIRCLE_RADIUS, CIRCLE_RADIUS, i);
}
//
// Stretch and display
//
GUI_MEMDEV_Select(hMemStretch);
GUI_MEMDEV_DrawPerspectiveX(hMemCircle, 0, 0, ySize, ySize, xSize, 0);
GUI_MEMDEV_Delete(hMemCircle);
GUI_MEMDEV_Delete(hMemGradient);
GUI_MEMDEV_Select(hMemOld);
}
GUI_MEMDEV_Write(hMemStretch);
if (DrawLogo) {
GUI_DrawBitmap(&bmSTLogo70x35, LOGO_DIST_BORDER, LOGO_DIST_BORDER);
}
}
#endif
/*********************************************************************
*
* _HideProgress
*/
static void _HideProgress(void) {
PROGBAR_Handle hProg;
hProg = WM_GetDialogItem(_hDialogControl, GUI_ID_PROGBAR0);
WM_HideWindow(hProg);
}
/*********************************************************************
*
* _ShowProgress
*/
static void _ShowProgress(void) {
PROGBAR_Handle hProg;
hProg = WM_GetDialogItem(_hDialogControl, GUI_ID_PROGBAR0);
WM_ShowWindow(hProg);
}
/*********************************************************************
*
* _cbBk
*/
static void _cbBk(WM_MESSAGE * pMsg) {
WM_KEY_INFO * pInfo;
switch (pMsg->MsgId) {
case WM_PAINT:
_pfDrawBk(_DrawLogo);
break;
case WM_SET_FOCUS:
pMsg->Data.v = 0;
break;
case WM_KEY:
pInfo = (WM_KEY_INFO *)pMsg->Data.p;
if (pInfo->PressedCnt) {
switch (pInfo->Key) {
case 'n':
_Next = 1;
break;
}
}
break;
default:
WM_DefaultProc(pMsg);
break;
}
}
/*********************************************************************
*
* _cbEffect
*/
static int _cbEffect(int TimeRem, void * pVoid) {
GUI_PID_STATE State;
int Pressed;
GUI_USE_PARA(TimeRem);
Pressed = *((int *)pVoid);
GUI_Exec();
GUI_PID_GetState(&State);
if (State.Pressed) {
*((int *)pVoid) = 1;
return 0;
} else {
if ((State.Pressed == 0) && (Pressed == 1)) {
*((int *)pVoid) = 0;
_Next = 1;
return 1;
}
_Next = GUIDEMO_CheckCancel();
return _Next;
}
}
/*********************************************************************
*
* _cbFrameWinControl
*/
static void _cbFrameWinControl(WM_MESSAGE * pMsg) {
WM_HWIN hItem;
int xSize;
int ySize;
int NCode;
int Id;
switch (pMsg->MsgId) {
case WM_KEY:
WM_SendMessage(WM_HBKWIN, pMsg);
break;
case WM_INIT_DIALOG:
hItem = WM_GetDialogItem(pMsg->hWin, GUI_ID_PROGBAR0);
PROGBAR_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
PROGBAR_SetFont(hItem, &GUI_FontD6x8);
hItem = WM_GetDialogItem(pMsg->hWin, GUI_ID_HALT);
BUTTON_SetFocussable(hItem, 0);
hItem = WM_GetDialogItem(pMsg->hWin, GUI_ID_NEXT);
BUTTON_SetFocussable(hItem, 0);
hItem = WM_GetDialogItem(pMsg->hWin, GUI_ID_TEXT0);
TEXT_SetText(hItem, "Intro");
TEXT_SetFont(hItem, &GUI_Font8_ASCII);
break;
case WM_PAINT:
xSize = WM_GetWindowSizeX(pMsg->hWin);
ySize = WM_GetWindowSizeY(pMsg->hWin);
GUI_DrawGradientV(0, 0, xSize - 1, ySize - 1, 0xFFFFFF, 0xDCCEC0);
break;
case WM_NOTIFY_PARENT:
Id = WM_GetId(pMsg->hWinSrc);
NCode = pMsg->Data.v;
switch (NCode) {
case WM_NOTIFICATION_CLICKED:
switch (Id) {
case GUI_ID_HALT:
if (_Halt) {
_Halt = 0;
_HaltTime = GUI_GetTime() - _HaltTimeStart;
WM_MakeModal(0);
} else {
_Halt = 1;
_HaltTimeStart = GUI_GetTime() - _HaltTime;
WM_MakeModal(pMsg->hWin);
}
break;
case GUI_ID_NEXT:
_Next = 1; // Will be set to 0 by GUIDEMO_GetNextState()
_ClearHalt(); // Clear _Halt, so the next sample demonstrates immediately
break;
}
break;
}
break;
default:
WM_DefaultProc(pMsg);
}
}
/*********************************************************************
*
* _cbFrameWinInfo
*/
static void _cbFrameWinInfo(WM_MESSAGE * pMsg) {
int xSize;
int ySize;
switch (pMsg->MsgId) {
case WM_KEY:
WM_SendMessage(WM_HBKWIN, pMsg);
break;
case WM_CREATE:
xSize = LCD_GetXSize();
WM_SetWindowPos(pMsg->hWin, xSize >> 1, 0, xSize >> 1, INFO_SIZE_Y);
break;
case WM_PAINT:
xSize = WM_GetWindowSizeX(pMsg->hWin);
ySize = WM_GetWindowSizeY(pMsg->hWin);
GUI_DrawGradientV(0, 0, xSize - 1, ySize - 1, 0xFFFFFF, 0xDCCEC0);
break;
default:
WM_DefaultProc(pMsg);
}
}
/*********************************************************************
*
* _FRAMEWIN_DrawSkinFlex
*/
static int _FRAMEWIN_DrawSkinFlex(const WIDGET_ITEM_DRAW_INFO * pDrawItemInfo) {
switch (pDrawItemInfo->Cmd) {
case WIDGET_ITEM_CREATE:
FRAMEWIN_SetTextAlign(pDrawItemInfo->hWin, GUI_TA_HCENTER | GUI_TA_VCENTER);
FRAMEWIN_SetTextColor(pDrawItemInfo->hWin, GUI_BLACK);
break;
default:
return FRAMEWIN_DrawSkinFlex(pDrawItemInfo);
}
return 0;
}
/*********************************************************************
*
* _Main
*/
static void _Main(void) {
int xSize;
int ySize;
WM_SelectWindow(WM_HBKWIN);
GUI_Clear();
#if (GUI_SUPPORT_CURSOR | GUI_SUPPORT_TOUCH)
// GUI_CURSOR_Show();
#endif
//
// Create and configure Control and Information window
//
xSize = LCD_GetXSize();
ySize = LCD_GetYSize();
_hDialogControl = GUI_CreateDialogBox(_aFrameWinControl, GUI_COUNTOF(_aFrameWinControl), &_cbFrameWinControl, WM_HBKWIN, xSize - CONTROL_SIZE_X, ySize - CONTROL_SIZE_Y);
_hDialogInfo = GUI_CreateDialogBox(_aFrameWinInfo, GUI_COUNTOF(_aFrameWinInfo), &_cbFrameWinInfo, WM_HBKWIN, (xSize >> 1) - 1, 0);
WM_HideWindow(_hDialogInfo);
//
// Show Intro
//
WM_InvalidateWindow(_hDialogControl);
WM_DisableMemdev(WM_HBKWIN);
GUI_Exec();
WM_EnableMemdev(WM_HBKWIN);
GUI_SetBkColor(GUI_RED);
GUI_Clear();
GUI_SetBkColor(GUI_GREEN);
GUI_Clear();
GUI_SetBkColor(GUI_BLUE);
GUI_Clear();
GUIDEMO_Intro();
//
// Run the demos
//
for (_iDemo = 0; _GUIDemoConfig.apFunc[_iDemo]; _iDemo++) {
_ClearHalt();
GUIDEMO_UpdateControlText();
(*_GUIDemoConfig.apFunc[_iDemo])();
_iDemoMinor = 0;
_Pressed = 0;
}
_iDemo = 0;
//
// Cleanup
//
WM_DeleteWindow(_hDialogControl);
WM_DeleteWindow(_hDialogInfo);
#if (GUI_SUPPORT_CURSOR | GUI_SUPPORT_TOUCH)
GUI_CURSOR_Hide();
#endif
}
/*********************************************************************
*
* Public functions
*
**********************************************************************
*/
/*********************************************************************
*
* GUIDEMO_SetDrawLogo
*/
void GUIDEMO_SetDrawLogo(U8 OnOff) {
_DrawLogo = OnOff ? 1 : 0;
}
/*********************************************************************
*
* GUIDEMO_AddIntToString
*/
void GUIDEMO_AddIntToString(char * pText, unsigned int Number) {
int TextLen;
int LenNum;
int i;
TextLen = 0;
while (*(pText + TextLen)) {
TextLen++;
}
i = 1;
LenNum = 1;
while ((Number / i) >= 10) {
i *= 10;
LenNum++;
}
*(pText + TextLen + LenNum) = '\0';
while (LenNum) {
*(pText + TextLen + LenNum - 1) = '0' + Number % 10;
Number /= 10;
LenNum--;
}
}
/*********************************************************************
*
* GUIDEMO_AddStringToString
*/
void GUIDEMO_AddStringToString(char * pText, const char * acAdd) {
int i;
int j;
i = 0;
j = 0;
while (*(pText + i)) {
i++;
}
while (*(acAdd + j)) {
*(pText + i) = *(acAdd + j);
i++;
j++;
}
*(pText + i) = '\0';
}
/*********************************************************************
*
* GUIDEMO_CheckCancel
*/
int GUIDEMO_CheckCancel(void) {
//
// Do not return until the button is released
//
while (_Halt == 1) {
GUI_Delay(10);
}
//
// Check Next Button
//
if (_Next == 1) {
_Next = 0;
return 1;
}
return 0;
}
/*********************************************************************
*
* GUIDEMO_ClearText
*
*/
void GUIDEMO_ClearText(char * pText) {
*pText = 0;
}
/*********************************************************************
*
* GUIDEMO_Delay
*
* This function has to be called if the current step of the sample
* is the last one and consists of a single frame
*/
void GUIDEMO_Delay(int TimeDelay) {
PROGBAR_Handle hProg;
int NextState;
U32 TimeStart;
U32 TimeDiff;
hProg = WM_GetDialogItem(_hDialogControl, GUI_ID_PROGBAR0);
if (TimeDelay > SHOW_PROGBAR_AT) {
_ShowProgress();
}
PROGBAR_SetValue(hProg, 0);
PROGBAR_SetMinMax(hProg, 0, TimeDelay);
TimeStart = GUI_GetTime();
do {
TimeDiff = GUIDEMO_GetTime() - TimeStart;
if (TimeDelay > SHOW_PROGBAR_AT) {
PROGBAR_SetValue(hProg, TimeDiff);
}
GUI_Delay(5);
NextState = GUIDEMO_CheckCancel();
} while (TimeDiff < (U32)TimeDelay && !NextState);
if (TimeDelay > SHOW_PROGBAR_AT) {
_HideProgress();
}
GUI_Exec();
}
/*********************************************************************
*
* GUIDEMO_DrawBk
*/
void GUIDEMO_DrawBk(int DrawLogo) {
_pfDrawBk(DrawLogo);
}
/*********************************************************************
*
* GUIDEMO_GetConfFlag
*/
U16 GUIDEMO_GetConfFlag(U16 Flag) {
return (_GUIDemoConfig.Flags & Flag) ? 1 : 0;
}
/*********************************************************************
*
* GUIDEMO_GetTime
*/
int GUIDEMO_GetTime(void) {
return _Halt ? _HaltTimeStart : GUI_GetTime() - _HaltTime;
}
/*********************************************************************
*
* GUIDEMO_HideControlWin
*/
void GUIDEMO_HideControlWin(void) {
WM_HideWindow(_hDialogControl);
WM_ValidateWindow(WM_HBKWIN);
}
/*********************************************************************
*
* GUIDEMO_HideInfoWin
*/
void GUIDEMO_HideInfoWin(void) {
WM_HideWindow(_hDialogInfo);
WM_ValidateWindow(WM_HBKWIN);
}
/*********************************************************************
*
* GUIDEMO_NotifyStartNext
*
* Use this function if the next step of the current sample will be
* shown immediately
*/
void GUIDEMO_NotifyStartNext(void) {
_iDemoMinor++;
_ClearHalt();
GUIDEMO_UpdateControlText();
}
/*********************************************************************
*
* GUIDEMO_ShowControlWin
*/
void GUIDEMO_ShowControlWin(void) {
WM_ShowWindow(_hDialogControl);
GUI_Exec();
}
/*********************************************************************
*
* GUIDEMO_ShowInfo
*/
void GUIDEMO_ShowInfo(const char * acInfo) {
TEXT_Handle hText;
if (WM_IsVisible(_hDialogInfo)) {
hText = WM_GetDialogItem(_hDialogInfo, GUI_ID_TEXT0);
TEXT_SetText(hText, acInfo);
}
}
/*********************************************************************
*
* GUIDEMO_ShowInfoWin
*/
void GUIDEMO_ShowInfoWin(void) {
WM_ShowWindow(_hDialogInfo);
}
/*********************************************************************
*
* GUIDEMO_ShowIntro
*
* Function description
* Shows the GUIDEMO introduction screen which display the title of
* the sample and a short description.
*/
void GUIDEMO_ShowIntro(const char * acTitle, const char * acDescription) {
int FontDistY;
int TimeWait;
int xCenter;
int yCenter;
int xSize;
int ySize;
int i;
xSize = LCD_GetXSize();
ySize = LCD_GetYSize();
xCenter = xSize >> 1;
yCenter = ySize >> 1;
GUIDEMO_HideInfoWin();
GUIDEMO_ShowControlWin();
GUI_Exec();
GUIDEMO_DrawBk(1);
GUI_SetColor(GUI_WHITE);
//
// Title
//
GUI_SetTextMode(GUI_TM_TRANS);
GUI_SetFont(&GUI_FontRounded22);
GUI_DispStringHCenterAt(acTitle, xCenter, 60);
//
// Description
//
GUI_SetFont(&GUI_Font16_ASCII);
FontDistY = GUI_GetFontDistY();
GUI_DispStringHCenterAt(acDescription, xCenter, yCenter - FontDistY + 10);
//
// Determine time to wait
//
i = 0;
while (acDescription[i]) {
i++;
}
TimeWait = i * CHAR_READING_TIME;
GUIDEMO_Wait(TimeWait);
}
/*********************************************************************
*
* GUIDEMO_UpdateControlText
*/
void GUIDEMO_UpdateControlText(void) {
TEXT_Handle hText;
char acText[20] = { 0 };
hText = WM_GetDialogItem(_hDialogControl, GUI_ID_TEXT0);
GUIDEMO_AddStringToString(acText, "Demo ");
GUIDEMO_AddIntToString (acText, _iDemo + 1);
GUIDEMO_AddStringToString(acText, ".");
GUIDEMO_AddIntToString (acText, _iDemoMinor);
GUIDEMO_AddStringToString(acText, "/");
GUIDEMO_AddIntToString (acText, _GUIDemoConfig.NumDemos - 1);
TEXT_SetText (hText, acText);
}
/*********************************************************************
*
* GUIDEMO_Wait
*
* This function has to be called if the current step is a static
* frame and another step will follow
*/
void GUIDEMO_Wait(int TimeWait) {
GUIDEMO_Delay(TimeWait);
GUIDEMO_NotifyStartNext();
}
/*********************************************************************
*
* GUIDEMO_Main
*/
void GUIDEMO_Main(void) {
FRAMEWIN_SKINFLEX_PROPS Framewin_Props;
#if GUIDEMO_USE_AUTO_BK
int NumFreeBytes;
int BitsPerPixel;
#endif
GUI_MEMDEV_SetAnimationCallback(_cbEffect, (void *)&_Pressed);
WM_SetCallback(WM_HBKWIN, _cbBk);
BUTTON_SetReactOnLevel();
FRAMEWIN_GetSkinFlexProps(&Framewin_Props, FRAMEWIN_SKINFLEX_PI_ACTIVE);
Framewin_Props.Radius = 0;
FRAMEWIN_SetSkinFlexProps(&Framewin_Props, FRAMEWIN_SKINFLEX_PI_ACTIVE);
FRAMEWIN_GetSkinFlexProps(&Framewin_Props, FRAMEWIN_SKINFLEX_PI_INACTIVE);
Framewin_Props.Radius = 0;
FRAMEWIN_SetSkinFlexProps(&Framewin_Props, FRAMEWIN_SKINFLEX_PI_INACTIVE);
FRAMEWIN_SetDefaultSkin (_FRAMEWIN_DrawSkinFlex);
PROGBAR_SetDefaultSkin (PROGBAR_SKIN_FLEX);
BUTTON_SetDefaultSkin (BUTTON_SKIN_FLEX);
SCROLLBAR_SetDefaultSkin (SCROLLBAR_SKIN_FLEX);
SLIDER_SetDefaultSkin (SLIDER_SKIN_FLEX);
HEADER_SetDefaultSkin (HEADER_SKIN_FLEX);
GUI_SetTextMode (GUI_TM_TRANS);
GUIDEMO_Config(&_GUIDemoConfig);
#if GUIDEMO_USE_VNC
if (GUIDEMO_GetConfFlag(GUIDEMO_CF_USE_VNC)) {
_GUIDemoConfig.pGUI_VNC_X_StartServer(0, 0);
}
#endif
#if GUIDEMO_USE_AUTO_BK
//
// Determine if HW has enough memory to draw the gradient circle as background
//
BitsPerPixel = LCD_GetBitsPerPixel();
if ((BitsPerPixel >= 16) && GUIDEMO_GetConfFlag(GUIDEMO_CF_USE_AUTO_BK)) {
NumFreeBytes = GUI_ALLOC_GetNumFreeBytes();
if (NumFreeBytes > NUMBYTES_NEEDED) {
_pfDrawBk = _DrawBkCircle;
} else {
_pfDrawBk = _DrawBk;
}
} else
#endif
{
_pfDrawBk = _DrawBkSimple;
}
GUIDEMO_SetDrawLogo(1);
while (1) {
_Main();
}
}
/*************************** End of file ****************************/