/********************************************************************* * * _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_RELEASED: 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); } }
static void _DrawBk(int DrawLogo) { int xSize, ySize; xSize = LCD_GetXSize(); ySize = LCD_GetYSize(); GUI_DrawGradientV(0, 0, xSize, ySize, BK_COLOR_0, BK_COLOR_1); if (DrawLogo) { GUI_DrawBitmap(&bmSeggerLogo70x35, 5, 5); } }
/********************************************************************* * * _DemoVScreen */ static void _DemoVScreen(void) { GUI_RECT Rect; unsigned j; int xSize; int ySize; int n; int aDelay[] = { 20, 5 }; xSize = LCD_GetXSize(); ySize = LCD_GetYSize(); GUI_SetFont(&GUI_FontComic24B_ASCII); GUI_SetTextMode(GUI_TM_TRANS); Rect.x0 = 0; Rect.y0 = 0; Rect.x1 = xSize - 1; Rect.y1 = ySize - 1; GUI_SetColor(GUI_WHITE); GUI_DispStringInRect("Default screen", &Rect, GUI_TA_HCENTER | GUI_TA_VCENTER); GUI_Delay(250); Rect.y0 += ySize; Rect.y1 += ySize; GUI_DrawGradientV(Rect.x0, Rect.y0, Rect.x1, Rect.y1, 0xFFFFFF, 0x000000); Rect.y1 -= ySize / 3; GUI_SetColor(GUI_DARKGREEN); GUI_DispStringInRect("Here is the virtual screen", &Rect, GUI_TA_HCENTER | GUI_TA_VCENTER); n = ySize / 5; for (j = 0; j < GUI_COUNTOF(aDelay); j++) { if (_Loop(0, 5, n, aDelay[j]) == 1) { return; } GUI_SetOrg(0, ySize); GUI_Delay(250); if (_Loop(ySize, -5, n, aDelay[j]) == 1) { return; } GUI_SetOrg(0, 0); GUI_Delay(250); if (GUIDEMO_CheckCancel()) { return; } } for (j = 0; j < 5; j++) { GUI_SetOrg(0, ySize); GUI_Delay(200); GUI_SetOrg(0, 0); GUI_Delay(200); if (GUIDEMO_CheckCancel()) { return; } } GUIDEMO_Delay(1000); }
/********************************************************************* * * _cbBkWin */ static void _cbBkWin(WM_MESSAGE * pMsg) { const WM_KEY_INFO * pKeyInfo; int NCode; int Id; switch (pMsg->MsgId) { case WM_KEY: pKeyInfo = (const WM_KEY_INFO*)pMsg->Data.p; if (pKeyInfo->PressedCnt > 0) { switch (pKeyInfo->Key) { case GUI_KEY_TAB: WM_SetFocusOnNextChild(pMsg->hWin); break; case GUI_KEY_BACKTAB: WM_SetFocusOnPrevChild(pMsg->hWin); break; case GUI_KEY_ESCAPE: _Break = 1; break; } } break; case WM_NOTIFY_PARENT: Id = WM_GetId(pMsg->hWinSrc); // Id of widget NCode = pMsg->Data.v; // Notification code switch (NCode) { case WM_NOTIFICATION_RELEASED: // React only if released switch (Id) { case GUI_ID_BUTTON0: _AppSelection = APP_DASHBOARD; break; case GUI_ID_BUTTON1: _AppSelection = APP_CASHTERMINAL; break; } break; } break; case WM_PAINT: GUI_DrawGradientV(0, 0, 639, 479, GUI_BLUE, GUI_BLACK); GUI_SetFont(&GUI_FontAA2_32); GUI_SetTextMode(GUI_TM_TRANS); GUI_SetColor(GUI_WHITE); GUI_DispStringHCenterAt("emWin VGA Demonstration\n", 400, 44); GUI_SetFont(&GUI_FontAA2_21); GUI_DispStringHCenterAt("Press the 'Dashboard' or the 'Cash Terminal'\nbutton to start one of the applications\n", 320, 150); GUI_DrawBitmap(&bmSeggerLogo, 30, 30); break; } }
static void _DrawBkCircle(int DrawLogo) { static GUI_MEMDEV_Handle hMemStretch; GUI_MEMDEV_Handle hMemCircle, hMemGradient, hMemOld; int xSize, ySize, i, CircleWidth; U32 * pData; if (hMemStretch == 0) { xSize = LCD_GetXSize(); ySize = LCD_GetYSize(); 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(&bmSeggerLogo70x35, 5, 5); } }
/********************************************************************* * * _cbBk */ static void _cbBk(WM_MESSAGE * pMsg) { int xSize, ySize; switch (pMsg->MsgId) { case WM_PAINT: xSize = LCD_GetXSize(); ySize = LCD_GetYSize(); GUI_DrawGradientV(0, 0, xSize, ySize, GUI_BLUE, GUI_BLACK); GUI_SetColor(GUI_WHITE); GUI_SetFont(&GUI_Font24_ASCII); GUI_SetTextMode(GUI_TM_TRANS); GUI_DispStringHCenterAt("WIDGET_Spinbox - Sample", 160, 5); break; default: WM_DefaultProc(pMsg); } }
/* Bounces a small text around the screen */ void drawingLoop(void) { int x = 43; int y = 27; int dx = 1; int dy = 2; while (1) { /* Draw something */ GUI_MULTIBUF_Begin(); GUI_DrawGradientV(0, 0, LCD_WIDTH, LCD_HEIGHT, GUI_BLUE, GUI_GREEN); GUI_DrawBitmap(&bmlogo, x, y); GUI_MULTIBUF_End(); /* Drawing finished. Buffers will be flipped */ GUI_Delay(30); /* Move the image around the screen. Bounce when it hits edges */ if ( x + dx + bmlogo.XSize > LCD_WIDTH ) { dx = -dx; } if ( y + dy + bmlogo.YSize > LCD_HEIGHT ) { dy = -dy; } if ( x + dx < 0 ) { dx = -dx; } if ( y + dy < 0 ) { dy = -dy; } x += dx; y += dy; } }
/********************************************************************* * * _cbFrameWinInfo */ static void _cbFrameWinInfo(WM_MESSAGE * pMsg) { int xSize, 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); } }
/********************************************************************* * * MainTask */ void MainTask(void) { const char * pText; GUI_RECT Rect; U16 xSizeScreen; U16 ySizeScreen; U16 xSizeItem; U16 ySizeItem; U16 xSize; U16 ySize; U16 xOff; U16 yOff; U8 NumLanguagesCSV; U8 ItemCnt; U8 LangCnt; GUI_Init(); GUI_UC_SetEncodeUTF8(); xSizeScreen = LCD_GetXSize(); ySizeScreen = LCD_GetYSize(); if ((xSizeScreen < XSIZE_MIN) || (ySizeScreen < YSIZE_MIN)) { GUI_DEBUG_ERROROUT("Inaccurate display size."); } // // Stretch the sample up to a size of #define XSIZE_MAX * YSIZE_MAX. // Above that display size the sample is centered on the according axis. // if (xSizeScreen > XSIZE_MAX) { xOff = (xSizeScreen - XSIZE_MAX) / 2; xSize = XSIZE_MAX; } else { xOff = 0; xSize = xSizeScreen; } if (ySizeScreen > YSIZE_MAX) { yOff = (ySizeScreen - YSIZE_MAX) / 2; ySize = YSIZE_MAX; } else { yOff = 0; ySize = ySizeScreen; } #ifdef WIN32 _CreateLanguageResources(); #endif // // Draw background // xSizeItem = xSize / NUM_LANGUAGES; ySizeItem = (ySize - HEIGHT_TOP) / NUM_ITEMS; GUI_SetBkColor(GUI_DARKBLUE); GUI_Clear(); GUI_DrawGradientV(0, HEIGHT_TOP, xSizeScreen - 1, ySizeScreen - 1, GUI_DARKBLUE, GUI_DARKGRAY); // // Draw frames // Rect.x0 = xOff + BORDER_SIZE; Rect.x1 = xOff + xSizeItem * 2 - BORDER_SIZE; Rect.y0 = yOff + HEIGHT_TOP + BORDER_SIZE; Rect.y1 = ySizeScreen - yOff - BORDER_SIZE - 1; GUI_DrawRectEx(&Rect); GUI_DrawHLine(Rect.y0 + ySizeItem, Rect.x0, Rect.x1); Rect.x0 = xOff + xSizeItem * 2 + BORDER_SIZE; Rect.x1 = xSizeScreen - xOff - BORDER_SIZE; GUI_DrawRectEx(&Rect); GUI_DrawHLine(Rect.y0 + ySizeItem, Rect.x0, Rect.x1); // // Display headlines // GUI_SetFont(&GUI_Font20B_ASCII); GUI_SetTextMode(GUI_TM_TRANS); Rect.x0 = xOff; Rect.x1 = xOff + xSize - 1; Rect.y0 = yOff; Rect.y1 = yOff + HEIGHT_HEADLINE_1 - 1; GUI_DispStringInRect("emWin - Language Resources", &Rect, GUI_TA_HCENTER | GUI_TA_VCENTER); GUI_SetFont(&GUI_Font13B_ASCII); Rect.x1 = xOff + xSizeItem * 2 - 1; Rect.y0 = yOff + HEIGHT_HEADLINE_1; Rect.y1 = yOff + HEIGHT_TOP - 1; GUI_DispStringInRect("CSV file", &Rect, GUI_TA_HCENTER | GUI_TA_VCENTER); Rect.x0 = Rect.x1; Rect.x1 = xSizeScreen - xOff - 1; GUI_DispStringInRect("Text file", &Rect, GUI_TA_HCENTER | GUI_TA_VCENTER); // // Load resource files // GUI_LANG_SetMaxNumLang(NUM_LANGUAGES); #ifdef WIN32 NumLanguagesCSV = GUI_LANG_LoadCSVEx(_GetData, &_ResFileName[0]); GUI_LANG_LoadTextEx(_GetData, &_ResFileName[1], NumLanguagesCSV); #else NumLanguagesCSV = GUI_LANG_LoadCSV(_acGUI_LANG_CSV_Ger_Eng, sizeof(_acGUI_LANG_CSV_Ger_Eng)); GUI_LANG_LoadText(_acGUI_LANG_TXT_Jap, sizeof(_acGUI_LANG_TXT_Jap), NumLanguagesCSV); #endif // // Display the resource text in the calculated rectangle // using the according font for headline and body. // for (LangCnt = 0; LangCnt < NUM_LANGUAGES; LangCnt++) { Rect.x0 = xOff + LangCnt * xSizeItem; Rect.x1 = Rect.x0 + xSizeItem; for (ItemCnt = 0; ItemCnt < NUM_ITEMS; ItemCnt++) { pText = GUI_LANG_GetTextEx(ItemCnt, LangCnt); Rect.y0 = yOff + HEIGHT_TOP + (ItemCnt * ySizeItem); Rect.y1 = Rect.y0 + ySizeItem; if (ItemCnt == 0) { GUI_SetFont(_Languages[LangCnt].pFontHeadline); } else { GUI_SetFont(_Languages[LangCnt].pFontBody); } GUI_DispStringInRect(pText, &Rect, GUI_TA_HCENTER | GUI_TA_VCENTER); } } while (1) { GUI_Delay(100); } }
/********************************************************************* * * _DrawSample */ static void _DrawSample(GUI_RECT Rect, const GUI_FONT * pFont, const char * pText) { GUI_RECT CurrentRect; int yDistDiv3; Rect.x0 += BORDER; Rect.y0 += BORDER; Rect.x1 -= BORDER; Rect.y1 -= BORDER; yDistDiv3 = (Rect.y1 - Rect.y0) / 3; CurrentRect.x0 = Rect.x0; CurrentRect.y0 = Rect.y0; CurrentRect.x1 = Rect.x0 + 59; CurrentRect.y1 = Rect.y0 + 3 * yDistDiv3; GUI_SetClipRect(&CurrentRect); // // Display info text // GUI_SetFont(GUI_FONT_13_ASCII); GUI_SetColor(GUI_WHITE); GUI_DispStringInRectWrap(pText, &CurrentRect, GUI_TA_HCENTER | GUI_TA_VCENTER, GUI_WRAPMODE_WORD); // // Alpha circles // GUI_MoveRect(&CurrentRect, 63, 0); GUI_SetBkColor(GUI_BLACK); GUI_Clear(); _DrawAlphaCircles((CurrentRect.x0 + CurrentRect.x1) / 2, (CurrentRect.y0 + CurrentRect.y1) / 2, 35, 0, 4); GUI_SetColor(GUI_WHITE); GUI_SetFont(pFont); CurrentRect.y1 = CurrentRect.y0 + yDistDiv3; GUI_DispStringInRect("ABC", &CurrentRect, GUI_TA_HCENTER | GUI_TA_VCENTER); GUI_MoveRect(&CurrentRect, 0, yDistDiv3); GUI_DispStringInRect("ABC", &CurrentRect, GUI_TA_HCENTER | GUI_TA_VCENTER); GUI_MoveRect(&CurrentRect, 0, yDistDiv3); GUI_DispStringInRect("ABC", &CurrentRect, GUI_TA_HCENTER | GUI_TA_VCENTER); // // Black to white gradient // CurrentRect.y0 = Rect.y0; CurrentRect.y1 = Rect.y0 + 3 * yDistDiv3; GUI_MoveRect(&CurrentRect, 63, 0); GUI_DrawGradientH(CurrentRect.x0, CurrentRect.y0, CurrentRect.x1, CurrentRect.y1, GUI_BLACK, GUI_WHITE); CurrentRect.y1 = CurrentRect.y0 + yDistDiv3; GUI_SetColor(GUI_RED); GUI_DispStringInRect("ABC", &CurrentRect, GUI_TA_HCENTER | GUI_TA_VCENTER); GUI_MoveRect(&CurrentRect, 0, yDistDiv3); GUI_SetColor(GUI_GREEN); GUI_DispStringInRect("ABC", &CurrentRect, GUI_TA_HCENTER | GUI_TA_VCENTER); GUI_MoveRect(&CurrentRect, 0, yDistDiv3); GUI_SetColor(GUI_BLUE); GUI_DispStringInRect("ABC", &CurrentRect, GUI_TA_HCENTER | GUI_TA_VCENTER); // // RGB // CurrentRect.y0 = Rect.y0; CurrentRect.y1 = CurrentRect.y0 + yDistDiv3; GUI_MoveRect(&CurrentRect, 63, 0); GUI_SetBkColor(GUI_RED); GUI_Clear(); GUI_MoveRect(&CurrentRect, 0, yDistDiv3); GUI_SetBkColor(GUI_GREEN); GUI_Clear(); GUI_MoveRect(&CurrentRect, 0, yDistDiv3); GUI_SetBkColor(GUI_BLUE); GUI_Clear(); GUI_SetColor(GUI_WHITE); CurrentRect.y0 = Rect.y0; CurrentRect.y1 = CurrentRect.y0 + yDistDiv3; GUI_DispStringInRect("ABC", &CurrentRect, GUI_TA_HCENTER | GUI_TA_VCENTER); GUI_MoveRect(&CurrentRect, 0, yDistDiv3); GUI_DispStringInRect("ABC", &CurrentRect, GUI_TA_HCENTER | GUI_TA_VCENTER); GUI_MoveRect(&CurrentRect, 0, yDistDiv3); GUI_DispStringInRect("ABC", &CurrentRect, GUI_TA_HCENTER | GUI_TA_VCENTER); // // RGB gradients // CurrentRect.y0 = Rect.y0; CurrentRect.y1 = CurrentRect.y0 + yDistDiv3; GUI_MoveRect(&CurrentRect, 63, 0); GUI_DrawGradientV(CurrentRect.x0, CurrentRect.y0, CurrentRect.x1, CurrentRect.y1, GUI_RED, GUI_BLACK); GUI_MoveRect(&CurrentRect, 0, yDistDiv3); GUI_DrawGradientV(CurrentRect.x0, CurrentRect.y0, CurrentRect.x1, CurrentRect.y1, GUI_GREEN, GUI_BLACK); GUI_MoveRect(&CurrentRect, 0, yDistDiv3); GUI_DrawGradientV(CurrentRect.x0, CurrentRect.y0, CurrentRect.x1, CurrentRect.y1, GUI_BLUE, GUI_BLACK); CurrentRect.y0 = Rect.y0; CurrentRect.y1 = CurrentRect.y0 + yDistDiv3; GUI_SetColor(GUI_WHITE); GUI_DispStringInRect("ABC", &CurrentRect, GUI_TA_HCENTER | GUI_TA_VCENTER); GUI_MoveRect(&CurrentRect, 0, yDistDiv3); GUI_DispStringInRect("ABC", &CurrentRect, GUI_TA_HCENTER | GUI_TA_VCENTER); GUI_MoveRect(&CurrentRect, 0, yDistDiv3); GUI_DispStringInRect("ABC", &CurrentRect, GUI_TA_HCENTER | GUI_TA_VCENTER); // // Disable application defined clip rectangle // GUI_SetClipRect(NULL); }
/********************************************************************* * * MainTask */ void MainTask(void) { TREEVIEW_ITEM_Handle hNode; WM_HWIN hTree; int xSize; int ySize; int yPos; int r; int TimeStart; int TimeUsed; int ySizeText; U32 BytesFree; U32 BytesUsed; char acBuffer[(TREEVIEW_DEPTH << 1) + 1]; char acNumNodes[30] = "Nodes: "; char acNumLeaves[30] = "Leaves: "; char acNumTotal[30] = "Total: "; char acTimeUsed[30] = "Time: "; char acBytesUsed[30] = "Memory: "; // // Initialize emWin // WM_SetCreateFlags(WM_CF_MEMDEV); GUI_Init(); xSize = LCD_GetXSize(); ySize = LCD_GetYSize(); // // Set defaults for background and widgets // WM_SetDesktopColor(GUI_BLACK); SCROLLBAR_SetDefaultSkin(SCROLLBAR_SKIN_FLEX); SCROLLBAR_SetDefaultWidth(20); SCROLLBAR_SetThumbSizeMin(25); TEXT_SetDefaultFont(GUI_FONT_6X8); // // Draw info message before creating the widgets // GUI_DrawGradientV(0, 0, xSize - 1, ySize - 1, GUI_BLUE, GUI_BLACK); GUI_SetFont(GUI_FONT_20F_ASCII); GUI_DispStringHCenterAt("Filling TREEVIEW widget...", xSize >> 1, ySize / 3); GUI_X_Delay(1000); // // Create TREEVIEW // hTree = TREEVIEW_CreateEx(0, 0, xSize, ySize, WM_HBKWIN, WM_CF_SHOW, 0, GUI_ID_TREEVIEW0); TREEVIEW_SetAutoScrollV(hTree, 1);//管理自动使用垂直滚动条。 TREEVIEW_SetSelMode(hTree, TREEVIEW_SELMODE_ROW); // // Fill TREEVIEW // hNode = TREEVIEW_InsertItem(hTree, TREEVIEW_ITEM_TYPE_NODE, 0, 0, "Tree"); BytesFree = GUI_ALLOC_GetNumFreeBytes(); TimeStart = GUI_GetTime(); r = _FillNode(hTree, hNode, NUM_CHILD_NODES, NUM_CHILD_ITEMS, TREEVIEW_DEPTH, TREEVIEW_DEPTH, acBuffer, acBuffer); TimeUsed = GUI_GetTime() - TimeStart; BytesUsed = BytesFree - GUI_ALLOC_GetNumFreeBytes(); if (r) { // // Error message // WM_DeleteWindow(hTree); GUI_MessageBox("Error", "Not enough memory available!", 0); } else { // // Show result // yPos = 20; ySizeText = GUI_GetYDistOfFont( TEXT_GetDefaultFont()) + 5; _MakeNumberText(hTree, xSize >> 1, &yPos, xSize >> 1, ySizeText, acNumNodes, _NumNodes); _MakeNumberText(hTree, xSize >> 1, &yPos, xSize >> 1, ySizeText, acNumLeaves, _NumLeaves); _MakeNumberText(hTree, xSize >> 1, &yPos, xSize >> 1, ySizeText, acNumTotal, _NumNodes + _NumLeaves); _MakeNumberText(hTree, xSize >> 1, &yPos, xSize >> 1, ySizeText, acTimeUsed, TimeUsed); _MakeNumberText(hTree, xSize >> 1, &yPos, xSize >> 1, ySizeText, acBytesUsed, BytesUsed); WM_SetFocus(hTree); } while (1) { GUI_Delay(100); } }
/********************************************************************* * * MainTask */ void MainTask(void) { WM_HWIN hWin; GUI_MEMDEV_Handle hMemWin; // Memory device to be used in window GUI_MEMDEV_Handle hMemDraw; // Memory device for drawing operation U32 * pDataWin; U32 * pDataDraw; int i, yPos, Cnt, xSizeWindow, ySizeWindow, xPosWindow, yPosWindow, xSizeDisplay, ySizeDisplay; GUI_RECT Rect; xSizeDisplay = LCD_GetXSize(); ySizeDisplay = LCD_GetYSize(); xSizeWindow = 100; ySizeWindow = 100; xPosWindow = (xSizeDisplay - xSizeWindow) / 2; yPosWindow = (ySizeDisplay - ySizeWindow) / 2; Cnt = 0; Rect.y0 = 0; Rect.y1 = ySizeWindow - 1; WM_SetCreateFlags(WM_CF_MEMDEV); GUI_Init(); WM_SetCallback(WM_HBKWIN, _cbBk); // // Create window // hWin = WINDOW_CreateUser(xPosWindow, yPosWindow, xSizeWindow, ySizeWindow, 0, WM_CF_SHOW, 0, 0, _cbWin, sizeof(hMemWin)); // // Create a memory device for the window // hMemWin = GUI_MEMDEV_CreateFixed(0, 0, 100, 100, GUI_MEMDEV_NOTRANS, GUI_MEMDEV_APILIST_32, GUICC_8888); // // Attach memory device to window data // WINDOW_SetUserData(hWin, &hMemWin, sizeof(hMemWin)); // // Create small memory device for drawing one line of gradient data // representing the real data to be used // hMemDraw = GUI_MEMDEV_CreateFixed(xPosWindow, yPosWindow, 1, ySizeWindow, GUI_MEMDEV_NOTRANS, GUI_MEMDEV_APILIST_32, GUICC_8888); // // Initialize random value // yPos = rand() % ySizeWindow; while (1) { // // Create some data to be added to the windows memory device // GUI_MEMDEV_Select(hMemDraw); GUI_DrawGradientV(xPosWindow, yPosWindow, xPosWindow, yPosWindow + yPos, GUI_RED, GUI_YELLOW); GUI_MEMDEV_Select(0); // // Get data pointers immediately before accessing data // pDataWin = GUI_MEMDEV_GetDataPtr(hMemWin); pDataDraw = GUI_MEMDEV_GetDataPtr(hMemDraw); // // Initially clear memory device // if (Cnt == 0) { memset(pDataWin, 0, sizeof(U32) * xSizeWindow * ySizeWindow); WM_InvalidateWindow(hWin); } // // Copy data from drawing device into windows memory device // for (i = 0, pDataWin += xSizeWindow * (ySizeWindow - 1) + Cnt; i <= yPos; i++, pDataWin -= xSizeWindow, pDataDraw++) { *pDataWin = *pDataDraw; } // // Optimized invalidating, only the new line will be drawn // Rect.x0 = Rect.x1 = Cnt; WM_InvalidateRect(hWin, &Rect); // // Increment counter // Cnt++; Cnt = (Cnt >= 100) ? 0 : Cnt; // // Modify random value // yPos += (rand() % 5) - 2; yPos = (yPos < 0) ? 0 : (yPos >= ySizeWindow) ? ySizeWindow - 1 : yPos; // // Wait a while and redraw window // GUI_Delay(50); } }
/********************************************************************* * * _DrawSample */ static void _DrawSample(GUI_RECT * pRect, int yd) { GUI_RECT Rect; Rect = *pRect; // // Use application defined clip rectangle // GUI_SetClipRect(&Rect); // // Move clip rectangle // GUI_MoveRect(&Rect, 65, 0); // // Draw sample // _DrawAlphaCircles((Rect.x0 + Rect.x1) >> 1, (Rect.y0 + Rect.y1) >> 1, 35, 0, 4); GUI_SetColor(GUI_WHITE); GUI_DispStringInRectWrap("ABC\nABC\nABC", &Rect, GUI_TA_HCENTER | GUI_TA_VCENTER, GUI_WRAPMODE_WORD); // // Move clip rectangle // GUI_MoveRect(&Rect, 65, 0); GUI_DrawGradientH(Rect.x0, Rect.y0, Rect.x1, Rect.y1, GUI_BLACK, GUI_WHITE); Rect.y1 = Rect.y0 + yd; GUI_SetColor(GUI_RED); GUI_DispStringInRect("ABC", &Rect, GUI_TA_HCENTER | GUI_TA_VCENTER); GUI_MoveRect(&Rect, 0, yd); GUI_SetColor(GUI_GREEN); GUI_DispStringInRect("ABC", &Rect, GUI_TA_HCENTER | GUI_TA_VCENTER); GUI_MoveRect(&Rect, 0, yd); GUI_SetColor(GUI_BLUE); GUI_DispStringInRect("ABC", &Rect, GUI_TA_HCENTER | GUI_TA_VCENTER); GUI_MoveRect(&Rect, 0, -yd * 2); Rect.y1 = Rect.y0 + yd * 3; // // Move clip rectangle // GUI_MoveRect(&Rect, 65, 0); // // Draw sample // Rect.y1 = Rect.y0 + yd; GUI_SetBkColor(GUI_RED); GUI_Clear(); GUI_MoveRect(&Rect, 0, yd); GUI_SetBkColor(GUI_GREEN); GUI_Clear(); GUI_MoveRect(&Rect, 0, yd); GUI_SetBkColor(GUI_BLUE); GUI_Clear(); GUI_MoveRect(&Rect, 0, -yd * 2); Rect.y1 = Rect.y0 + yd * 3; GUI_SetColor(GUI_WHITE); GUI_DispStringInRectWrap("ABC\nABC\nABC", &Rect, GUI_TA_HCENTER | GUI_TA_VCENTER, GUI_WRAPMODE_WORD); // // Move clip rectangle // GUI_MoveRect(&Rect, 65, 0); // // Draw sample // Rect.y1 = Rect.y0 + yd; GUI_DrawGradientV(Rect.x0, Rect.y0, Rect.x1, Rect.y1, GUI_RED, GUI_BLACK); GUI_MoveRect(&Rect, 0, yd); GUI_DrawGradientV(Rect.x0, Rect.y0, Rect.x1, Rect.y1, GUI_GREEN, GUI_BLACK); GUI_MoveRect(&Rect, 0, yd); GUI_DrawGradientV(Rect.x0, Rect.y0, Rect.x1, Rect.y1, GUI_BLUE, GUI_BLACK); GUI_MoveRect(&Rect, 0, -yd * 2); Rect.y1 = Rect.y0 + yd * 3; GUI_SetColor(GUI_WHITE); GUI_DispStringInRectWrap("ABC\nABC\nABC", &Rect, GUI_TA_HCENTER | GUI_TA_VCENTER, GUI_WRAPMODE_WORD); // // Disable application defined clip rectangle // GUI_SetClipRect(NULL); }