/********************************************************************* * * GUI_SIF_GetCharDistX */ static int _GUI_SIF_GetCharDistX(U16P c) { const U8 * pCharInfo; U16 DistX = 0; pCharInfo = _GetpCharInfo(GUI_Context.pAFont, c); /* Get pointer to char info data */ if (pCharInfo) { pCharInfo += 2 /* Skip XSize */; DistX = GUI__Read16(&pCharInfo); } return DistX; }
/********************************************************************* * * GUI_SIF_DispChar */ static void _GUI_SIF_DispChar(U16P c) { const U8 * pData; const GUI_SIF_CHARINFO *pCharInfo = (const GUI_SIF_CHARINFO *)(_GetpCharInfo(GUI_Context.pAFont, c)); if (!pCharInfo){ pCharInfo = (const GUI_SIF_CHARINFO *)(_GetpCharInfo(GUI_Context.pAFont, '?')); } unsigned short x = GUI_Context.DispPosX; unsigned short y = GUI_Context.DispPosY; unsigned int width = pCharInfo->XSize ; unsigned int dis = pCharInfo->XDist ; unsigned int nbyteperline = pCharInfo->BytesPerLine ; unsigned int addr = (unsigned int)GUI_Context.pAFont->p.pFontData + pCharInfo->OffData ; for (int i = 0; i < GUI_Context.pAFont->YSize; i++) { unsigned int mask = htonlAt((void*)(addr+i*nbyteperline)); for(int j=0;j<width;j++){ GUI_COLOR color = (mask & (1<<(31-j))) ? GUI_Context.Color: GUI_Context.BkColor; LCD_SetPixel(x + j, y + i, color); } } GUI_Context.DispPosX += pCharInfo->XDist; }
/********************************************************************* * * 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_SIF_IsInFont */ static char _GUI_SIF_IsInFont(const GUI_FONT GUI_UNI_PTR * pFont, U16 c) { const U8 * pCharInfo; GUI_USE_PARA(pFont); pCharInfo = _GetpCharInfo(GUI_Context.pAFont, c); return (pCharInfo) ? 1 : 0; }