static void _Label(void) { int x, y; GUI_SetPenSize(1); GUI_ClearRect(0, (LCD_GetYSize() - 21) - _YSize, (LCD_GetXSize() - 1), (LCD_GetYSize() - 1)); GUI_DrawRect(18, (LCD_GetYSize() - 21) - _YSize, (LCD_GetXSize() - 1), (LCD_GetYSize() - 20)); GUI_SetFont(&GUI_Font6x8); for (x = 0; x < (LCD_GetXSize() - 20); x += 40) { int xPos = x + 18; GUI_DrawVLine(xPos, (LCD_GetYSize() - 20), (LCD_GetYSize() - 14)); GUI_DispDecAt(x / 40, xPos - 2, (LCD_GetYSize() - 9), 1); } for (y = 0; y < _YSize / 2; y += 20) { int yPos = (LCD_GetYSize() - 20) - _YSize / 2 + y; GUI_DrawHLine(yPos, 13, 18); if (y) { GUI_GotoXY(1, yPos - 4); GUI_DispSDec(-y / 20, 2); yPos = (LCD_GetYSize() - 20) - _YSize / 2 - y; GUI_DrawHLine(yPos, 13, 18); GUI_GotoXY(1, yPos - 4); GUI_DispSDec(y / 20, 2); } else { GUI_DispCharAt('0', 7, yPos - 4); } } }
/********************************************************************* * * _cbDialogNumPad * * Purpose: * Callback function of the numpad. */ static void _cbDialogNumPad(WM_MESSAGE * pMsg) { GUI_RECT r; int i, NCode, Id, Pressed = 0; WM_HWIN hDlg, hItem; hDlg = pMsg->hWin; switch (pMsg->MsgId) { case WM_PAINT: WM_GetClientRect(&r); GUI_SetColor(0x000000); GUI_DrawRect(r.x0, r.y0, r.x1, r.y1); /* Draw rectangle around it */ /* Draw the bright sides */ GUI_SetColor(0xffffff); GUI_DrawHLine(r.y0 + 1, r.x0 + 1, r.x1 - 2); /* Draw top line */ GUI_DrawVLine(r.x0 + 1, r.y0 + 1, r.y1 - 2); /* Draw the dark sides */ GUI_SetColor(0x555555); GUI_DrawHLine(r.y1-1, r.x0 + 1, r.x1 - 1); GUI_DrawVLine(r.x1-1, r.y0 + 1, r.y1 - 2); break; case WM_INIT_DIALOG: for (i = 0; i < GUI_COUNTOF(_aDialogNumPad) - 1; i++) { hItem = WM_GetDialogItem(hDlg, GUI_ID_USER + i); BUTTON_SetFocussable(hItem, 0); /* Set all buttons non focussable */ switch (i) { case 13: BUTTON_SetBitmapEx(hItem, 0, &_bmArrowLeft, 7, 7); /* Set bitmap for arrow left button (unpressed) */ BUTTON_SetBitmapEx(hItem, 1, &_bmArrowLeft, 7, 7); /* Set bitmap for arrow left button (pressed) */ break; case 14: BUTTON_SetBitmapEx(hItem, 0, &_bmArrowRight, 7, 7); /* Set bitmap for arrow right button (unpressed) */ BUTTON_SetBitmapEx(hItem, 1, &_bmArrowRight, 7, 7); /* Set bitmap for arrow right button (pressed) */ break; } } hItem = WM_GetDialogItem(hDlg, GUI_ID_USER + 12); break; case WM_NOTIFY_PARENT: Id = WM_GetId(pMsg->hWinSrc); /* Id of widget */ NCode = pMsg->Data.v; /* Notification code */ switch (NCode) { case WM_NOTIFICATION_CLICKED: Pressed = 1; case WM_NOTIFICATION_RELEASED: if ((Id >= GUI_ID_USER) && (Id <= (GUI_ID_USER + GUI_COUNTOF(_aDialogNumPad) - 1))) { int Key; if (Id < GUI_ID_USER + 11) { char acBuffer[10]; BUTTON_GetText(pMsg->hWinSrc, acBuffer, sizeof(acBuffer)); /* Get the text of the button */ Key = acBuffer[0]; } else { Key = _aKey[Id - GUI_ID_USER - 11]; /* Get the text from the array */ } GUI_SendKeyMsg(Key, Pressed); /* Send a key message to the focussed window */ } break; } default: WM_DefaultProc(pMsg); } }
/******************************************************************* * * _Label Labels the x & y-axis */ static void _Label(void) { int x, y; GUI_SetBkColor(GUI_RED); GUI_Clear(); GUI_SetColor(GUI_WHITE); GUI_SetFont(&GUI_Font24_ASCII); GUI_DispStringHCenterAt("MEMDEV_DrawGraph - Sample", 160, 5); GUI_SetPenSize(1); GUI_ClearRect(0, (LCD_YSIZE - 21) - YSIZE, (LCD_XSIZE - 1), (LCD_YSIZE - 1)); GUI_DrawRect(18, (LCD_YSIZE - 21) - YSIZE, (LCD_XSIZE - 1), (LCD_YSIZE - 20)); GUI_SetFont(&GUI_Font6x8); for (x = 0; x < (LCD_XSIZE - 20); x += 40) { int xPos = x + 18; GUI_DrawVLine(xPos, (LCD_YSIZE - 20), (LCD_YSIZE - 14)); GUI_DispDecAt(x / 40, xPos - 2, (LCD_YSIZE - 9), 1); } for (y = 0; y < YSIZE / 2; y += 20) { int yPos = (LCD_YSIZE - 20) - YSIZE / 2 + y; GUI_DrawHLine(yPos, 13, 18); if (y) { GUI_GotoXY(1, yPos - 4); GUI_DispSDec(-y / 20, 2); yPos = (LCD_YSIZE - 20) - YSIZE / 2 - y; GUI_DrawHLine(yPos, 13, 18); GUI_GotoXY(1, yPos - 4); GUI_DispSDec(y / 20, 2); } else { GUI_DispCharAt('0', 7, yPos - 4); } } }
/** * @brief Callback routine of the status bar * @param pMsg: pointer to a data structure of type WM_MESSAGE * @retval None */ static void _cbStatus(WM_MESSAGE* pMsg) { int xSize, ySize; static uint8_t TempStr[50]; static WM_HTIMER hTimerTime; WM_HWIN hWin; hWin = pMsg->hWin; switch (pMsg->MsgId) { case WM_CREATE: hTimerTime = WM_CreateTimer(hWin, ID_TIMER_TIME, 1000, 0); break; case WM_DELETE: WM_DeleteTimer(hTimerTime); break; case WM_TIMER: WM_InvalidateWindow(hWin); WM_RestartTimer(pMsg->Data.v, 0); break; case WM_PAINT: xSize = WM_GetWindowSizeX(hWin); ySize = WM_GetWindowSizeY(hWin); /* Draw background */ GUI_SetColor(0x303030); GUI_FillRect(0, 0, xSize, ySize - 3); GUI_SetColor(0x808080); GUI_DrawHLine(ySize - 2, 0, xSize); GUI_SetColor(0x404040); GUI_DrawHLine(ySize - 1, 0, xSize); GUI_SetTextMode(GUI_TM_TRANS); GUI_SetColor(GUI_WHITE); GUI_SetFont(GUI_FONT_13B_ASCII); /* Serial port*/ if (pdTRUE == BluetoothReady) { GUI_DrawBitmap(&bmICON_BluetoothStatus, xSize - 155, 0); } if (pdTRUE == GPSReady) { GUI_DrawBitmap(&bmICON_GPS_Status, xSize - 125, 0); } sprintf((char *)TempStr, "CPU : %d %%", FreeRTOS_GetCPUUsage()); if (75 > FreeRTOS_GetCPUUsage()) { GUI_SetColor(GUI_WHITE); } else { GUI_SetColor(GUI_RED); } GUI_DispStringAt((char *)TempStr, 4, 4); GUI_SetColor(GUI_WHITE); break; default: WM_DefaultProc(pMsg); break; } }
/********************************************************************* * * _WIDGET_EFFECT_3D1L_DrawDownRect */ static void _WIDGET_EFFECT_3D1L_DrawDownRect(const GUI_RECT* pRect) { GUI_RECT r; r = *pRect; /* Draw the upper left sides */ LCD_SetColor(0x606060); GUI_DrawHLine(r.y0, r.x0, r.x1 - 1); GUI_DrawVLine(r.x0, r.y0 + 1, r.y1 - 1); /* Draw the lower right sides */ LCD_SetColor(0xE7E7E7); GUI_DrawHLine(r.y1, r.x0, r.x1); GUI_DrawVLine(r.x1, r.y0, r.y1 - 1); }
/******************************************************************* * * _DrawGraph */ static void _DrawGraph(void) { GUI_RECT Rect; int xSize; int ySize; int x; int y; WM_GetClientRect(&Rect); xSize = Rect.x1; ySize = Rect.y1; GUI_SetBkColor(GUI_BLACK); GUI_ClearRect(26, 1, 302, ySize - 21); GUI_SetColor(_ColorGrid); for (y = 20; y < (ySize - 21); y += 20) { int yPos = ySize - 20 - y; GUI_DrawHLine(yPos, 26, 302); } for (x = 40; x < (xSize - 25); x += 40) { int xPos = x + 25; GUI_DrawVLine(xPos, 1, ySize - 21); } GUI_SetColor(_ColorTemp1); GUI_DrawGraph(_aTemp1, GUI_COUNTOF(_aTemp1), 26, ySize - 121); GUI_SetColor(_ColorTemp2); GUI_DrawGraph(_aTemp2, GUI_COUNTOF(_aTemp2), 26, ySize - 121); }
/********************************************************************* * * _LabelGraph */ static void _LabelGraph(void) { GUI_RECT Rect; int x; int y; int xSize; int ySize; WM_GetClientRect(&Rect); xSize = Rect.x1; ySize = Rect.y1; GUI_SetBkColor(_ColorBackGround); GUI_Clear(); GUI_SetColor(_ColorLabel); GUI_SetPenSize(1); GUI_ClearRect(0, (ySize - 21) - ySize, (xSize - 1), (ySize - 1)); GUI_DrawRect(25, 0, xSize, ySize - 20); GUI_SetFont(&GUI_Font6x8); for (x = 0; x < (xSize - 20); x += 40) { int xPos = x + 25; GUI_DrawVLine(xPos, (ySize - 20), (ySize - 14)); GUI_DispDecAt(x / 40, xPos - 2, (ySize - 9), 1); } for (y = 0; y < ySize - 20; y += 20) { int yPos = ySize - 20 - y; GUI_DrawHLine(yPos, 20, 25); GUI_GotoXY(1, yPos - 4); GUI_DispDecSpace(_TempMin + y, 3); } }
/********************************************************************* * * _ShowEdgeWeights */ static void _ShowEdgeWeights(void) { const char * Weight_name[] = { "\nlight: ", "\nsemi-light: ", "\nregular: ", "\nsemi-bold: ", "\nbold: " }; const char Chinese_string[] = { "\xe5\x9f\xba\xe6\x9c\xac\xe4\xb8\x8a\xe8\xae\xa1\xe7\xae\x97\xe6\x9c\xba\xe5\x8f\xaa\xe6\x98\xaf\xe5\xa4\x84\xe7\x90\x86\xe6\x95\xb0\xe5\xad\x97\xe5\xae\x83\xe4\xbb\xac\xe6\x8c\x87\xe5\xae\x9a\xe4\xb8\x80\xe4\xb8\xaa\n" }; const char Weight_order[] = { 0, 3, 1, 2, 4 }; int i; int j; GUI_Clear(); i = 0; GUI_ITYPE_GetFamilyName(&_aFont[i], _acFamily, sizeof(_acFamily)); GUI_ITYPE_GetStyleName(&_aFont[i], _acStyle, sizeof(_acStyle)); GUI_SetFont(&GUI_Font20_1); GUI_DispString(" Edge font: "); GUI_DispString(_acFamily); GUI_DispString(", "); GUI_DispString(_acStyle); GUI_DispNextLine(); GUI_DrawHLine(GUI_GetDispPosY(), 0, 0xfff); GUI_SetFont(&_aFont[1]); GUI_ITYPE_SetOutputStyle(&_aFont[1], &_aCS[1], (long)ITYPE_NO_EFFECT); // Turn off all effects GUI_ITYPE_SetOutputStyle(&_aFont[1], &_aCS[1], (long)ITYPE_GRAYMAP4); // Edge graymap output GUI_DispString("** iType Edge CSM tuning, 5 weights in the same font **"); for (j = 0; j < 5; j++){ i = Weight_order[j]; GUI_SetFont(&_aFont[i]); GUI_ITYPE_SetOutputStyle(&_aFont[i], &_aCS[i], (long)ITYPE_NO_EFFECT); // Turn off all effects GUI_ITYPE_SetOutputStyle(&_aFont[i], &_aCS[i], (long)ITYPE_EDGE_GRAYMAP4); // Edge graymap output GUI_DispNextLine(); GUI_DispString(Weight_name[j]); GUI_UC_SetEncodeUTF8(); GUI_DispString(Chinese_string); GUI_UC_SetEncodeNone(); } GUI_Delay(PAGE_DELAY); }
/************************************************************************************** * FunctionName : _DrawCalendar() * Description : 绘制日历表格 * EntryParameter : None * ReturnValue : None **************************************************************************************/ void _DrawCalendar(CLD_DAY *pDay) { const U8 cstWek[][4] = { "SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT" }; U8 tmpWth = 320 / 7; U8 tmpHgh = 180 / 6; U8 i = 0, n = 0; GUI_SetColor(GUI_GRAY); // 设置灰色 for (i = 0; i < 7; i++) // 画水平线 { GUI_DrawHLine((60 + i*tmpHgh) - 1, 0, 320); for (n = 0; n < 7; n++) { if (i < 6) { pDay[i * 7 + n].Y = (60 + i*tmpHgh) + tmpHgh / 2; } } } for (i = 0; i < 7; i++) // 画垂直平线 { if (i < 6) GUI_DrawVLine((i + 1)*tmpWth, 60, 240); for (n = 0; n < 6; n++) { pDay[i + 7 * n].X = ((i + 1)*tmpWth) - tmpWth / 2; } } for (i = 0; i < 7; i++) // 显示星期 { GUI_DispStringHCenterAt(cstWek[i], i*tmpWth + tmpWth / 2, 45); } }
void WIDGET_EFFECT_3D_DrawUpRect(const GUI_RECT* pRect) { GUI_RECT r; GUI_CONTEXT Context; GUI_SaveContext(&Context); r = *pRect; GUI_SetColor(0x000000); GUI_DrawRect(r.x0, r.y0, r.x1, r.y1); /* Draw rectangle around it */ /* Draw the bright sides */ GUI_SetColor(0xffffff); GUI_DrawHLine(r.y0 + 1, r.x0 + 1, r.x1 - 2); /* Draw top line */ GUI_DrawVLine(r.x0 + 1, r.y0 + 1, r.y1 - 2); /* Draw the dark sides */ GUI_SetColor(0x555555); GUI_DrawHLine(r.y1-1, r.x0 + 1, r.x1 - 1); GUI_DrawVLine(r.x1-1, r.y0 + 1, r.y1 - 2); GUI_RestoreContext(&Context); }
/******************************************************************* * * _Draw Draws the graph area */ static void _Draw(void * p) { int i; PARAM * pParam = (PARAM *)p; GUI_SetBkColor(GUI_BLACK); GUI_SetColor(GUI_DARKGRAY); GUI_ClearRect(19, (LCD_YSIZE - 20) - YSIZE, (LCD_XSIZE - 2), (LCD_YSIZE - 21)); for (i = 0; i < (YSIZE / 2); i += 20) { GUI_DrawHLine((LCD_YSIZE - 20) - (YSIZE / 2) + i, 19, (LCD_XSIZE - 2)); if (i) { GUI_DrawHLine((LCD_YSIZE - 20) - (YSIZE / 2) - i, 19, (LCD_XSIZE - 2)); } } for (i = 40; i < (LCD_XSIZE - 20); i += 40) { GUI_DrawVLine(18 + i, (LCD_YSIZE - 20) - YSIZE, (LCD_YSIZE - 21)); } GUI_SetColor(COLOR_GRAPH0); GUI_DrawGraph(pParam->aY, (LCD_XSIZE - 20), 19, (LCD_YSIZE - 20) - YSIZE); }
/********************************************************************* * * _AnimDrawCross */ static void _AnimDrawCross(GUI_ANIM_INFO * pInfo, void * pVoid) { ANIM_DATA * pData; static int xPosOld; _PrepareDrawing(pInfo, pVoid, &pData, xPosOld, 4); GUI_DrawHLine(pData->yPos, pData->xPos - pData->ObjectSize, pData->xPos + pData->ObjectSize); GUI_DrawVLine(pData->xPos, pData->yPos - pData->ObjectSize, pData->yPos + pData->ObjectSize); xPosOld = pData->xPos; }
/* ******************************************************************* * * main() * ******************************************************************* */ void MainTask_test(void) { int Cnt =0; int i,YPos; int LCDXSize = LCD_GET_XSIZE(); int LCDYSize = LCD_GET_YSIZE(); const GUI_BITMAP *pBitmap; GUI_Init(); GUI_SetBkColor(GUI_RED); GUI_Clear(); GUI_Delay(1000); GUI_SetBkColor(GUI_BLUE); GUI_Clear(); GUI_Delay(1000); GUI_SetColor(GUI_WHITE); for (i=0; i<1000; i+=10) { GUI_DrawHLine(i,0,100); GUI_DispStringAt("Line ",0,i); GUI_DispDecMin(i); } GUI_Delay(1000); GUI_SetColor(0x0); GUI_SetBkColor(0xffffff); for (i=0; i<160; i++) { int len = (i<80) ? i : 160-i; GUI_DrawHLine(i,20,len+20); } GUI_Delay(1000); GUI_Clear(); if (LCD_GET_YSIZE()>(100+bmMicriumLogo_1bpp.YSize)) { pBitmap=&bmMicriumLogo; } else { GUI_SetColor(GUI_BLUE); pBitmap=&bmMicriumLogo_1bpp; } GUI_DrawBitmap(pBitmap,(LCDXSize-pBitmap->XSize)/2,10); YPos=20+pBitmap->YSize; GUI_SetFont(&GUI_FontComic24B_1); GUI_DispStringHCenterAt("www.micrium.com",LCDXSize/2,YPos); GUI_Delay(1000); GUI_SetColor(GUI_RED); GUI_DispStringHCenterAt("© 2004\n", LCDXSize/2,YPos+30); GUI_SetFont(&GUI_Font10S_1); GUI_DispStringHCenterAt("Micriµm Inc.",LCDXSize/2,YPos+60);; GUI_Delay(1000); }
/********************************************************************* * * _DrawDiagramAt */ static void _DrawDiagramAt(GUI_MEMDEV_Handle hMem, int xPos, int yPos, int * py, int xBlend) { GUI_MEMDEV_Handle hMemOld; GUI_RECT Rect; int IndexBmBar; int ySizeBar; int i; hMemOld = GUI_MEMDEV_Select(hMem); // // Draw blue background // GUI_SetColor(0x4a2210); GUI_FillRoundedRect(xPos, yPos, xPos + GRAPH_WIDTH, yPos + GRAPH_HEIGHT, 4); // // Draw grid lines // GUI_SetColor(0x774830); for (i = 0; i < 12; i++) { GUI_DrawHLine(yPos + 6 + i * 10, xPos + 2, xPos + GRAPH_WIDTH - 2); } // // Draw bars // for (i = 0; i < 10; i++) { IndexBmBar = (i < 6) ? i / 2 : 4 - (i / 2); ySizeBar = *(py + i); GUI_DrawBitmapMag(_apBmBar[IndexBmBar], xPos + 8 + i * 16, yPos + GRAPH_HEIGHT - ySizeBar - 6, 1, ySizeBar); } // // Draw alpha effect // Rect.x0 = xPos; Rect.x1 = xPos + 3; Rect.y0 = yPos; Rect.y1 = yPos + GRAPH_HEIGHT; GUI_SetClipRect(&Rect); GUI_SetColor(0xd99100); GUI_SetAlpha(168); GUI_FillRoundedRect(xPos, yPos, xPos + GRAPH_WIDTH, yPos + GRAPH_HEIGHT, 4); GUI_SetClipRect(NULL); GUI_FillRect(xPos + 4, yPos + 1, xPos + xBlend, yPos + GRAPH_HEIGHT - 1); GUI_SetAlpha(0); // // Draw orange frame // GUI_SetColor(0x0094f3); GUI_DrawRoundedRect(xPos, yPos, xPos + GRAPH_WIDTH, yPos + GRAPH_HEIGHT, 4); // // Label // _DrawLabel(hMem, xPos, yPos); GUI_MEMDEV_CopyToLCD(hMem); GUI_MEMDEV_Select(hMemOld); }
/********************************************************************* * * WIDGET_EFFECT_3D_DrawDown */ void WIDGET_EFFECT_3D_DrawDownRect(const GUI_RECT* pRect) { GUI_RECT r; r = *pRect; GUI_SetColor(0x000000); /// TBD: Use halftone // GUI_DrawRect(0, 0, r.x1, r.y1); /* Draw the upper left sides */ GUI_SetColor(0x808080); GUI_DrawHLine(r.y0, r.x0, r.x1); GUI_DrawVLine(r.x0, r.y0 + 1, r.y1); GUI_SetColor(0x0); GUI_DrawHLine(r.y0 + 1, r.x0 + 1, r.x1 - 1); GUI_DrawVLine(r.x0 + 1, r.y0 + 2, r.y1 - 1); /* Draw the lower right sides */ GUI_SetColor(0xffffff); GUI_DrawHLine(r.y1, r.x0 + 1, r.x1); GUI_DrawVLine(r.x1, r.y0 + 1, r.y1); GUI_SetColor(0xc0c0c0); GUI_DrawHLine(r.y1 - 1, r. x0 + 2, r.x1-1); GUI_DrawVLine(r.x1 - 1, r. y0 + 2, r.y1-1); }
/********************************************************************* * * _DrawTriangle */ static void _DrawTriangle(WIDGET* pWidget, int x, int y, int Size, int Inc) { if (pWidget->State & WIDGET_STATE_VERTICAL) { for (; Size >= 0; Size--, x += Inc) { GUI_DrawHLine(x, y - Size, y + Size); } } else { for (; Size >= 0; Size--, x += Inc) { GUI_DrawVLine(x, y - Size, y + Size); } } }
//@@@@@@@@@@@@@@@@@@@@@@ 绘制网格 @@@@@@@@@@@@@@@@@@@@@@@@@@ void draw_net(void) { int i; GUI_SetDrawMode(GUI_DM_NORMAL); GUI_SetColor(GUI_RED); for(i=0;i<=10;i++) GUI_DrawHLine(20+20*i,20,220); //y,x0,x1 for(i=0;i<=10;i++) GUI_DrawVLine(20+20*i,20,220); //x,y0,y1 }
static void _cbBk(WM_MESSAGE * pMsg) { int xSize; switch (pMsg->MsgId) { case WM_PAINT: xSize = LCD_GetXSize(); GUI_Clear(); GUI_SetFont(GUI_FONT_24_ASCII); GUI_DispStringHCenterAt("Customized TREEVIEW widget", xSize >> 1, 5); GUI_DrawHLine(30, 0, xSize - 1); break; } }
void WIDGET__DrawVLine(WIDGET* pWidget, int x, int y0, int y1) { if (pWidget->State & WIDGET_STATE_VERTICAL) { GUI_RECT r0, r1; r0.x0 = x; r0.x1 = x; r0.y0 = y0; r0.y1 = y1; _RotateRect90(pWidget, &r1, &r0); GUI_DrawHLine(r1.y0, r1.x0, r1.x1); } else { GUI_DrawVLine(x, y0, y1); } }
static void _Draw(void * p) { int i; PARAM * pParam = (PARAM *)p; int lcd_xsize; int lcd_ysize; lcd_xsize = LCD_GetXSize(); lcd_ysize = LCD_GetYSize(); GUI_SetBkColor(GUI_BLACK); GUI_SetColor(GUI_DARKGRAY); GUI_ClearRect(19, (lcd_ysize - 20) - _YSize, (lcd_xsize - 2), (lcd_ysize - 21)); for (i = 0; i < (_YSize / 2); i += 20) { GUI_DrawHLine((lcd_ysize - 20) - (_YSize / 2) + i, 19, (lcd_xsize - 2)); if (i) { GUI_DrawHLine((lcd_ysize - 20) - (_YSize / 2) - i, 19, (lcd_xsize - 2)); } } for (i = 40; i < (lcd_xsize - 20); i += 40) { GUI_DrawVLine(18 + i, (lcd_ysize - 20) - _YSize, (lcd_ysize - 21)); } GUIDEMO_SetColor(COLOR_GRAPH0); GUI_DrawGraph(pParam->aY, (lcd_xsize - 20), 19, (lcd_ysize - 20) - _YSize); }
/********************************************************************* * * _ShowText */ static void _ShowText(void) { int i; GUI_Clear(); i = 0; GUI_TTF_GetFamilyName(&_aFont[i], _acFamily, sizeof(_acFamily)); GUI_TTF_GetStyleName(&_aFont[i], _acStyle, sizeof(_acStyle)); GUI_SetFont(&GUI_Font20_1); GUI_DispString(_acFamily); GUI_DispString(", "); GUI_DispString(_acStyle); GUI_DispNextLine(); GUI_DrawHLine(GUI_GetDispPosY(), 0, 0xfff); GUI_SetFont(&_aFont[i]); GUI_DispString("abcdefghijklmnopqrstuvwxyz\n"); GUI_DispString("ABCDEFGHIJKLMNOPQRSTUVWXYZ\n"); GUI_DispString("123456789.:,;(:*!?')\n"); GUI_DrawHLine(GUI_GetDispPosY(), 0, 0xfff); for (i = 0; i < GUI_COUNTOF(_aHeight); i++) { GUI_SetFont(&_aFont[i]); GUI_DispString("The quick brown fox jumps over the lazy dog. 1234567890\n"); } GUI_Delay(1000); }
static void DrawCursor(int xOnBase, int yOnBase, GUI_COLOR color) { double basex = screen_hcenter+(xOnBase-half_x)*Diff; double basey = screen_vcenter-(yOnBase-half_y)*Diff; GUI_SetLineStyle(GUI_LS_SOLID); GUI_SetColor(color); GUI_DrawPoint(basex, basey); GUI_DrawHLine(basey, basex - 10, basex - 2); GUI_DrawHLine(basey, basex + 2, basex + 10); GUI_DrawVLine(basex, basey - 10, basey - 2); GUI_DrawVLine(basex, basey + 2, basey + 10); GUI_SetFont(GUI_FONT_13_1); GUI_SetColor(pColor->textColor); sprintf(pStrBuf,"name:%s",pSnapLink->Boat.name); GUI_DispStringAt(pStrBuf, basex + 10, basey + 10); GUI_DispStringAt("N", basex + 10, basey + 10 + GUI_GetFontSizeY()); lltostr(pSnapLink->Boat.latitude, pStrBuf); GUI_DispStringAt(pStrBuf, basex + 23, basey+10+GUI_GetFontSizeY()); GUI_DispStringAt("E", basex + 10, basey + 10+GUI_GetFontSizeY()*2); lltostr(pSnapLink->Boat.longitude, pStrBuf); GUI_DispStringAt(pStrBuf, basex + 23, basey+10+GUI_GetFontSizeY()*2); GUI_DispStringAt("SOG:", basex + 10, basey +10+ GUI_GetFontSizeY()*3); sprintf(pStrBuf, "%2d.%d", pSnapLink->Boat.SOG/10, pSnapLink->Boat.SOG%10); GUI_DispStringAt(pStrBuf, basex + 45, basey +10+ GUI_GetFontSizeY()*3); GUI_DispStringAt("COG:", basex + 10, basey + 10+GUI_GetFontSizeY()*4); sprintf(pStrBuf, "%3d", pSnapLink->Boat.COG/10); pStrBuf[3] = 194; pStrBuf[4] = 176; pStrBuf[5] = '\0'; GUI_DispStringAt(pStrBuf, basex + 45, basey + 10+GUI_GetFontSizeY()*4); }
/***************************************************************************** * Function - DrawArrow * DESCRIPTION: *****************************************************************************/ void ScrollBar::DrawArrow(int xpos, int ypos, int heigh, int width, bool upwards) { GUI_SetColor(mpSliderFrame->GetFillingColour()); // Up arrow frame U8 j = xpos; for (U8 i = 0; i < heigh; i++) { if (i % 2 == 0) { j++; } GUI_DrawHLine((upwards ? ypos - i : ypos + i), j, width - j ); } }
/********************************************************************* * * _ShowDynamicCSM * * Function description * Shows 5 different weights of the same font by applying dynamic CSM adjustments. */ static void _ShowDynamicCSM(void) { double Alpha; double S0; double S1; double T0; double T1; double R; int i; int j; int N; N = 5; GUI_Clear(); i = 0; GUI_ITYPE_GetFamilyName(&_aFont[i], _acFamily, sizeof(_acFamily)); GUI_ITYPE_GetStyleName(&_aFont[i], _acStyle, sizeof(_acStyle)); GUI_SetFont(&GUI_Font20_1); GUI_DispString(" Edge font: "); GUI_DispString(_acFamily); GUI_DispString(", "); GUI_DispString(_acStyle); GUI_DispNextLine(); GUI_DrawHLine(GUI_GetDispPosY(), 0, 0xfff); GUI_UC_SetEncodeUTF8(); GUI_SetFont(&_aFont[0]); GUI_ITYPE_SetOutputStyle(&_aFont[0], &_aCS[0], (long)ITYPE_NO_EFFECT); // Turn off all effects GUI_ITYPE_SetOutputStyle(&_aFont[0], &_aCS[0], (long)ITYPE_EDGE_GRAYMAP4); // Edge graymap output GUI_DispString("** iType Dynamic CSM tuning **\n"); GUI_DispNextLine(); // // Parameters for adjustments // R = 1.4; S0 = 0.0; S1 = -0.001; T0 = 0.01; T1 = 0.007; // // Make 5 sets of adjustments which range from -R to R. // for (j = 0; j < N; j++){ Alpha = R * (2 * j / (N - 1) - 1); GUI_ITYPE_SetCSMAdjustments(&_aFont[i], &_aCS[i], (FS_FIXED)(Alpha*S0*65536), (FS_FIXED)(Alpha*S1*65536), (FS_FIXED)(Alpha*T0*65536), (FS_FIXED)(Alpha*T1*65536)); GUI_DispString("\xe5\x9f\xba\xe6\x9c\xac\xe4\xb8\x8a\xe8\xae\xa1\xe7\xae\x97\xe6\x9c\xba\xe5\x8f\xaa\xe6\x98\xaf\xe5\xa4\x84\xe7\x90\x86\xe6\x95\xb0\xe5\xad\x97\xe5\xae\x83\xe4\xbb\xac\xe6\x8c\x87\xe5\xae\x9a\xe4\xb8\x80\xe4\xb8\xaa\n"); } GUI_Delay(PAGE_DELAY); }
/********************************************************************* * * _ShowLanguages */ static void _ShowLanguages(void) { const char Bopomofo_string[] = { "\nBopomofo: \xe3\x84\x85 \xe3\x84\x86 \xe3\x84\x87 \xe3\x84\x88 \xe3\x84\x89 \xe3\x84\x8a \xe3\x84\x8b \xe3\x84\x8c \xe3\x84\x8d \xe3\x84\x8e \xe3\x84\x8f \xe3\x84\x90 \xe3\x84\x91 \xe3\x84\x92 \xe3\x84\x93\n" }; const char Simplified_Chinese[] = { "\nSimplified: \xe5\x9f\xba\xe6\x9c\xac\xe4\xb8\x8a\xe8\xae\xa1\xe7\xae\x97\xe6\x9c\xba\xe5\x8f\xaa\xe6\x98\xaf\xe5\xa4\x84\xe7\x90\x86\xe6\x95\xb0\xe5\xad\x97\xe5\xae\x83\xe4\xbb\xac\xe6\x8c\x87\xe5\xae\x9a\n" }; const char Traditional_Chinese[] = { "\nTraditional: \xe9\x80\x99\xe4\xba\x9b\xe7\xb7\xa8\xe7\xa2\xbc\xe7\xb3\xbb\xe7\xb5\xb1\xe4\xb9\x9f\xe6\x9c\x83\xe4\xba\x92\xe7\x9b\xb8\xe8\xa1\x9d\xe7\xaa\x81\xe4\xb9\x9f\xe5\xb0\xb1\xe6\x98\xaf\xe8\xaa\xaa\xe5\x85\xa9\xe7\xa8\xae" }; int i; GUI_Clear(); i = 0; GUI_ITYPE_GetFamilyName(&_aFont[i], _acFamily, sizeof(_acFamily)); GUI_ITYPE_GetStyleName(&_aFont[i], _acStyle, sizeof(_acStyle)); GUI_SetFont(&GUI_Font20_1); GUI_DispString(" Linked font: "); GUI_DispString(_acFamily); GUI_DispString(", "); GUI_DispString(_acStyle); GUI_DispNextLine(); GUI_DrawHLine(GUI_GetDispPosY(), 0, 0xfff); // // Show alphabet strings // GUI_SetFont(&_aFont[i]); GUI_DispString("** iType User Defined Linked Font **"); GUI_UC_SetEncodeUTF8(); GUI_ITYPE_SetOutputStyle(&_aFont[i], &_aCS[i], (long)ITYPE_NO_EFFECT); // Turn off all effects GUI_ITYPE_SetOutputStyle(&_aFont[i], &_aCS[i], (long)ITYPE_GRAYMAP4); // Graymap output GUI_DispString("\nabcdefghijklmnopqrstuvwxyz\n"); GUI_DispString("ABCDEFGHIJKLMNOPQRSTUVWXYZ\n"); // // Show language strings // GUI_DispString(Bopomofo_string); GUI_DispString(Simplified_Chinese); GUI_DispString(Traditional_Chinese); GUI_UC_SetEncodeNone(); GUI_Delay(PAGE_DELAY); }
/** * @brief Callback routine of desktop window status. * @param pMsg: pointer to data structure of type WM_MESSAGE * @retval None */ static void _cbStatus(WM_MESSAGE * pMsg) { int xSize, ySize; static uint8_t TempStr[50]; static WM_HTIMER hTimerTime; static WM_HTIMER hSpriteTime; RTC_TimeTypeDef RTC_Time; RTC_DateTypeDef RTC_DateStructure; uint8_t sec, min, hour, day, month; uint16_t year; WM_HWIN hWin; hWin = pMsg->hWin; switch (pMsg->MsgId) { case WM_CREATE: hTimerTime = WM_CreateTimer(hWin, ID_TIMER_TIME, 1000, 0); if(settings.b.enable_sprite) { hSpriteTime = WM_CreateTimer(hWin, ID_SPRITE_TIME, 50, 0); } break; case WM_DELETE: WM_DeleteTimer(hTimerTime); if(settings.b.enable_sprite) { WM_DeleteTimer(hSpriteTime); } break; case WM_TIMER: if( WM_GetTimerId(pMsg->Data.v) == ID_TIMER_TIME) { WM_InvalidateWindow(hWin); WM_RestartTimer(pMsg->Data.v, 1000); } else if( WM_GetTimerId(pMsg->Data.v) == ID_SPRITE_TIME) { if(settings.b.enable_sprite) { if(SpriteDisabled == 0) { _MoveSprite(&_aSprite[0]); } } WM_RestartTimer(pMsg->Data.v, 100); } break; case WM_PAINT: xSize = WM_GetWindowSizeX(hWin); ySize = WM_GetWindowSizeY(hWin); /* Draw background */ GUI_SetColor(0x40303030); GUI_FillRect(0, 0, xSize , ySize - 3); GUI_SetColor(0x808080); GUI_DrawHLine(ySize - 2, 0, xSize ); GUI_SetColor(0x404040); GUI_DrawHLine(ySize - 1, 0, xSize ); /* Draw time & Date */ GUI_SetTextMode(GUI_TM_TRANS); GUI_SetColor(GUI_WHITE); GUI_SetFont(GUI_FONT_13B_ASCII); k_GetTime(&RTC_Time); sec = RTC_Time.Seconds; min = RTC_Time.Minutes; hour = RTC_Time.Hours; k_GetDate(&RTC_DateStructure); sprintf((char *)TempStr, "%02d:%02d:%02d", hour , min, sec); GUI_DispStringAt((char *)TempStr, xSize - 50, 4); year = RTC_DateStructure.Year + 2014; month = RTC_DateStructure.Month; day = RTC_DateStructure.Date; if((day > 0) && (day <= 31) && (month > 0)&& (month <= 12) && (year >= 1900)) { sprintf((char *)TempStr, "%02d, %s, %04d", day , strMonth[month-1], year); } else { sprintf((char *)TempStr, "01, January, 2014"); } GUI_DispStringHCenterAt((char *)TempStr, xSize / 2, 4); /* USB */ if(k_StorageGetStatus(USB_DISK_UNIT)) { GUI_DrawBitmap(&bmusbdisk, xSize - 80, 0); } /* MSD */ if(k_StorageGetStatus(MSD_DISK_UNIT)) { GUI_DrawBitmap(&bmmicrosd, xSize - 80 - 35 * k_StorageGetStatus(USB_DISK_UNIT) , 0); } sprintf((char *)TempStr, "CPU : %d %%", osGetCPUUsage()); if(osGetCPUUsage() > 95 ) { /* waiting for user input when using dialog box*/ sprintf((char *)TempStr, "CPU : 95 %%"); } GUI_DispStringAt( (char *)TempStr, 50, 4); break; default: WM_DefaultProc(pMsg); } }
/********************************************************************* * * _Paint */ static void _Paint(LISTVIEW_Handle hObj, LISTVIEW_Obj* pObj, WM_MESSAGE* pMsg) { const GUI_ARRAY* pRow; GUI_RECT ClipRect, Rect; int NumRows, NumVisRows, NumColumns; int LBorder, RBorder, EffectSize; int xPos, yPos, Width, RowDistY; int Align, i, j, EndRow; /* Init some values */ NumColumns = HEADER_GetNumItems(pObj->hHeader); NumRows = GUI_ARRAY_GetNumItems(&pObj->RowArray); NumVisRows = _GetNumVisibleRows(hObj, pObj); RowDistY = LISTVIEW__GetRowDistY(pObj); LBorder = pObj->LBorder; RBorder = pObj->RBorder; EffectSize = pObj->Widget.pEffect->EffectSize; yPos = HEADER_GetHeight(pObj->hHeader) + EffectSize; EndRow = pObj->ScrollStateV.v + (((NumVisRows + 1) > NumRows) ? NumRows : NumVisRows + 1); /* Calculate clipping rectangle */ ClipRect = *(const GUI_RECT*)pMsg->Data.p; GUI_MoveRect(&ClipRect, -pObj->Widget.Win.Rect.x0, -pObj->Widget.Win.Rect.y0); WM_GetInsideRectExScrollbar(hObj, &Rect); GUI__IntersectRect(&ClipRect, &Rect); /* Set drawing color, font and text mode */ LCD_SetColor(pObj->Props.aTextColor[0]); GUI_SetFont(pObj->Props.pFont); GUI_SetTextMode(GUI_TM_TRANS); /* Do the drawing */ for (i = pObj->ScrollStateV.v; i < EndRow; i++) { pRow = (const GUI_ARRAY*)GUI_ARRAY_GetpItem(&pObj->RowArray, i); if (pRow) { Rect.y0 = yPos; /* Break when all other rows are outside the drawing area */ if (Rect.y0 > ClipRect.y1) { break; } Rect.y1 = yPos + RowDistY - 1; /* Make sure that we draw only when row is in drawing area */ if (Rect.y1 >= ClipRect.y0) { int ColorIndex; /* Set background color */ if (i == pObj->Sel) { ColorIndex = (pObj->Widget.State & WIDGET_STATE_FOCUS) ? 2 : 1; } else { ColorIndex = 0; } LCD_SetBkColor(pObj->Props.aBkColor[ColorIndex]); /* Iterate over all columns */ if (pObj->ShowGrid) { Rect.y1--; } xPos = EffectSize - pObj->ScrollStateH.v; for (j = 0; j < NumColumns; j++) { Width = HEADER_GetItemWidth(pObj->hHeader, j); Rect.x0 = xPos; /* Break when all other columns are outside the drawing area */ if (Rect.x0 > ClipRect.x1) { break; } Rect.x1 = xPos + Width - 1; /* Make sure that we draw only when column is in drawing area */ if (Rect.x1 >= ClipRect.x0) { LISTVIEW_ITEM * pItem; pItem = (LISTVIEW_ITEM *)GUI_ARRAY_GetpItem(pRow, j); if (pItem->hItemInfo) { LISTVIEW_ITEM_INFO * pItemInfo; pItemInfo = (LISTVIEW_ITEM_INFO *)GUI_ALLOC_h2p(pItem->hItemInfo); LCD_SetBkColor(pItemInfo->aBkColor[ColorIndex]); LCD_SetColor(pItemInfo->aTextColor[ColorIndex]); } else { LCD_SetColor(pObj->Props.aTextColor[ColorIndex]); } /* Clear background */ GUI_ClearRect(Rect.x0, Rect.y0, Rect.x1, Rect.y1); /* Draw text */ Rect.x0 += LBorder; Rect.x1 -= RBorder; Align = *((int*)GUI_ARRAY_GetpItem(&pObj->AlignArray, j)); GUI_DispStringInRect(pItem->acText, &Rect, Align); if (pItem->hItemInfo) { LCD_SetBkColor(pObj->Props.aBkColor[ColorIndex]); } } xPos += Width; } /* Clear unused area to the right of items */ if (xPos <= ClipRect.x1) { GUI_ClearRect(xPos, Rect.y0, ClipRect.x1, Rect.y1); } } yPos += RowDistY; } } /* Clear unused area below items */ if (yPos <= ClipRect.y1) { LCD_SetBkColor(pObj->Props.aBkColor[0]); GUI_ClearRect(ClipRect.x0, yPos, ClipRect.x1, ClipRect.y1); } /* Draw grid */ if (pObj->ShowGrid) { LCD_SetColor(pObj->Props.GridColor); yPos = HEADER_GetHeight(pObj->hHeader) + EffectSize - 1; for (i = 0; i < NumVisRows; i++) { yPos += RowDistY; /* Break when all other rows are outside the drawing area */ if (yPos > ClipRect.y1) { break; } /* Make sure that we draw only when row is in drawing area */ if (yPos >= ClipRect.y0) { GUI_DrawHLine(yPos, ClipRect.x0, ClipRect.x1); } } xPos = EffectSize - pObj->ScrollStateH.v; for (i = 0; i < NumColumns; i++) { xPos += HEADER_GetItemWidth(pObj->hHeader, i); /* Break when all other columns are outside the drawing area */ if (xPos > ClipRect.x1) { break; } /* Make sure that we draw only when column is in drawing area */ if (xPos >= ClipRect.x0) { GUI_DrawVLine(xPos, ClipRect.y0, ClipRect.y1); } } } /* Draw the effect */ WIDGET__EFFECT_DrawDown(&pObj->Widget); }
/** * @brief callback for video window * @param pMsg: pointer to a data structure of type WM_MESSAGE * @retval None */ static void _cbplaybackwin(WM_MESSAGE * pMsg) { WM_HWIN hItem; int Id, NCode; char tmp[64]; switch (pMsg->MsgId) { case WM_CREATE: SelLayer = 1; hItem = BUTTON_CreateEx(398 - 160, 442, 40, 40, pMsg->hWin, WM_CF_SHOW, 0, ID_BUTTON_BACK); WM_SetCallback(hItem, _cbButton_back); hItem = BUTTON_CreateEx(449 - 160, 442, 40, 40, pMsg->hWin, WM_CF_SHOW, 0, ID_BUTTON_STOP); WM_SetCallback(hItem, _cbButton_stop); hItem = BUTTON_CreateEx(495 - 160, 441, 40, 40, pMsg->hWin, WM_CF_SHOW, 0, PLAY_VIDEO_ID); WM_SetCallback(hItem, _cbButton_play); hItem = BUTTON_CreateEx(540 - 160, 442, 40, 40, pMsg->hWin, WM_CF_SHOW, 0, ID_BUTTON_FORE); WM_SetCallback(hItem, _cbButton_fore); hItem = SLIDER_CreateEx(72, 420, 510, 13, pMsg->hWin, WM_CF_SHOW, 0, ID_SLIDER_DURATION); SLIDER_SetBkColor(hItem, GUI_TRANSPARENT); SLIDER_SetFocusColor (hItem, 0x00DCA939); SLIDER_SetValue(hItem, 0); SLIDER_SetWidth(hItem, 0); SLIDER_SetSTSkin(hItem); hItem = BUTTON_CreateEx(568, 0, 70, 70, pMsg->hWin, WM_CF_SHOW, 0, ID_BUTTON_MENU); WM_SetCallback(hItem, _cbButton_menu); hItem = BUTTON_CreateEx(0, 410, 70, 70, pMsg->hWin, WM_CF_SHOW, 0, ID_BUTTON_EXIT_FROM_VIDEO); WM_SetCallback(hItem, _cbButton_exit1); /* Title Initialization in play list */ hItem = TEXT_CreateEx(10, 20, 100, 40, pMsg->hWin, WM_CF_SHOW, 0, ID_ELAPSED_TIME, "00:00"); TEXT_SetFont(hItem, GUI_FONT_20B_1); TEXT_SetTextColor(hItem, GUI_WHITE); /* Title Initialization in play list */ hItem = TEXT_CreateEx(50, 40, 50, 30, pMsg->hWin, WM_CF_SHOW, 0, ID_TIME, "00:00"); TEXT_SetFont(hItem, GUI_FONT_16B_1); TEXT_SetTextColor(hItem, GUI_WHITE); hItem = TEXT_CreateEx(150, 20, 350, 30, pMsg->hWin, WM_CF_SHOW, TEXT_CF_HCENTER, ID_VIDEO_NAME, "File Name"); TEXT_SetFont(hItem, GUI_FONT_20B_1); TEXT_SetTextColor(hItem, GUI_WHITE); hItem = TEXT_CreateEx(150, 48, 350, 30, pMsg->hWin, WM_CF_SHOW, TEXT_CF_HCENTER, ID_VIDEO_FORMAT, "Format : MJPEG"); TEXT_SetFont(hItem, GUI_FONT_13B_1); TEXT_SetTextColor(hItem, GUI_WHITE); hItem = TEXT_CreateEx(548, 200, 260, 20, pMsg->hWin, WM_CF_SHOW, TEXT_CF_LEFT, ID_FPS, "Rate : 20 fps"); TEXT_SetFont(hItem, GUI_FONT_13B_1); TEXT_SetTextColor(hItem, GUI_WHITE); hItem = TEXT_CreateEx(548, 220, 260, 20, pMsg->hWin, WM_CF_SHOW, TEXT_CF_LEFT, ID_FEATURES_FPU, "FPU : ON"); TEXT_SetFont(hItem, GUI_FONT_13B_1); TEXT_SetTextColor(hItem, GUI_WHITE); hItem = TEXT_CreateEx(548, 240, 260, 20, pMsg->hWin, WM_CF_SHOW, TEXT_CF_LEFT, ID_FEATURES_IC, "I-Cache : ON"); TEXT_SetFont(hItem, GUI_FONT_13B_1); TEXT_SetTextColor(hItem, GUI_WHITE); hItem = TEXT_CreateEx(548, 260, 260, 20, pMsg->hWin, WM_CF_SHOW, TEXT_CF_LEFT, ID_FEATURES_DC, "D-Cache : ON"); TEXT_SetFont(hItem, GUI_FONT_13B_1); TEXT_SetTextColor(hItem, GUI_WHITE); hItem = TEXT_CreateEx(548, 280, 260, 20, pMsg->hWin, WM_CF_SHOW, TEXT_CF_LEFT, ID_FEATURES_CPU, "MCU Load : 0%"); TEXT_SetFont(hItem, GUI_FONT_13B_1); TEXT_SetTextColor(hItem, GUI_WHITE); break; case WM_TIMER: { WM_RestartTimer(pMsg->Data.v, 1000); /* show elapsed time */ hItem = WM_GetDialogItem(pMsg->hWin, ID_ELAPSED_TIME); elapsed_time++; sprintf((char *)tmp , "%02lu:%02lu", elapsed_time/60, elapsed_time%60 ); TEXT_SetText(hItem, tmp); sprintf((char *)tmp , "MCU Load : %d%%", ((osGetCPUUsage() > 90) ? (osGetCPUUsage() - 10) : osGetCPUUsage())); hItem = WM_GetDialogItem(pMsg->hWin, ID_FEATURES_CPU); TEXT_SetText(hItem, tmp); hItem = WM_GetDialogItem(pMsg->hWin, ID_SLIDER_DURATION); SLIDER_SetValue(hItem, (GUI_MOVIE_GetFrameIndex(hvideo)* 100)/ Video_Info.NumFrames); if(step == 0) { step = ((GUI_MOVIE_GetFrameIndex(hvideo)* 100)/ Video_Info.NumFrames); } if(((GUI_MOVIE_GetFrameIndex(hvideo)* 100)/ Video_Info.NumFrames) > (100 - 2*step - 1)) { SLIDER_SetValue(hItem, 100); GUI_Exec(); } } break; case WM_DELETE: if(hTimer != 0) { WM_DeleteTimer(hTimer); hTimer = 0; } case WM_PAINT: GUI_SetColor(0xFF000000 | GUI_BLACK); GUI_SetBkColor(GUI_TRANSPARENT); GUI_Clear(); GUI_SetColor(GUI_BLACK); GUI_DrawHLine(0, 0, 640); GUI_DrawHLine(479, 0, 640); GUI_DrawLine(639, 0, 639, 480); GUI_DrawLine(0, 0, 0, 480); /* Background for total time */ GUI_SetColor(0x00DCA939); GUI_AA_FillRoundedRect((-30), 5, 90, 65, 30); /*Video Information */ GUI_AA_FillRoundedRect(150, 5, 500, 65, 30); /*H/W Information */ GUI_AA_FillRoundedRect(538, 180, 780, 320, 30); break; case WM_NOTIFY_PARENT: Id = WM_GetId(pMsg->hWinSrc); /* Id of widget */ NCode = pMsg->Data.v; /* Notification code */ switch(Id) { case ID_BUTTON_EXIT_FROM_VIDEO: switch(NCode) { case WM_NOTIFICATION_RELEASED: if(VideoPlayer_State != VIDEO_IDLE) { _StopPlay(&hvideo, &Video_File); } GUI_EndDialog(pMsg->hWin, 0); SelLayer = 0; GUI_SetLayerVisEx (1, 0); GUI_SelectLayer(0); WM_HideWindow(hFrame); WM_Exec(); WM_DeleteWindow(hFrame); WM_InvalidateWindow(VideoWin); break; } break; case ID_BUTTON_MENU: switch(NCode) { case WM_NOTIFICATION_RELEASED: if(VideoPlayer_State != VIDEO_IDLE) { _StopPlay(&hvideo, &Video_File); } GUI_EndDialog(pMsg->hWin, 0); SelLayer = 0; GUI_SetLayerVisEx (1, 0); GUI_SelectLayer(0); WM_DeleteWindow(hFrame); WM_HideWindow(VideoWin); WM_Exec(); WM_DeleteWindow(VideoWin); break; } break; case ID_BUTTON_STOP: switch(NCode) { case WM_NOTIFICATION_RELEASED: if(VideoPlayer_State != VIDEO_IDLE) { VideoPlayer_State = VIDEO_STOP; _StopPlay(&hvideo, &Video_File); } WM_InvalidateWindow(pMsg->hWin); break; } break; case ID_BUTTON_FORE: switch(NCode) { case WM_NOTIFICATION_RELEASED: if(VideoPlayer_State == VIDEO_PLAY) { if(file_pos < (VideoList.ptr - 1)) { file_pos++; } else { file_pos = 0; } _StopPlay(&hvideo, &Video_File); _StartPlay(&hvideo, (char *)VideoList.file[file_pos].name, &Video_File, 0, 0); } break; } break; /* Notifications sent by 'progress' Slider */ case ID_SLIDER_DURATION: if(NCode == WM_NOTIFICATION_CLICKED) { hItem = WM_GetDialogItem(pMsg->hWin, ID_SLIDER_DURATION); int32_t newpos; if(VideoPlayer_State == VIDEO_PLAY) { GUI_MOVIE_Pause(hvideo); hItem = WM_GetDialogItem(pMsg->hWin, ID_SLIDER_DURATION); newpos = (SLIDER_GetValue(hItem) * Video_Info.NumFrames)/100; GUI_MOVIE_GotoFrame(hvideo, newpos); GUI_MOVIE_Play(hvideo); elapsed_time = (Video_Info.msPerFrame * newpos)/ 1000; hItem = WM_GetDialogItem(playbackwin, ID_ELAPSED_TIME); sprintf((char *)tmp , "%02lu:%02lu", elapsed_time/60, elapsed_time%60 ); TEXT_SetText(hItem, tmp); WM_InvalidateWindow(hItem); WM_Paint(hItem); } } break; case ID_BUTTON_BACK: switch(NCode) { case WM_NOTIFICATION_RELEASED: if(VideoPlayer_State == VIDEO_PLAY) { if(file_pos > 0) { file_pos--; } else { file_pos = VideoList.ptr - 1; } _StopPlay(&hvideo, &Video_File); _StartPlay(&hvideo, (char *)VideoList.file[file_pos].name, &Video_File, 0, 0); } break; } break; case PLAY_VIDEO_ID: switch(NCode) { case WM_NOTIFICATION_RELEASED: if((VideoPlayer_State == VIDEO_IDLE) || (VideoPlayer_State == VIDEO_PAUSE)) { hTimer = WM_CreateTimer(playbackwin, 0, 1000, 0); GUI_MOVIE_Play(hvideo); VideoPlayer_State = VIDEO_PLAY; } else if(VideoPlayer_State == VIDEO_STOP) { _StartPlay(&hvideo, (char *)VideoList.file[file_pos].name, &Video_File, 0, 0); VideoPlayer_State = VIDEO_PLAY; } else { GUI_MOVIE_Pause(hvideo); VideoPlayer_State = VIDEO_PAUSE; if(hTimer != 0) { WM_DeleteTimer(hTimer); hTimer = 0; } } break; } break; } break; default: WM_DefaultProc(pMsg); break; } }
/********************************************************************* * * 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); } }
void TH_GUI (void const *argument) { static volatile uint16_t i=0; static uint16_t Triggered_Sample=0; osEvent evt; GUI_MEMDEV_Handle hMem0; GUI_SelectLayer(0); hMem0 = GUI_MEMDEV_Create(0,0,480,272); if(!GUI_CURSOR_GetState()) GUI_CURSOR_Select(&GUI_CursorCrossM); GUI_CURSOR_Show(); while (1) { Anal_CH1_Set(/*Main loop start*/); Anal_CH2_Set(/*Wait start*/); evt = osSignalWait(DMA_ConvCpltSig,(uint32_t)2); if( evt.status == osEventTimeout) Error_Handler(); Anal_CH2_Reset(/*Wait finish*/); //osSignalSet(tid_Touch,GUI_TouchStateReqSig); Anal_CH3_Set(/*Copy start*/); for(i=0;i<ADC_BUFFER_LENGTH;i++) // <- Temporary. Take the full advantage of DMA ! values_BUF[i]=255-values[i]; Anal_CH3_Reset(/*Copy finish*/); HAL_ADC_Start_DMA(&g_AdcHandle, values, ADC_BUFFER_LENGTH); osSignalClear(tid_TH_GUI, DMA_ConvCpltSig); Anal_CH4_Set(/*Wait start*/); osSignalWait(GUI_TouchGetSig,(uint32_t)0); GUI_CURSOR_SetPosition(g_Touched.pState->x,g_Touched.pState->y); Anal_CH4_Reset(/*Wait finish*/); Trigger_Point = g_Touched.MSG; Triggered_Sample = Trigger(Trigger_Point, values_BUF, ADC_BUFFER_LENGTH, 1348000UL); //if(Triggered_Sample >=20)Triggered_Sample -=20; // Offset to see the edge in the center <- bullshit ? GUI_MEMDEV_Select(hMem0); GUI_MEMDEV_Clear(hMem0); GUI_SetColor(GUI_DARKGRAY); GUI_FillRect(0,0,480,272); GUI_SetColor(GUI_BLACK); GUI_DrawRect(34,5,474,266); GUI_SetColor(GUI_WHITE); GUI_FillRect(35,6,475,266); Draw_GraphGrid(440,260,40,40); GUI_SetColor(GUI_BLUE); /*Draw garph start*/HAL_GPIO_TogglePin(GPIOI,GPIO_PIN_1); GUI_DrawGraph((short*)&values_BUF[Triggered_Sample],440,35,6); // Useful: GUI_COUNTOF(values) /*Draw garph finish*/HAL_GPIO_TogglePin(GPIOI,GPIO_PIN_1); GUI_SetColor(GUI_ORANGE); GUI_DrawHLine(Trigger_Point,0,480); GUI_FillCircle(15,Trigger_Point,10); GUI_SetColor(GUI_YELLOW); GUI_DrawCircle(15,Trigger_Point,10); GUI_MEMDEV_CopyToLCD(hMem0); Anal_CH1_Reset(/*Main loop finish*/); osThreadYield (); // suspend thread } }