/********************************************************************* * * 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(); } }
/********************************************************************* * * GUIDEMO_Main */ void GUIDEMO_Main(void) { FRAMEWIN_SKINFLEX_PROPS Framewin_Props; #if 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); #if GUIDEMO_USE_VNC GUI_VNC_X_StartServer(0, 0); #endif #if AUTO_BK // Commented out as hardware is not fast enough to draw gradient background. Can be used on faster targets like ARM9 // // Determine if HW has enough memory to draw the gradient circle as background // BitsPerPixel = LCD_GetBitsPerPixel(); if (BitsPerPixel >= 16) { NumFreeBytes = GUI_ALLOC_GetNumFreeBytes(); if (NumFreeBytes > NUMBYTES_NEEDED) { _pfDrawBk = _DrawBkCircle; } else { _pfDrawBk = _DrawBk; } } else { _pfDrawBk = _DrawBkSimple; } #else _pfDrawBk = _DrawBkSimple; #endif _Main(); }
/********************************************************************* * * GUIDEMO_Main */ void GUIDEMO_Main(void) { FRAMEWIN_SKINFLEX_PROPS Framewin_Props; #if GUIDEMO_USE_AUTO_BK int NumFreeBytes; int BitsPerPixel; #endif /*设置在处理动画时要调用的的处理函数,决定终止或继续动画,——cbEffect,用户定义的回调函数*/ GUI_MEMDEV_SetAnimationCallback(_cbEffect, (void *)&_Pressed); /*设置窗口的回调例程*/ WM_SetCallback(WM_HBKWIN, _cbBk); /*将所有按钮设置对水平做出反应*/ BUTTON_SetReactOnLevel(); /*返回framewin皮肤属性*/ FRAMEWIN_GetSkinFlexProps(&Framewin_Props, FRAMEWIN_SKINFLEX_PI_ACTIVE);/*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_SKINFLEX_PI_INACTIVE非活动状态的属性*/ Framewin_Props.Radius = 0; FRAMEWIN_SetSkinFlexProps(&Framewin_Props, FRAMEWIN_SKINFLEX_PI_INACTIVE); /*设置新创建窗口小工具的皮肤*/ FRAMEWIN_SetDefaultSkin (_FRAMEWIN_DrawSkinFlex/*FRAMEWIN_SKIN_FLEX的换肤回调函数*/); /*设置新创建的PROGBAR小工具的皮肤****/ PROGBAR_SetDefaultSkin (PROGBAR_SKIN_FLEX); /*设置新创建的 BUTTON 小工具的皮肤****/ BUTTON_SetDefaultSkin (BUTTON_SKIN_FLEX); /*设置新创建的 SCROLLBAR滑块 小工具的皮肤****/ SCROLLBAR_SetDefaultSkin (SCROLLBAR_SKIN_FLEX); /*设置新创建的 滑块 小工具的皮肤****/ SLIDER_SetDefaultSkin (SLIDER_SKIN_FLEX); /*设置新创建的 heder 小工具的皮肤****/ HEADER_SetDefaultSkin (HEADER_SKIN_FLEX); /* 设置文本绘制模式 */ GUI_SetTextMode (GUI_TM_TRANS); #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(); } }
void GUIDEMO_ColorBar(void) { GUI_COLOR ColorStartBlack, ColorStartWhite; char acText[80] = { 0 }; int NumColors, BitsPerPixel, xSize, ySize; int Time, TimeStart; int Dir, Index; xSize = LCD_GetXSize(); ySize = LCD_GetYSize(); GUIDEMO_ShowIntro("Color bar", "STemWin features an integrated\n" "color management which automatically finds\n" "the best available color for any logical color"); GUIDEMO_DrawBk(1); // // Heading // GUI_SetColor(GUI_WHITE); GUI_SetFont(&GUI_FontRounded22); GUI_DispStringHCenterAt("Color bars", xSize >> 1, 12); GUI_SetFont(&GUI_Font16_ASCII); // // Colors // GUI_DispStringAt("Red", 1, Y_START); GUI_DispStringAt("Green", 1, Y_START + Y_STEP * 2); GUI_DispStringAt("Blue", 1, Y_START + Y_STEP * 4); GUI_DispStringAt("Grey", 1, Y_START + Y_STEP * 5 + (Y_STEP >> 1)); GUI_DispStringAt("Yellow", 1, Y_START + Y_STEP * 7); GUI_DispStringAt("Cyan", 1, Y_START + Y_STEP * 9); GUI_DispStringAt("Magenta", 1, Y_START + Y_STEP * 11); // // Additional Information // GUI_SetFont(&GUI_Font8_ASCII); // // LCD Controller // #ifdef LCD_CONTROLLER GUIDEMO_AddStringToString(acText, "LCD Controller: "); GUIDEMO_AddStringToString(acText, LCD_CONTROLLER); GUI_DispStringAt (acText, 12, ySize - 45); GUIDEMO_ClearText (acText); #endif // // BPP and number of colors // BitsPerPixel = LCD_GetBitsPerPixel(); GUIDEMO_AddIntToString (acText, BitsPerPixel); GUIDEMO_AddStringToString(acText, " bpp"); NumColors = LCD_GetDevCap(LCD_DEVCAP_NUMCOLORS); if (NumColors) { GUIDEMO_AddStringToString(acText, ", "); GUIDEMO_AddIntToString (acText, NumColors); GUIDEMO_AddStringToString(acText, " colors"); } GUI_DispStringAt(acText, 12, ySize - 25); // // Gradients // TimeStart = GUIDEMO_GetTime(); while (((GUIDEMO_GetTime() - TimeStart) < TIME_RUN) && (GUIDEMO_CheckCancel() == 0)) { Time = (GUIDEMO_GetTime() - TimeStart) % ((TIME_PAUSE + TIME_STEP) << 1); Dir = Time / (TIME_PAUSE + TIME_STEP); Time -= Dir * (TIME_PAUSE + TIME_STEP); if (Time > TIME_PAUSE) { continue; } Index = ((Time * 0xFF) / TIME_STEP) ^ (Dir * 0xFF); ColorStartBlack = 0x000000 + 0x010101 * Index; ColorStartWhite = 0xFFFFFF - ColorStartBlack; GUI_DrawGradientH(GRADIENT_START_X, Y_START + Y_STEP * 0, xSize, (Y_START + Y_STEP * 1) - 1, GUI_RED, ColorStartBlack); GUI_DrawGradientH(GRADIENT_START_X, Y_START + Y_STEP * 1, xSize, (Y_START + Y_STEP * 2) - 1, GUI_RED, ColorStartWhite); GUI_DrawGradientH(GRADIENT_START_X, Y_START + Y_STEP * 2, xSize, (Y_START + Y_STEP * 3) - 1, GUI_GREEN, ColorStartBlack); GUI_DrawGradientH(GRADIENT_START_X, Y_START + Y_STEP * 3, xSize, (Y_START + Y_STEP * 4) - 1, GUI_GREEN, ColorStartWhite); GUI_DrawGradientH(GRADIENT_START_X, Y_START + Y_STEP * 4, xSize, (Y_START + Y_STEP * 5) - 1, GUI_BLUE, ColorStartBlack); GUI_DrawGradientH(GRADIENT_START_X, Y_START + Y_STEP * 5, xSize, (Y_START + Y_STEP * 6) - 1, GUI_BLUE, ColorStartWhite); GUI_DrawGradientH(GRADIENT_START_X, Y_START + Y_STEP * 6, xSize, (Y_START + Y_STEP * 7) - 1, GUI_GRAY, ColorStartBlack); GUI_DrawGradientH(GRADIENT_START_X, Y_START + Y_STEP * 7, xSize, (Y_START + Y_STEP * 8) - 1, GUI_YELLOW, ColorStartWhite); GUI_DrawGradientH(GRADIENT_START_X, Y_START + Y_STEP * 8, xSize, (Y_START + Y_STEP * 9) - 1, GUI_YELLOW, ColorStartBlack); GUI_DrawGradientH(GRADIENT_START_X, Y_START + Y_STEP * 9, xSize, (Y_START + Y_STEP * 10) - 1, GUI_CYAN, ColorStartWhite); GUI_DrawGradientH(GRADIENT_START_X, Y_START + Y_STEP * 10, xSize, (Y_START + Y_STEP * 11) - 1, GUI_CYAN, ColorStartBlack); GUI_DrawGradientH(GRADIENT_START_X, Y_START + Y_STEP * 11, xSize, (Y_START + Y_STEP * 12) - 1, GUI_MAGENTA, ColorStartWhite); GUI_DrawGradientH(GRADIENT_START_X, Y_START + Y_STEP * 12, xSize, (Y_START + Y_STEP * 13) - 1, GUI_MAGENTA, ColorStartBlack); GUI_Exec(); } }
/********************************************************************* * * GUI_MEMDEV_CompareWithLCD */ int GUI_MEMDEV_CompareWithLCD(GUI_MEMDEV_Handle hMem, int*px, int*py, int *pExp, int*pAct) { int Ret = 0; /* Make sure memory handle is valid */ if (!hMem) { hMem = GUI_Context.hDevData; } if (!hMem) { return 1; } GUI_LOCK(); { GUI_MEMDEV * pDevData = (GUI_MEMDEV*) GUI_ALLOC_h2p(hMem); /* Convert to pointer */ int y = pDevData->y0; int x0 = pDevData->x0; int XMax = pDevData->XSize + x0; int YMax = pDevData->YSize + y; int Max; int MagX = LCD_GetXMag(); int MagY = LCD_GetYMag(); /* Calculate limits */ if (y < 0) { y = 0; } if (x0 < 0) { x0 = 0; } Max = LCD_GET_YSIZE(); if (YMax > Max) { YMax = Max; } Max = LCD_GET_XSIZE(); if (XMax > Max) { XMax = Max; } for (; y < YMax; y++) { int x = x0; U8 * pData = (U8 *)GUI_MEMDEV__XY2PTR(x, y); for (x = x0; x < XMax; x++) { int Exp = *pData++; int Act = LCD_L0_GetPixelIndex(x * MagX, y * MagY); #if (GUI_NUM_LAYERS > 1) if (LCD_GetBitsPerPixelEx(GUI_Context.SelLayer) > 8) #else if (LCD_GetBitsPerPixel() > 8) #endif { Exp |= (*pData++) << 8; } if (Act != Exp) { *px = x; *py = y; *pAct = Act; *pExp = Exp; Ret = 1; goto Skip; } } } } Skip: GUI_UNLOCK(); return Ret; }
/********************************************************************* * * _InitXbppDDP */ static void _InitXbppDDP(void) { GUI_COLOR Color; int BytesPerPixel; int BitsPerPixel; int x; int y; U32 MaxColor; BitsPerPixel = LCD_GetBitsPerPixel(); if (BitsPerPixel <= 8) { BytesPerPixel = 1; } else if (BitsPerPixel <= 16) { BytesPerPixel = 2; } else { BytesPerPixel = 4; } MaxColor = 1L << BitsPerPixel; _Param.Bm.XSize = XSIZE_XBPP; _Param.Bm.YSize = YSIZE_XBPP; _Param.Bm.BytesPerLine = XSIZE_XBPP; _Param.Bm.BitsPerPixel = BytesPerPixel << 3; _Param.Bm.pData = (U8 *)_Param.aPixels; _Param.Bm.pPal = NULL; _Param.Bm.pMethods = NULL; if (BitsPerPixel > 8) { _Param.Bm.BytesPerLine <<= 1; } Color = 0; switch (BytesPerPixel) { case 1: { U8 * pData; pData = (U8 *)_Param.aPixels; for (y = 0; y < YSIZE_XBPP; y++) { for (x = 0; x < XSIZE_XBPP; x++) { *(pData++) = Color++; if (Color >= MaxColor) { Color = 0; } } } } break; case 2: { U16 * pData; pData = (U16 *)_Param.aPixels; for (y = 0; y < YSIZE_XBPP; y++) { for (x = 0; x < XSIZE_XBPP; x++) { *(pData++) = Color++; if (Color >= MaxColor) { Color = 0; } } } } break; case 4: { U32 * pData; pData = (U32 *)_Param.aPixels; for (y = 0; y < YSIZE_XBPP; y++) { for (x = 0; x < XSIZE_XBPP; x++) { *(pData++) = Color++; if (Color >= MaxColor) { Color = 0; } } } } break; } }
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(); }