static void _Paint(FRAMEWIN_Obj* pObj) { WM_HWIN hWin = WM_GetActiveWindow(); int xsize = WM_GetWindowSizeX(hWin); int ysize = WM_GetWindowSizeY(hWin); int FrameSize = pObj->FrameSize; GUI_RECT rClient; GUI_GetClientRect(&rClient); GUI_SetFont(pObj->pFont); /* Draw Title */ GUI_SetBkColor((pObj->Widget.State & WIDGET_STATE_CHILD_HAS_FOCUS) ? pObj->BarColor[1] : pObj->BarColor[0]); GUI_SetColor (pObj->TextColor); GUI_SetTextAlign(pObj->TextAlign); GUI_ClearRect(FrameSize,FrameSize, xsize-1-FrameSize, FrameSize+pObj->rClient.y0-1); GUI_DispStringAt( pObj->pText, FrameSize+pObj->XOff, FrameSize+pObj->YOff); /* Draw Frame */ GUI_SetColor (FRAMEWIN_FRAMECOLOR_DEFAULT); /* pObj->BarColor[1]*/ GUI_FillRect (0, 0, xsize-1, FrameSize-1); GUI_FillRect (0, 0, pObj->rClient.x0-1, ysize-1); GUI_FillRect (pObj->rClient.x1+1, 0, xsize-1, ysize-1); GUI_FillRect (0, pObj->rClient.y1+1, xsize-1, ysize-1); GUI_FillRect (0, pObj->TitleHeight+FrameSize, xsize-1, pObj->TitleHeight+2*FrameSize-1); /* Draw Client area */ WM_SetUserClipArea(&pObj->rClient); /*GUI_SetBkColor(pObj->ClientColor); GUI_Clear();*/ WM_SetUserClipArea(NULL); /* Draw the 3D effect (if configured) */ #if FRAMEWIN_USE_3D WIDGET_EFFECT_3D_DrawUp(); #endif }
static void _UpdateInfoWin(void) { #if GUI_WINSUPPORT && GUIDEMO_LARGE GUI_RECT rClient; WM_HWIN hWin; GUI_CONTEXT ContextOld; GUI_SaveContext(&ContextOld); /* Update info window */ WM_ShowWindow(_ahInfoWin[0]); WM_ShowWindow(_ahFrameWin[0]); hWin = WM_SelectWindow(_ahInfoWin[0]); GUI_GetClientRect(&rClient); GUI_SetBkColor(GUI_WHITE); GUI_Clear(); GUI_SetColor(GUI_BLACK); //GUI_SetFont(&GUI_Font13_1); GUI_SetFont(&GUI_FontHZ12); GUI_SetTextAlign(GUI_TA_HCENTER); GUI_DispStringHCenterAt(_sInfo, (rClient.x1 - rClient.x0) / 2, 0); GUI_SetTextAlign(GUI_TA_LEFT); GUI_SetFont(&GUI_Font8_ASCII); GUI_DispStringAt(_sExplain, 0, 20); WM_SelectWindow(hWin); GUI_RestoreContext(&ContextOld); #endif }
static void _DispStringInRect(const char GUI_FAR *s, GUI_RECT* pRect, int TextAlign) { GUI_RECT r; GUI_RECT rLine; int y = 0; int NumLines; const char *sOrg =s; int FontYSize; int xLine = 0; FontYSize = GUI_GetFontSizeY(); if (pRect) { r = *pRect; } else { GUI_GetClientRect(&r); } /* Count the number of lines for vertical alignment */ for (NumLines=1; ;NumLines++) { int LineLen= GUI__GetLineLen(s,0x7fff); s += LineLen; if (GUI__HandleEOLine(&s)) break; } /* Do the vertical alignment */ switch (TextAlign & GUI_TA_VERTICAL) { case GUI_TA_TOP: y = r.y0; break; case GUI_TA_BASELINE: case GUI_TA_BOTTOM: y = r.y1 -NumLines * FontYSize+1; break; case GUI_TA_VCENTER: y = r.y0+(r.y1-r.y0+1 -NumLines * FontYSize) /2; break; } for (s=sOrg; ;) { int LineLen= GUI__GetLineLen(s,0x7fff); int xLineSize = GUI_GetLineDistX(s, LineLen); switch (TextAlign & GUI_TA_HORIZONTAL) { case GUI_TA_HCENTER: xLine = r.x0+(r.x1-r.x0-xLineSize)/2; break; case GUI_TA_LEFT: xLine = r.x0; break; case GUI_TA_RIGHT: xLine = r.x1 -xLineSize; } rLine.x0 = GUI_Context.DispPosX = xLine; rLine.x1 = rLine.x0 + xLineSize-1; rLine.y0 = GUI_Context.DispPosY = y; rLine.y1 = y + FontYSize-1; GUI__DispLine(s, LineLen, &rLine); s += LineLen; y += GUI_GetFontDistY(); if (GUI__HandleEOLine(&s)) break; } }
static void Paint(TERMINAL_Obj* pObj/*, GUI_RECT*pRect*/) { char*s = (char*) WM_HMEM2Ptr(pObj->hpText); GUI_RECT rClient; GUI_DEBUG_LOG("TERMINAL: Paint(..)\n"); GUI_GetClientRect(&rClient); /* Draw background */ GUI_SetBkColor (GUI_WHITE/*pObj->aBkColor[0]*/); GUI_SetColor (GUI_BLACK /*pObj->aTextColor[0]*/); GUI_Clear(); /* Draw the text */ { GUI_RECT rText = rClient; rText.x0 +=3; // GUI_SetFont (pObj->pFont); GUI_DispStringInRect(s, &rText, GUI_TA_LEFT); } }
/***************************************************************************** * FUNCTION - Redraw * DESCRIPTION: See header file *****************************************************************************/ void CrossChalk::Redraw() { if ((mpBlackBoard != NULL) && (mpData != NULL)) { int width = mpBlackBoard->GetWidth(); int height = mpBlackBoard->GetHeight(); int length = mpData->GetSize(); if (length > width) { length = width; } GUI_SetLineStyle(GUI_LS_SOLID); GUI_SetColor(mpBlackBoard->GetColour()); GUI_RECT rect; GUI_GetClientRect(&rect); mpData->Lock(); for (int i = 0; i < length; i++) { if (mpData->IsCurveValueValid(i)) { float val = mpData->GetCurveValueAsPercent(i); int y = height - 1 - (int)(val * (height - 1) / 100.0f); DrawCross(i, y); } } mpData->UnLock(); } }
/********************************************************************* * * _Paint */ static void _Paint(BUTTON_Obj* pObj) { const char*s =NULL; int State = pObj->Widget.State; int PressedState = (State & BUTTON_STATE_PRESSED) ? 1:0; GUI_RECT rClient; GUI_RECT r; GUI_SetFont(pObj->pFont); GUI_DEBUG_LOG("BUTTON: Paint(..)\n"); if (pObj->hpText) { s = (const char*) WM_HMEM2Ptr(pObj->hpText); } GUI_GetClientRect(&rClient); r = rClient; /* Draw background */ GUI_SetBkColor (pObj->aBkColor[PressedState]); GUI_SetColor (pObj->aTextColor[PressedState]); 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 */ { int Index =0; if (pObj->apBitmap[1] && PressedState) { Index =1; } if (pObj->apBitmap[Index]) { #if BUTTON_SUPPORT_STREAMED_BITMAP if(pObj->aBitmapIsStreamed[Index]) { #if BUTTON_SUPPORT_BITMAP_OFFSET GUI_DrawStreamedBitmap((const GUI_BITMAP_STREAM*)(pObj->apBitmap[Index]), pObj->xOffBitmap, pObj->yOffBitmap); #else GUI_DrawBitmapStreamed((const GUI_BITMAP_STREAM*)(pObj->apBitmap[Index]), 0,0); #endif } else #endif { #if BUTTON_SUPPORT_BITMAP_OFFSET GUI_DrawBitmap(pObj->apBitmap[Index], pObj->xOffBitmap[Index], pObj->yOffBitmap[Index]); #else GUI_DrawBitmap(pObj->apBitmap[Index], 0,0); #endif } } } /* Draw the actual button (background and text) */ #if BUTTON_USE_3D if (pObj->Widget.State & BUTTON_STATE_PRESSED) { GUI_MoveRect(&r, BUTTON_3D_MOVE_X,BUTTON_3D_MOVE_Y); } #endif GUI_SetTextMode(GUI_TM_TRANS); GUI_DispStringInRect(s, &r, GUI_TA_HCENTER | GUI_TA_VCENTER); /* Draw the 3D effect (if configured) */ #if BUTTON_USE_3D if ((State & BUTTON_STATE_PRESSED) == 0) { WIDGET_EFFECT_3D_DrawUp(); } else { GUI_SetColor(0x000000); /// TBD: Use halftone GUI_DrawRect(rClient.y0, rClient.x0, rClient.x1, rClient.y1); } #endif /* Draw focus */ if (State & BUTTON_STATE_FOCUS) { GUI_SetColor(GUI_BLACK); GUI_DrawFocusRect(&rClient, 2); } }
/********************************************************************* * * _Paint */ static void _Paint(EDIT_Obj* pObj) { int PixelLen, xSize, ySize, xPosText = 0, xPosCursor = 0, yPosText = 0, yPosCursor = 0, XSizeCursor, YSizeCursor; int IsEnabled; GUI_RECT rClient, rWindow; char * s; s = (char*) WM_HMEM2Ptr(pObj->hpText); GUI_DEBUG_LOG("BUTTON: _Paint(..)\n"); if (pObj->Border) { GUI_SetBkColor(pObj->aBkColor[0]); GUI_Clear(); } IsEnabled = WIDGET__IsEnabled(&pObj->Widget); /* Set clipping rectangle */ WIDGET__GetInsideRect(&pObj->Widget, &rWindow); WM_SetUserClipRect(&rWindow); /* Calculate size */ GUI_GetClientRect(&rClient); xSize = rClient.x1 - rClient.x0 + 1; ySize = rClient.y1 - rClient.y0 + 1; /* Draw background */ GUI_SetBkColor (pObj->aBkColor[IsEnabled]); GUI_SetColor (pObj->aTextColor[0]); GUI_Clear(); /* Calculate length */ GUI_SetFont (pObj->pFont); PixelLen = GUI_GetStringDistX(s); /* Calculate size of cursor */ YSizeCursor = GUI_GetFontDistY(); if (pObj->EditMode == GUI_EDIT_MODE_INSERT) { if (pObj->XSizeCursor != 0) { XSizeCursor = pObj->XSizeCursor; } else { XSizeCursor = GUI_GetCharDistX(' '); } } else { if (pObj->CursorPos < (int)strlen(s)) { XSizeCursor = GUI_GetCharDistX(*(s + pObj->CursorPos)); } else { XSizeCursor = pObj->XSizeCursor; } } /* Calculate X-pos */ switch (pObj->Align & GUI_TA_HORIZONTAL) { case GUI_TA_CENTER: xPosCursor = (xSize - PixelLen + 1) / 2; xPosText = xSize / 2; break; case GUI_TA_LEFT: xPosCursor = pObj->Border + EDIT_XOFF; xPosText = pObj->Border + EDIT_XOFF; break; case GUI_TA_RIGHT: xPosCursor = xSize - (pObj->Border + EDIT_XOFF) - PixelLen; xPosText = xSize - (pObj->Border + EDIT_XOFF); break; } /* Calculate Y-pos */ switch (pObj->Align & GUI_TA_VERTICAL) { case GUI_TA_TOP: yPosCursor = 0; yPosText = 0; break; case GUI_TA_BOTTOM: yPosCursor = ySize - YSizeCursor; yPosText = ySize; break; case GUI_TA_VCENTER: yPosCursor = (ySize - YSizeCursor + 1) / 2; yPosText = ySize / 2; break; } /* Display text */ GUI_SetTextAlign(pObj->Align); GUI_DispStringAt(s, xPosText, yPosText); /* Display cursor */ if (pObj->Widget.State & WIDGET_STATE_FOCUS) { int i; for (i = 0; i != pObj->CursorPos; i++) { xPosCursor += GUI_GetCharDistX(*(s + i)); } GUI_InvertRect(xPosCursor, yPosCursor, xPosCursor + XSizeCursor - 1, yPosCursor + YSizeCursor - 1); } WM_SetUserClipRect(NULL); /* Draw the 3D effect (if configured) */ WIDGET__EFFECT_DrawDown(&pObj->Widget); }
/********************************************************************* * * _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); }
/********************************************************************* * * GUI__DispStringInRect */ void GUI__DispStringInRect(const char GUI_UNI_PTR *s, GUI_RECT* pRect, int TextAlign, int MaxNumChars) { GUI_RECT r; GUI_RECT rLine; int y = 0; const char GUI_UNI_PTR *sOrg =s; int FontYSize; int xLine = 0; int LineLen; int NumCharsRem; /* Number of remaining characters */ FontYSize = GUI_GetFontSizeY(); if (pRect) { r = *pRect; } else { GUI_GetClientRect(&r); } /* handle vertical alignment */ if ((TextAlign & GUI_TA_VERTICAL) == GUI_TA_TOP) { y = r.y0; } else { int NumLines; /* Count the number of lines */ for (NumCharsRem = MaxNumChars, NumLines = 1; NumCharsRem ;NumLines++) { LineLen = GUI__GetLineNumChars(s, NumCharsRem); if(LineLen == 0) { break; } NumCharsRem -= LineLen; s += GUI_UC__NumChars2NumBytes(s, LineLen); if (GUI__HandleEOLine(&s)) break; } /* Do the vertical alignment */ switch (TextAlign & GUI_TA_VERTICAL) { case GUI_TA_BASELINE: case GUI_TA_BOTTOM: y = r.y1 -NumLines * FontYSize+1; break; case GUI_TA_VCENTER: y = r.y0+(r.y1-r.y0+1 -NumLines * FontYSize) /2; break; } } /* Output string */ for (NumCharsRem = MaxNumChars, s = sOrg; NumCharsRem;) { int xLineSize; LineLen = GUI__GetLineNumChars(s, NumCharsRem); if(LineLen == 0) { break; } NumCharsRem -= LineLen; xLineSize = GUI__GetLineDistX(s, LineLen); switch (TextAlign & GUI_TA_HORIZONTAL) { case GUI_TA_HCENTER: xLine = r.x0+(r.x1-r.x0-xLineSize)/2; break; case GUI_TA_LEFT: xLine = r.x0; break; case GUI_TA_RIGHT: xLine = r.x1 -xLineSize + 1; } rLine.x0 = GUI_Context.DispPosX[GUI_Context.SelLayer] = xLine; rLine.x1 = rLine.x0 + xLineSize-1; rLine.y0 = GUI_Context.DispPosY[GUI_Context.SelLayer] = y; rLine.y1 = y + FontYSize-1; GUI__DispLine(s, LineLen, &rLine); s += GUI_UC__NumChars2NumBytes(s, LineLen); y += GUI_GetFontDistY(); if (GUI__HandleEOLine(&s)) break; } }