GUICharP.c
上传用户:zbk8730
上传日期:2017-08-10
资源大小:12168k
文件大小:4k
源码类别:

uCOS

开发平台:

C/C++

  1. /*
  2. *********************************************************************************************************
  3. *                                                uC/GUI
  4. *                        Universal graphic software for embedded applications
  5. *
  6. *                       (c) Copyright 2002, Micrium Inc., Weston, FL
  7. *                       (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
  8. *
  9. *              礐/GUI is protected by international copyright laws. Knowledge of the
  10. *              source code may not be used to write a similar product. This file may
  11. *              only be used in accordance with a license and should not be redistributed
  12. *              in any way. We appreciate your understanding and fairness.
  13. *
  14. ----------------------------------------------------------------------
  15. File        : GUICharP.C
  16. Purpose     : Implementation of Proportional fonts
  17. ---------------------------END-OF-HEADER------------------------------
  18. */
  19. #include <stddef.h>           /* needed for definition of NULL */
  20. #include "GUI_Private.H"
  21.  
  22. /*
  23.       ***********************************************************
  24.       *                                                         *
  25.       *       Proprotional fonts                                *
  26.       *                                                         *
  27.       ***********************************************************
  28. */
  29. static const GUI_FONT_PROP* GUIPROP_FindChar(const GUI_FONT_PROP* pProp, U16P c) {
  30.   for (; pProp; pProp=(GUI_FONT_PROP*) pProp->pNext) {
  31.     if ((c>=pProp->First) && (c<=pProp->Last))
  32.       break;
  33.   }
  34.   return pProp;
  35. }
  36. void GUIPROP_DispChar(U16P c) {
  37.   int BytesPerLine;
  38.   GUI_DRAWMODE DrawMode = GUI_Context.TextMode;
  39.   const GUI_FONT_PROP* pProp = GUIPROP_FindChar(GUI_Context.pAFont->p.pProp, c);
  40.   if (pProp) {
  41.     GUI_DRAWMODE OldDrawMode;
  42.     const GUI_CHARINFO* pCharInfo = pProp->paCharInfo+(c-pProp->First);
  43.     BytesPerLine = pCharInfo->BytesPerLine;
  44.     OldDrawMode  = LCD_SetDrawMode(DrawMode);
  45.     LCD_DrawBitmap( GUI_Context.DispPosX, GUI_Context.DispPosY,
  46.                        pCharInfo->XSize,
  47.  GUI_Context.pAFont->YSize,
  48.                        GUI_Context.pAFont->XMag,
  49.  GUI_Context.pAFont->YMag,
  50.                        1,     /* Bits per Pixel */
  51.                        BytesPerLine,
  52.                        (U8 const *)pCharInfo->pData,
  53.                        NULL  /* no palette means default palette */
  54.                        );
  55.     /* Fill empty pixel lines */
  56.     if (GUI_Context.pAFont->YDist > GUI_Context.pAFont->YSize) {
  57.       int YMag = GUI_Context.pAFont->YMag;
  58.       int YDist = GUI_Context.pAFont->YDist * YMag;
  59.       int YSize = GUI_Context.pAFont->YSize * YMag;
  60.       if (DrawMode != LCD_DRAWMODE_TRANS) {
  61.         LCD_COLOR OldColor = GUI_GetColor();
  62.         GUI_SetColor(GUI_GetBkColor());
  63.         LCD_FillRect(GUI_Context.DispPosX, 
  64.                      GUI_Context.DispPosY + YSize, 
  65.                      GUI_Context.DispPosX + pCharInfo->XSize, 
  66.                      GUI_Context.DispPosY + YDist);
  67.         GUI_SetColor(OldColor);
  68.       }
  69.     }
  70.     LCD_SetDrawMode(OldDrawMode); /* Restore draw mode */
  71.     GUI_Context.DispPosX += pCharInfo->XDist;
  72.   }
  73. }
  74. int GUIPROP_GetCharDistX(U16P c) {
  75.   const GUI_FONT_PROP* pProp = GUIPROP_FindChar(GUI_Context.pAFont->p.pProp, c);
  76.   return (pProp) ? (pProp->paCharInfo+(c-pProp->First))->XSize : 0;
  77. }
  78. void GUIPROP_GetFontInfo(void*pFont, GUI_FONTINFO* pfi) {
  79.   GUI_USE_PARA(pFont);
  80.   pfi->Flags = GUI_FONTINFO_FLAG_PROP;
  81. }
  82. char GUIPROP_IsInFont(void*pFont, U16 c) {
  83.   const GUI_FONT_PROP* pProp = GUIPROP_FindChar(((GUI_FONT*)pFont)->p.pProp, c);
  84.   return (pProp==NULL) ? 0 : 1;
  85. }