/********************************************************************* * * GUI_DrawFocusRect */ void GUI_DrawFocusRect(const GUI_RECT *pRect, int Dist) { GUI_RECT r; GUI__ReduceRect(&r, pRect, Dist); GUI_LOCK(); #if (GUI_WINSUPPORT) WM_ADDORG(r.x0, r.y0); WM_ADDORG(r.x1, r.y1); WM_ITERATE_START(&r); { #endif _DrawFocusRect(&r); #if (GUI_WINSUPPORT) } WM_ITERATE_END(); #endif GUI_UNLOCK(); }
/********************************************************************* * * _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(BUTTON_Obj* pObj, BUTTON_Handle hObj) { const char* s = NULL; unsigned int Index; int State, PressedState, ColorIndex; GUI_RECT rClient, rInside; State = pObj->Widget.State; PressedState = (State & BUTTON_STATE_PRESSED) ? 1 : 0; ColorIndex = (WM__IsEnabled(hObj)) ? PressedState : 2; GUI_SetFont(pObj->Props.pFont); GUI_DEBUG_LOG("BUTTON: Paint(..)\n"); if (pObj->hpText) { s = (const char*) GUI_ALLOC_h2p(pObj->hpText); } GUI_GetClientRect(&rClient); /* Start drawing */ rInside = rClient; /* Draw the 3D effect (if configured) */ #if BUTTON_USE_3D { int EffectSize; if ((PressedState) == 0) { pObj->Widget.pEffect->pfDrawUp(); /* _WIDGET_EFFECT_3D_DrawUp(); */ EffectSize = pObj->Widget.pEffect->EffectSize; } else { LCD_SetColor(0x000000); GUI_DrawRect(rClient.y0, rClient.x0, rClient.x1, rClient.y1); EffectSize = 1; } GUI__ReduceRect(&rInside, &rInside, EffectSize); } #endif /* Draw background */ LCD_SetBkColor (pObj->Props.aBkColor[ColorIndex]); LCD_SetColor (pObj->Props.aTextColor[ColorIndex]); WM_SetUserClipRect(&rInside); GUI_Clear(); /* Draw bitmap. If we have only one, we will use it. If we have to we will use the second one (Index 1) for the pressed state */ if (ColorIndex < 2) { Index = (pObj->ahDrawObj[BUTTON_BI_PRESSED] && PressedState) ? BUTTON_BI_PRESSED : BUTTON_BI_UNPRESSED; } else { Index = pObj->ahDrawObj[BUTTON_BI_DISABLED] ? BUTTON_BI_DISABLED : BUTTON_BI_UNPRESSED; } GUI_DRAW__Draw(pObj->ahDrawObj[Index], 0, 0); /* Draw the actual button (background and text) */ { GUI_RECT r; r = rInside; #if BUTTON_USE_3D if (PressedState) { GUI_MoveRect(&r, BUTTON_3D_MOVE_X,BUTTON_3D_MOVE_Y); } #endif GUI_SetTextMode(GUI_TM_TRANS); GUI_DispStringInRect(s, &r, pObj->Props.Align); } /* Draw focus */ if (State & BUTTON_STATE_FOCUS) { LCD_SetColor(pObj->Props.FocusColor); GUI_DrawFocusRect(&rClient, 2); } WM_SetUserClipRect(NULL); }
/********************************************************************* * * WIDGET_EFFECT_3D_GetRect */ void WIDGET_EFFECT_3D_GetRect(GUI_RECT* pRect) { WM_GetClientRect(pRect); GUI__ReduceRect(pRect, pRect, 2); }
/********************************************************************* * * _WIDGET_EFFECT_3D1L_GetRect */ static void _WIDGET_EFFECT_3D1L_GetRect(GUI_RECT* pRect) { WM_GetClientRect(pRect); GUI__ReduceRect(pRect, pRect, 1); }
/********************************************************************* * * WIDGET__GetInsideRect */ void WIDGET__GetInsideRect(WIDGET* pWidget, GUI_RECT* pRect) { WM__GetClientRectWin(&pWidget->Win, pRect); GUI__ReduceRect(pRect, pRect, pWidget->pEffect->EffectSize); }
/********************************************************************* * * _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); } }
/********************************************************** * _Paint * */ static void _Paint(SLIDER_Obj* pObj, WM_HWIN hObj) { GUI_RECT r, rFocus, rSlider, rSlot; GUI_COLOR SlotColor, SliderColor; int x0, xSize, Range, NumTicks,hasFocus; 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; } if(pObj->Widget.State & WIDGET_STATE_FOCUS) { LCD_SetColor(pObj->aBkColor[1]); SlotColor = pObj->aColor[1]; SliderColor = pObj->aColor[3]; hasFocus = 1; } else { LCD_SetColor(pObj->aBkColor[0]); SlotColor = pObj->aColor[0]; SliderColor = pObj->aColor[2]; hasFocus = 0; } GUI_Clear(); GUI_FillRectEx(&rFocus); 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; LCD_SetColor(SlotColor); rSlot.x0 = x0; rSlot.x1 = x0 + xSize; rSlot.y0 = (rSlider.y0 + rSlider.y1) / 2 - 1; rSlot.y1 = rSlot.y0 + 3; GUI_FillRectEx(&rSlot); if(hasFocus) { LCD_SetColor(GUI_WHITE); GUI_DrawRect(rSlot.x0-1, rSlot.y0-1, rSlot.x1+1,rSlot.y1+1); } LCD_SetColor(SliderColor); GUI_FillCircle(rSlider.x0+pObj->Width/2,(rSlider.y0+rSlider.y1)/2 , pObj->Width/2); if(NumTicks > 0) { LCD_SetColor(GUI_BLACK); GUI_SetFont(GUI_FONT_16B_1); GUI_SetTextMode(GUI_TM_TRANS); GUI_DispDecAt(pObj->v, rSlider.x0+pObj->Width/2-3,(rSlider.y0+rSlider.y1)/2-8, 1); } }
/********************************************************************* * * WIDGET_EFFECT_Simple_GetRect */ void WIDGET_EFFECT_Simple_GetRect(GUI_RECT* pRect) { WM_GetClientRect(pRect); GUI__ReduceRect(pRect, pRect, 1); }