void GUI_ClearRect(int x0, int y0, int x1, int y1) { GUI_DRAWMODE PrevDraw; GUI_LOCK(); PrevDraw = LCD_SetDrawMode(GUI_DRAWMODE_REV); #if GUI_WINSUPPORT WM_ADDORG(x0,y0); WM_ADDORG(x1,y1); WM_ITERATE_START(NULL) { #endif LCD_FillRect(x0,y0,x1,y1); #if GUI_WINSUPPORT } WM_ITERATE_END(); #endif LCD_SetDrawMode(PrevDraw); GUI_UNLOCK(); }
GUI_DRAWMODE GUI_SetDrawMode(GUI_DRAWMODE dm) { GUI_DRAWMODE OldMode; GUI_LOCK(); { OldMode = LCD_SetDrawMode(dm); } GUI_UNLOCK(); return OldMode; }
/********************************************************************* * * GUIPROPAA_DispChar */ void GUIPROPAA_DispChar(U16P c) { int BytesPerLine; GUI_DRAWMODE DrawMode = GUI_Context.TextMode; const GUI_FONT_PROP* pProp = GUIPROP_FindChar(GUI_Context.pAFont->p.pProp, c); if (pProp) { GUI_DRAWMODE OldDrawMode; const GUI_CHARINFO* pCharInfo = pProp->paCharInfo+(c-pProp->First); BytesPerLine = pCharInfo->BytesPerLine; OldDrawMode = LCD_SetDrawMode(DrawMode); Draw ( GUI_Context.DispPosX, GUI_Context.DispPosY, (pCharInfo->XSize+1)/2, GUI_Context.pAFont->YSize, BytesPerLine, (U8 const*) pCharInfo->pData ); LCD_SetDrawMode(OldDrawMode); /* Restore draw mode */ GUI_Context.DispPosX += (pCharInfo->XDist+1)/2; } }
/********************************************************************* * * GUIPROP_DispChar * * Purpose: * This is the routine that displays a character. It is used by all * other routines which display characters as a subroutine. */ void GUIPROP_DispChar(U16P c) { int BytesPerLine; GUI_DRAWMODE DrawMode = GUI_Context.TextMode; const GUI_FONT_PROP GUI_UNI_PTR * pProp = GUIPROP_FindChar(GUI_Context.pAFont->p.pProp, c); if (pProp) { GUI_DRAWMODE OldDrawMode; const GUI_CHARINFO GUI_UNI_PTR * pCharInfo = pProp->paCharInfo+(c-pProp->First); BytesPerLine = pCharInfo->BytesPerLine; OldDrawMode = LCD_SetDrawMode(DrawMode); if (GUI_MoveRTL) { GUI_Context.DispPosX -= pCharInfo->XDist * GUI_Context.pAFont->XMag; } LCD_DrawBitmap( GUI_Context.DispPosX, GUI_Context.DispPosY, pCharInfo->XSize, GUI_Context.pAFont->YSize, GUI_Context.pAFont->XMag, GUI_Context.pAFont->YMag, 1, /* Bits per Pixel */ BytesPerLine, pCharInfo->pData, &LCD_BKCOLORINDEX ); /* Fill empty pixel lines */ if (GUI_Context.pAFont->YDist > GUI_Context.pAFont->YSize) { int YMag = GUI_Context.pAFont->YMag; int YDist = GUI_Context.pAFont->YDist * YMag; int YSize = GUI_Context.pAFont->YSize * YMag; if (DrawMode != LCD_DRAWMODE_TRANS) { LCD_COLOR OldColor = GUI_GetColor(); GUI_SetColor(GUI_GetBkColor()); LCD_FillRect(GUI_Context.DispPosX, GUI_Context.DispPosY + YSize, GUI_Context.DispPosX + pCharInfo->XSize, GUI_Context.DispPosY + YDist); GUI_SetColor(OldColor); } } LCD_SetDrawMode(OldDrawMode); /* Restore draw mode */ if (!GUI_MoveRTL) { GUI_Context.DispPosX += pCharInfo->XDist * GUI_Context.pAFont->XMag; } } }
/********************************************************************* * * GUI_SIF_DispChar */ static void _GUI_SIF_DispChar(U16P c) { const U8 * pCharInfo, * pData; pCharInfo = _GetpCharInfo(GUI_Context.pAFont, c); if (pCharInfo) { GUI_DRAWMODE DrawMode, OldDrawMode; GUI_SIF_CHARINFO CharInfo; CharInfo.XSize = GUI__Read16(&pCharInfo); CharInfo.XDist = GUI__Read16(&pCharInfo); CharInfo.BytesPerLine = GUI__Read16(&pCharInfo); GUI__Read16(&pCharInfo); /* Dummy */ CharInfo.OffData = GUI__Read32(&pCharInfo); pData = (const U8 *)GUI_Context.pAFont->p.pFontData + CharInfo.OffData; DrawMode = GUI_Context.TextMode; OldDrawMode = LCD_SetDrawMode(DrawMode); LCD_DrawBitmap(GUI_Context.DispPosX, GUI_Context.DispPosY, CharInfo.XSize, GUI_Context.pAFont->YSize, GUI_Context.pAFont->XMag, GUI_Context.pAFont->YMag, 1, CharInfo.BytesPerLine, pData, &LCD_BKCOLORINDEX); /* Fill empty pixel lines */ if (GUI_Context.pAFont->YDist > GUI_Context.pAFont->YSize) { int YMag = GUI_Context.pAFont->YMag; int YDist = GUI_Context.pAFont->YDist * YMag; int YSize = GUI_Context.pAFont->YSize * YMag; if (DrawMode != LCD_DRAWMODE_TRANS) { LCD_COLOR OldColor = GUI_GetColor(); GUI_SetColor(GUI_GetBkColor()); LCD_FillRect(GUI_Context.DispPosX, GUI_Context.DispPosY + YSize, GUI_Context.DispPosX + CharInfo.XSize, GUI_Context.DispPosY + YDist); GUI_SetColor(OldColor); } } LCD_SetDrawMode(OldDrawMode); /* Restore draw mode */ GUI_Context.DispPosX += CharInfo.XDist; } }
/********************************************************************* * * GUI_ClearRect */ void GUI_ClearRect(int x0, int y0, int x1, int y1) { GUI_DRAWMODE PrevDraw; #if GUI_WINSUPPORT GUI_RECT r; #endif GUI_LOCK(); PrevDraw = LCD_SetDrawMode(GUI_DRAWMODE_REV); #if GUI_WINSUPPORT WM_ADDORG(x0,y0); WM_ADDORG(x1,y1); r.x0 = x0; r.x1 = x1; r.y0 = y0; r.y1 = y1; WM_ITERATE_START(&r) { #endif LCD_FillRect(x0,y0,x1,y1); #if GUI_WINSUPPORT } WM_ITERATE_END(); #endif LCD_SetDrawMode(PrevDraw); GUI_UNLOCK(); }
int main(void) { TIME_Init(); FVM_Init(); LCD_Init(); LCD_SelectBuffer(LCD_Screen); LCD_SetDrawMode(0,1); LCD_SetFont((unsigned char *)Font_Ascii_Medium); //LCD_String(0,1,"the quick brown fox jumps over the lazy dog"); LCD_String(0,1,"THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG"); LCD_LowLevelRefresh(0); UI_DrawBottomMenu(&MainMenu); while(1) { } }
void GUIMONO_DispChar(U16P c) { int c0, c1; U8 * pd; int x = GUI_Context.DispPosX; int y = GUI_Context.DispPosY; /* do some checking if drawing is actually necessary ... */ const GUI_FONT_MONO* pMono = GUI_Context.pAFont->p.pMono; unsigned int FirstChar = pMono->FirstChar; /* translate character into 2 characters to display : c0,c1 Check if regular character first. */ if ((c >= (U16P)FirstChar) &&(c <= (U16P)pMono->LastChar)) { pd = (U8*)pMono->pData; c0 = ((int)c) - FirstChar; c1 = -1; } else { /* Check if character is in translation table */ GUI_FONT_TRANSINFO const* pti = pMono->pTrans; pd = (U8*)pMono->pTransData; if (pti) { FirstChar = pti->FirstChar; if ((c >= (U16P)FirstChar) && (c <= (U16P)pti->LastChar)) { GUI_FONT_TRANSLIST const* ptl; c -= pti->FirstChar; ptl = pti->pList; ptl += c; c0 = ptl->c0; c1 = ptl->c1; } else { c0 = c1 = -1; } } else { c0 = c1 = -1; } } /* Draw first character if it is valid */ if (c0!=-1) { int BytesPerChar = GUI_Context.pAFont->YSize*pMono->BytesPerLine; GUI_DRAWMODE DrawMode; int XSize = pMono->XSize; int YSize = GUI_Context.pAFont->YSize; /* Select the right drawing mode */ DrawMode = GUI_Context.TextMode; /* call drawing routine */ { U8 OldMode = LCD_SetDrawMode(DrawMode); LCD_DrawBitmap( x, y, XSize, YSize, GUI_Context.pAFont->XMag, GUI_Context.pAFont->YMag, 1, /* Bits per Pixel */ pMono->BytesPerLine, pd + c0* BytesPerChar, &LCD_BKCOLORINDEX ); if (c1 != -1) { LCD_SetDrawMode(DrawMode | LCD_DRAWMODE_TRANS); LCD_DrawBitmap( x, y, XSize, YSize, GUI_Context.pAFont->XMag, GUI_Context.pAFont->YMag, 1, /* Bits per Pixel */ pMono->BytesPerLine, pd + c1* BytesPerChar, &LCD_BKCOLORINDEX ); } /* Fill empty pixel lines */ if (GUI_Context.pAFont->YDist > GUI_Context.pAFont->YSize) { int YMag = GUI_Context.pAFont->YMag; int YDist = GUI_Context.pAFont->YDist * YMag; int YSize = GUI_Context.pAFont->YSize * YMag; if (DrawMode != LCD_DRAWMODE_TRANS) { LCD_SetDrawMode(DrawMode ^ LCD_DRAWMODE_REV); /* Reverse so we can fill with BkColor */ LCD_FillRect(x, y + YSize, x + XSize, y + YDist); } } LCD_SetDrawMode(OldMode); } } GUI_Context.DispPosX+=pMono->XDist; }