/********************************************************************* * * _Paint */ static void _Paint(PROGBAR_Handle hObj) { PROGBAR_Obj* pObj; GUI_RECT r, rInside, rClient, rText; const char* pText; char ac[5]; int tm, xPos; pObj = PROGBAR_H2P(hObj); WM_GetClientRect(&rClient); GUI__ReduceRect(&rInside, &rClient, pObj->Widget.pEffect->EffectSize); xPos = _Value2X(pObj, pObj->v); pText = _GetText(pObj, ac); GUI_SetFont(pObj->pFont); _GetTextRect(pObj, &rText, pText); tm = GUI_SetTextMode(GUI_TM_TRANS); /* Draw left bar */ r = rInside; r.x1 = xPos - 1; WM_SetUserClipArea(&r); _DrawPart(pObj, 0, rText.x0, rText.y0, pText); /* Draw right bar */ r = rInside; r.x0 = xPos; WM_SetUserClipArea(&r); _DrawPart(pObj, 1, rText.x0, rText.y0, pText); WM_SetUserClipArea(NULL); GUI_SetTextMode(tm); WIDGET__EFFECT_DrawDownRect(&pObj->Widget, &rClient); }
/********************************************************************* * * _Paint */ static void _Paint(SLIDER_Obj* pObj/*, GUI_RECT*pRect*/) { int i; int xsize; int x0; GUI_RECT r, rFocus, rSlider, rSlot; WIDGET__GetClientRect(&pObj->Widget, &rFocus); GUI__ReduceRect(&r, &rFocus, 1); xsize = r.x1 - r.x0 + 1 - pObj->Width /*- 2*xSizeEffect*/; x0 = r.x0 + pObj->Width / 2; GUI_SetBkColor(pObj->aBkColor[0]); GUI_Clear(); /* Calculate Slider position */ rSlider = r; rSlider.y0 = 5; rSlider.x0 = x0 + xsize * (pObj->v - pObj->Min) / (pObj->Max - pObj->Min) - pObj->Width/2; rSlider.x1 = rSlider.x0 + pObj->Width; /* Calculate Slot position */ rSlot.x0 = x0; rSlot.x1 = x0 + xsize; rSlot.y0 = (rSlider.y0 + rSlider.y1) /2 -1; rSlot.y1 = rSlot.y0 +3; WIDGET__EFFECT_DrawDownRect(&pObj->Widget, &rSlot); /* Draw slot */ /* Draw the ticks */ GUI_SetColor(GUI_BLACK); for (i = 0; i <= pObj->NumSections; i++) { int x = x0 + xsize * i / pObj->NumSections; WIDGET__DrawVLine(&pObj->Widget, x, 1, 3); } /* Draw the slider itself */ GUI_SetColor(pObj->aColor[0]); WIDGET__FillRectEx(&pObj->Widget, &rSlider); GUI_SetColor(GUI_BLACK); WIDGET__EFFECT_DrawUpRect(&pObj->Widget, &rSlider); /* Draw focus */ if (pObj->Widget.State & WIDGET_STATE_FOCUS) { GUI_SetColor(GUI_BLACK); WIDGET__DrawFocusRect(&pObj->Widget, &rFocus, 0); } }
/********************************************************************* * * _Paint */ static void _Paint(CHECKBOX_Obj* pObj, CHECKBOX_Handle hObj) { GUI_RECT RectBox = {0}; int ColorIndex, EffectSize, Index; EffectSize = pObj->Widget.pEffect->EffectSize; ColorIndex = WM__IsEnabled(hObj); /* Clear inside ... Just in case */ /* Fill with parents background color */ #if WM_SUPPORT_TRANSPARENCY if (!WM_GetHasTrans(hObj)) #endif { if (pObj->Props.BkColor == GUI_INVALID_COLOR) { LCD_SetBkColor(WIDGET__GetBkColor(hObj)); } else { LCD_SetBkColor(pObj->Props.BkColor); } GUI_Clear(); } /* Get size from bitmap */ RectBox.x1 = pObj->Props.apBm[CHECKBOX_BI_ACTIV]->XSize - 1 + 2 * EffectSize; RectBox.y1 = pObj->Props.apBm[CHECKBOX_BI_ACTIV]->YSize - 1 + 2 * EffectSize; WM_SetUserClipRect(&RectBox); /* Clear inside ... Just in case */ LCD_SetBkColor(pObj->Props.aBkColorBox[ColorIndex]); GUI_Clear(); Index = pObj->CurrentState * 2 + ColorIndex; if (pObj->Props.apBm[Index]) { GUI_DrawBitmap(pObj->Props.apBm[Index], EffectSize, EffectSize); } /* Draw the effect arround the box */ WIDGET__EFFECT_DrawDownRect(&pObj->Widget, &RectBox); WM_SetUserClipRect(NULL); /* Draw text if needed */ if (pObj->hpText) { const char * s; GUI_RECT RectText; /* Draw the text */ s = (const char *) GUI_ALLOC_h2p(pObj->hpText); WM_GetClientRect(&RectText); RectText.x0 += RectBox.x1 + 1 + pObj->Props.Spacing; GUI_SetTextMode(GUI_TM_TRANS); LCD_SetColor(pObj->Props.TextColor); GUI_SetFont(pObj->Props.pFont); GUI_DispStringInRect(s, &RectText, pObj->Props.Align); /* Draw focus rectangle */ if (pObj->Widget.State & WIDGET_STATE_FOCUS) { int xSizeText = GUI_GetStringDistX(s); int ySizeText = GUI_GetFontSizeY(); GUI_RECT RectFocus = RectText; switch (pObj->Props.Align & ~(GUI_TA_HORIZONTAL)) { case GUI_TA_VCENTER: RectFocus.y0 = (RectText.y1 - ySizeText + 1) / 2; break; case GUI_TA_BOTTOM: RectFocus.y0 = RectText.y1 - ySizeText; break; } switch (pObj->Props.Align & ~(GUI_TA_VERTICAL)) { case GUI_TA_HCENTER: RectFocus.x0 += ((RectText.x1 - RectText.x0) - xSizeText) / 2; break; case GUI_TA_RIGHT: RectFocus.x0 += (RectText.x1 - RectText.x0) - xSizeText; break; } RectFocus.x1 = RectFocus.x0 + xSizeText - 1; RectFocus.y1 = RectFocus.y0 + ySizeText - 1; LCD_SetColor(pObj->Props.FocusColor); GUI_DrawFocusRect(&RectFocus, -1); } } }
void WIDGET__EFFECT_DrawDown(WIDGET* pWidget) { WIDGET__EFFECT_DrawDownRect(pWidget, NULL); }
/********************************************************************* * * _Paint */ static void _Paint(SLIDER_Obj* pObj, WM_HWIN hObj) { GUI_RECT r, rFocus, rSlider, rSlot; int x0, xsize, i, Range, NumTicks; WIDGET__GetClientRect(&pObj->Widget, &rFocus); GUI__ReduceRect(&r, &rFocus, 1); NumTicks = pObj->NumTicks; xsize = r.x1 - r.x0 + 1 - pObj->Width; x0 = r.x0 + pObj->Width / 2; Range = pObj->Max - pObj->Min; if (Range == 0) { Range = 1; } /* Fill with parents background color */ #if !SLIDER_SUPPORT_TRANSPARENCY /* Not needed any more, since window is transparent*/ if (pObj->Props.BkColor == GUI_INVALID_COLOR) { LCD_SetBkColor(WIDGET__GetBkColor(hObj)); } else { LCD_SetBkColor(pObj->Props.BkColor); } GUI_Clear(); #else if (!WM_GetHasTrans(hObj)) { LCD_SetBkColor(pObj->Props.BkColor); GUI_Clear(); } #endif /* Calculate Slider position */ rSlider = r; rSlider.y0 = 5; rSlider.x0 = x0 + (U32)xsize * (U32)(pObj->v - pObj->Min) / Range - pObj->Width / 2; rSlider.x1 = rSlider.x0 + pObj->Width; /* Calculate Slot position */ rSlot.x0 = x0; rSlot.x1 = x0 + xsize; rSlot.y0 = (rSlider.y0 + rSlider.y1) / 2 - 1; rSlot.y1 = rSlot.y0 + 3; WIDGET__EFFECT_DrawDownRect(&pObj->Widget, &rSlot); /* Draw slot */ /* Draw the ticks */ if (NumTicks < 0) { NumTicks = Range + 1; if (NumTicks > (xsize / 5)) { NumTicks = 11; } } if (NumTicks > 1) { LCD_SetColor(GUI_BLACK); for (i = 0; i < NumTicks; i++) { int x = x0 + xsize * i / (NumTicks - 1); WIDGET__DrawVLine(&pObj->Widget, x, 1, 3); } } /* Draw the slider itself */ LCD_SetColor(pObj->Props.Color); WIDGET__FillRectEx(&pObj->Widget, &rSlider); LCD_SetColor(GUI_BLACK); WIDGET__EFFECT_DrawUpRect(&pObj->Widget, &rSlider); /* Draw focus */ if (pObj->Widget.State & WIDGET_STATE_FOCUS) { LCD_SetColor(pObj->Props.FocusColor); WIDGET__DrawFocusRect(&pObj->Widget, &rFocus, 0); } }