/********************************************************************* * * _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); } }
/********************************************************************* * * _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); }
/******************************************************************* * * _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); } } }
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); } } }
/********************************************************************* * * _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); } }
/******************************************************************* * * _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); }
/************************************************************************************** * 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); }
/********************************************************************* * * _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; }
/********************************************************************* * * 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 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); } }
//@@@@@@@@@@@@@@@@@@@@@@ 绘制网格 @@@@@@@@@@@@@@@@@@@@@@@@@@ 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 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); }
/******************************************************************* * * _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); }
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); }
/********************************************************************* * * _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); }
void GUIDEMO_ShowColorBar(void) { int nBars = 13; int YSize = LCD_GetYSize(); int y0 = 70; int yStep = (YSize - y0 - (YSize < 320 ? 0 : 60)) / nBars; int i; int x0 = 60; int NumColors = LCD_GetDevCap(LCD_DEVCAP_NUMCOLORS); int xsize = LCD_GetDevCap(LCD_DEVCAP_XSIZE); xsize -=x0; GUIDEMO_ShowIntro("Color bar", "uC/GUI integrated color" "\nmanagement always find the" "\nbest available color for any" "\nlogical color"); GUI_SetColor(GUI_WHITE); GUI_SetBkColor(GUI_BLACK); GUI_Clear(); GUI_SetFont(&GUI_Font8x16); GUI_DispString("Color bars\n"); GUI_SetFont(&GUI_Font8_ASCII); #ifdef LCD_CONTROLLER GUI_DispString("\nLCD_CONTROLLER: "); GUI_DispDecMin(LCD_CONTROLLER); GUI_DispString("\n"); #endif GUI_DispDecMin(LCD_BITSPERPIXEL); GUI_DispString(" bpp"); #ifdef LCD_BUSWIDTH GUI_DispString(", "); GUI_DispDecMin(LCD_BUSWIDTH); GUI_DispString(" bit bus"); #endif GUI_DispString(", "); GUI_DispDecMin(NumColors); GUI_DispString(" colors\n"); #if (LCD_FIXEDPALETTE) GUI_DispString("Fixed palette: "); GUI_DispDecMin(LCD_FIXEDPALETTE); #else GUI_DispString("(Custom)"); #endif GUI_SetFont(&GUI_Font8x8); GUI_SetColor(GUI_WHITE); GUI_DispStringAt("Red", 0, y0 + yStep); GUI_DispStringAt("Green", 0, y0 + 3 * yStep); GUI_DispStringAt("Blue", 0, y0 + 5 * yStep); GUI_DispStringAt("Grey", 0, y0 + 6 * yStep); GUI_DispStringAt("Yellow", 0, y0 + 8 * yStep); GUI_DispStringAt("Cyan", 0, y0 + 10 * yStep); GUI_DispStringAt("Magenta", 0, y0 + 12 * yStep); for (i = 0; (i < xsize) && !GUIDEMO_CheckCancel(); i++) { U16 cs = (255 * (U32)i) / xsize; U16 x = x0 + i;; /* Red */ GUI_SetColor(cs); GUI_DrawVLine(x, y0, y0 + yStep - 1); GUI_SetColor(0x0000ff + (255 - cs) * 0x10100L); GUI_DrawVLine(x, y0 + yStep, y0 + 2 * yStep - 1); /* Green */ GUI_SetColor(cs<<8); GUI_DrawVLine(x, y0 + 2 * yStep, y0 + 3 * yStep - 1); GUI_SetColor(0x00ff00 + (255 - cs) * 0x10001L); GUI_DrawVLine(x, y0 + 3 * yStep, y0 + 4 * yStep - 1); /* Blue */ GUI_SetColor(cs * 0x10000L); GUI_DrawVLine(x, y0 + 4 * yStep, y0 + 5 * yStep - 1); GUI_SetColor(0xff0000 + (255 - cs) * 0x00101L); GUI_DrawVLine(x, y0 + 5 * yStep, y0 + 6 * yStep - 1); /* Gray */ GUI_SetColor(cs * 0x10101L); GUI_DrawVLine(x, y0 + 6 * yStep, y0 + 7 * yStep - 1); /* Yellow */ GUI_SetColor(cs * 0x00101L); GUI_DrawVLine(x, y0 + 7 * yStep, y0 + 8 * yStep - 1); GUI_SetColor(0x00ffff + (255 - cs) * 0x10000L); GUI_DrawVLine(x, y0 + 8 * yStep, y0 + 9 * yStep - 1); /* Cyan */ GUI_SetColor(cs * 0x10100L); GUI_DrawVLine(x, y0 + 9 * yStep, y0 + 10 * yStep - 1); GUI_SetColor(0xffff00 + (255 - cs) * 0x00001L); GUI_DrawVLine(x, y0 + 10 * yStep, y0 + 11 * yStep - 1); /* Magenta */ GUI_SetColor(cs * 0x10001L); GUI_DrawVLine(x, y0 + 11 * yStep, y0 + 12 * yStep - 1); GUI_SetColor(0xff00ff + (255 - cs) * 0x00100L); GUI_DrawVLine(x, y0 + 12 * yStep, y0 + 13 * yStep - 1); } GUIDEMO_Wait(); }
/********************************************************************* * * _Paint */ static void _Paint(LISTVIEW_Handle hObj, LISTVIEW_Obj* pObj, WM_MESSAGE* pMsg) { const LISTVIEW_ROW* 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 = LISTVIEW__GetNumColumns(pObj); NumRows = LISTVIEW__GetNumRows(pObj); 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; /* 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); /* Sort before drawing, because scroll position may change */ if (pObj->hSort && (pObj->SortIndex >= 0)) { LISTVIEW_SORT * pSort; pSort = (LISTVIEW_SORT *)GUI_ALLOC_h2p(pObj->hSort); if (pSort->fpSort(hObj)) { return; /* Return on error */ } } /* Calculate end row after sorting, because scroll position may have changed */ EndRow = pObj->ScrollStateV.v + (((NumVisRows + 1) > NumRows) ? NumRows : NumVisRows + 1); /* Do the drawing */ for (i = pObj->ScrollStateV.v; i < EndRow; i++) { pRow = _GetpRow(pObj, 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 (pRow->Disabled) { ColorIndex = LISTVIEW_CI_DISABLED; } else if (i == pObj->Sel) { ColorIndex = (pObj->Widget.State & WIDGET_STATE_FOCUS) ? LISTVIEW_CI_SELFOCUS : LISTVIEW_CI_SEL; } else { ColorIndex = LISTVIEW_CI_UNSEL; } 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_COLUMN* pColumn; LISTVIEW_CELL* pCell; pCell = (LISTVIEW_CELL*)GUI_ARRAY_GetpItem(&pRow->CellArray, j); if (pCell) { if (pCell->hCellInfo) { LISTVIEW_CELL_INFO* pCellInfo; pCellInfo = (LISTVIEW_CELL_INFO*) GUI_ALLOC_h2p(pCell->hCellInfo); LCD_SetBkColor(pCellInfo->aBkColor[ColorIndex]); LCD_SetColor(pCellInfo->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; pColumn = (LISTVIEW_COLUMN*) GUI_ARRAY_GetpItem(&pObj->ColumnArray, j); Align = pColumn->Align; GUI_DispStringInRect(pCell->acText, &Rect, Align); if (pCell->hCellInfo) { 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); }
void GUIDEMO_ColorBar(void) { int nBars = 13; int NumColors = LCD_GetDevCap(LCD_DEVCAP_NUMCOLORS); int XSize = LCD_GetXSize(); int i, yStep, y0, x0; int lcd_ysize; int BitsPerPixel; lcd_ysize = LCD_GetYSize(); y0 = 70; x0 = 60; GUIDEMO_ShowIntro("Color bar", "emWin features " "\nan integrated color" "\nmanagement" "\nwill always find the best available color" "\nfor any logical color"); XSize -= x0; yStep = (lcd_ysize - y0 - 60) / nBars; GUI_SetColor(GUI_WHITE); GUI_SetBkColor(GUI_BLACK); GUI_Clear(); GUI_SetFont(&GUI_Font8x16); GUI_DispString("Color bars\n"); GUI_SetFont(&GUI_Font8_ASCII); #ifdef LCD_CONTROLLER GUI_DispString("\nLCD_CONTROLLER: "); GUI_DispDecMin(LCD_CONTROLLER); GUI_DispString("\n"); #endif BitsPerPixel = LCD_GetBitsPerPixel(); GUI_DispDecMin(BitsPerPixel); GUI_DispString(" bpp"); #ifdef LCD_BUSWIDTH GUI_DispString(", "); GUI_DispDecMin(LCD_BUSWIDTH); GUI_DispString(" bit bus"); #endif GUI_DispString(", "); GUI_DispDecMin(NumColors); GUI_DispString(" colors\n"); GUI_SetFont(&GUI_Font8x8); GUI_SetColor(GUI_WHITE); GUI_DispStringAt("Red", 0, y0 + yStep); GUI_DispStringAt("Green", 0, y0 + 3 * yStep); GUI_DispStringAt("Blue", 0, y0 + 5 * yStep); GUI_DispStringAt("Grey", 0, y0 + 6 * yStep); GUI_DispStringAt("Yellow", 0, y0 + 8 * yStep); GUI_DispStringAt("Cyan", 0, y0 + 10 * yStep); GUI_DispStringAt("Magenta", 0, y0 + 12 * yStep); for (i = 0; (i < XSize) && !GUIDEMO_CheckCancel(); i++) { U16 cs = (255 * (U32)i) / XSize; U16 x = x0 + i;; /* Red */ GUI_SetColor(cs); GUI_DrawVLine(x, y0, y0 + yStep - 1); GUI_SetColor(0x0000ff + (255 - cs) * 0x10100L); GUI_DrawVLine(x, y0 + yStep, y0 + 2 * yStep - 1); /* Green */ GUI_SetColor(cs<<8); GUI_DrawVLine(x, y0 + 2 * yStep, y0 + 3 * yStep - 1); GUI_SetColor(0x00ff00 + (255 - cs) * 0x10001L); GUI_DrawVLine(x, y0 + 3 * yStep, y0 + 4 * yStep - 1); /* Blue */ GUI_SetColor(cs * 0x10000L); GUI_DrawVLine(x, y0 + 4 * yStep, y0 + 5 * yStep - 1); GUI_SetColor(0xff0000 + (255 - cs) * 0x00101L); GUI_DrawVLine(x, y0 + 5 * yStep, y0 + 6 * yStep - 1); /* Gray */ GUI_SetColor(cs * 0x10101L); GUI_DrawVLine(x, y0 + 6 * yStep, y0 + 7 * yStep - 1); /* Yellow */ GUI_SetColor(cs * 0x00101L); GUI_DrawVLine(x, y0 + 7 * yStep, y0 + 8 * yStep - 1); GUI_SetColor(0x00ffff + (255 - cs) * 0x10000L); GUI_DrawVLine(x, y0 + 8 * yStep, y0 + 9 * yStep - 1); /* Cyan */ GUI_SetColor(cs * 0x10100L); GUI_DrawVLine(x, y0 + 9 * yStep, y0 + 10 * yStep - 1); GUI_SetColor(0xffff00 + (255 - cs) * 0x00001L); GUI_DrawVLine(x, y0 + 10 * yStep, y0 + 11 * yStep - 1); /* Magenta */ GUI_SetColor(cs * 0x10001L); GUI_DrawVLine(x, y0 + 11 * yStep, y0 + 12 * yStep - 1); GUI_SetColor(0xff00ff + (255 - cs) * 0x00100L); GUI_DrawVLine(x, y0 + 12 * yStep, y0 + 13 * yStep - 1); } GUIDEMO_Wait(); }