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

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        : GUICharAA2.C
  16. Purpose     : Display antialiased 2bpp
  17. ----------------------------------------------------------------------
  18. Version-Date---Author-Explanation
  19. ----------------------------------------------------------------------
  20. 1.00.01 011031 JE     a) GL_DrawBitmap called instead of GUI_DrawBitmap
  21. 1.00.00 990922 RS     First release
  22. ----------------------------------------------------------------------
  23. Known problems or limitations with current version
  24. ----------------------------------------------------------------------
  25. Module needs cleanup and review, but is fully functional.
  26. ---------------------------END-OF-HEADER------------------------------
  27. */
  28. #include "GUI_Private.H"
  29. #include <stdio.h>
  30. #include <string.h>
  31. /*
  32.       ***********************************************************
  33.       *                                                         *
  34.       *       Static defines
  35.       *                                                         *
  36.       ***********************************************************
  37. */
  38. #define MAX_CHAR_SIZE 100
  39. /*
  40.       ***********************************************************
  41.       *                                                         *
  42.       *       Static variables
  43.       *                                                         *
  44.       ***********************************************************
  45. */
  46. /* used by transparent characters */
  47. static const int aConvTable[4] = {0, 5, 10, 15};
  48. /* used by non transparent characters */
  49. static LCD_COLOR aColor[4];
  50. static LCD_PIXELINDEX OldColorIndex, OldBkColorIndex;
  51. static GUI_LOGPALETTE Palette = {4, 0, &aColor[0]};
  52. static GUI_BITMAP Bitmap = {0, 0, 0, 2, 0, &Palette, 0};
  53. /*
  54.       ***********************************************************
  55.       *                                                         *
  56.       *       Anti-aliased drawing                              *
  57.       *                                                         *
  58.       ***********************************************************
  59. */
  60. static void DrawNoTrans(int x0, int y0, int XSize, int YSize, int BytesPerLine, const U8*pData) {
  61.   if ((OldColorIndex   != LCD_COLORINDEX) || 
  62.       (OldBkColorIndex != LCD_BKCOLORINDEX)) {
  63.     int i;
  64.     LCD_PIXELINDEX BkColorIndex = LCD_BKCOLORINDEX;
  65.     LCD_PIXELINDEX ColorIndex   = LCD_COLORINDEX;
  66.     LCD_COLOR BkColor = LCD_Index2Color(BkColorIndex);
  67.     LCD_COLOR Color   = LCD_Index2Color(ColorIndex);
  68.     aColor[0] = BkColor;
  69.     for (i = 1; i < 3; i++) {
  70.       U8 Intens;
  71.       Intens = 5 * i;
  72.       aColor[i] = LCD_AA_MixColors(Color, BkColor, Intens);
  73.     }
  74.     aColor[3] = Color;
  75.     LCD_GetpPalConvTableUncached(&Palette);
  76.     OldColorIndex = ColorIndex;
  77.     OldBkColorIndex = BkColorIndex;
  78.   }
  79.   Bitmap.XSize = XSize;
  80.   Bitmap.YSize = YSize;
  81.   Bitmap.BytesPerLine = BytesPerLine;
  82.   Bitmap.pData = pData;
  83.   GL_DrawBitmap(&Bitmap, x0, y0);
  84. }
  85. static void DrawTrans(int x0, int y0, int XSize, int YSize, int BytesPerLine, const U8*pData) {
  86.   int x, y;
  87.   for (y = 0; y < YSize; y++) {
  88.     const U8 *pData0 = pData;
  89.     U8 Rem = XSize & 3;
  90.     for (x = 0; x < XSize - 1; x += 4) {
  91.       LCD_SetPixelAA(x + x0    , y0 + y, aConvTable[((*pData0  ) >> 6)       ]);
  92.       LCD_SetPixelAA(x + x0 + 1, y0 + y, aConvTable[((*pData0  ) >> 4) & 0x03]);
  93.       LCD_SetPixelAA(x + x0 + 2, y0 + y, aConvTable[((*pData0  ) >> 2) & 0x03]);
  94.       LCD_SetPixelAA(x + x0 + 3, y0 + y, aConvTable[((*pData0++)     ) & 0x03]);
  95.    }
  96.     if (Rem) {
  97.       LCD_SetPixelAA(x + x0    , y0 + y, aConvTable[((*pData0  ) >> 6)       ]);
  98.       if (Rem > 1) {
  99.         LCD_SetPixelAA(x + x0 + 1, y0 + y, aConvTable[((*pData0  ) >> 4) & 0x03]);
  100.         if (Rem > 2) {
  101.           LCD_SetPixelAA(x + x0 + 2, y0 + y, aConvTable[((*pData0  ) >> 2) & 0x03]);
  102.         }
  103.       }
  104.     }
  105.     pData += BytesPerLine;
  106.   }
  107. }
  108. /*
  109.       ***********************************************************
  110.       *                                                         *
  111.       *       Font handling                                     *
  112.       *                                                         *
  113.       ***********************************************************
  114. */
  115. static const GUI_FONT_PROP* GUIPROP_FindChar(const GUI_FONT_PROP* pProp, U16P c) {
  116.   for (pProp = GUI_Context.pAFont->p.pProp; pProp; pProp=(const GUI_FONT_PROP*) pProp->pNext) {
  117.     if ((c>=pProp->First) && (c<=pProp->Last))
  118.       break;
  119.   }
  120.   return pProp;
  121. }
  122. void GUIPROP_AA2_DispChar(U16P c) {
  123.   int BytesPerLine;
  124.   GUI_DRAWMODE DrawMode = GUI_Context.TextMode;
  125.   const GUI_FONT_PROP* pProp = GUIPROP_FindChar(GUI_Context.pAFont->p.pProp, c);
  126.   if (pProp) {
  127.     GUI_DRAWMODE OldDrawMode;
  128.     const GUI_CHARINFO* pCharInfo = pProp->paCharInfo+(c-pProp->First);
  129.     BytesPerLine = pCharInfo->BytesPerLine;
  130.     OldDrawMode  = LCD_SetDrawMode(DrawMode);
  131.     if (DrawMode && GUI_TM_TRANS) {
  132.       DrawTrans(GUI_Context.DispPosX, 
  133.                 GUI_Context.DispPosY,
  134.                 pCharInfo->XSize,
  135.                 GUI_Context.pAFont->YSize,
  136.                 BytesPerLine,
  137.                 (U8 const*)pCharInfo->pData
  138.       );
  139.     } else {
  140.       DrawNoTrans(GUI_Context.DispPosX, 
  141.                   GUI_Context.DispPosY,
  142.                   pCharInfo->XSize,
  143.                   GUI_Context.pAFont->YSize,
  144.                   BytesPerLine,
  145.                   (U8 const*)pCharInfo->pData
  146.       );
  147.     }
  148.     LCD_SetDrawMode(OldDrawMode); /* Restore draw mode */
  149.     GUI_Context.DispPosX += pCharInfo->XDist;
  150.   }
  151. }
  152. int GUIPROP_AA2_GetCharDistX(U16P c) {
  153.   const GUI_FONT_PROP* pProp = GUIPROP_FindChar(GUI_Context.pAFont->p.pProp, c);
  154.   return (pProp) ? (pProp->paCharInfo+(c-pProp->First))->XSize : 0;
  155. }
  156. void GUIPROP_AA2_GetFontInfo(void*pFont, GUI_FONTINFO* pfi) {
  157.   GUI_USE_PARA(pFont);
  158.   pfi->Flags = GUI_FONTINFO_FLAG_PROP | GUI_FONTINFO_FLAG_AA2;
  159. }
  160. char GUIPROP_AA2_IsInFont(void*pFont, U16 c) {
  161.   const GUI_FONT_PROP* pProp = GUIPROP_FindChar(((GUI_FONT*)pFont)->p.pProp, c);
  162.   return (pProp==NULL) ? 0 : 1;
  163. }
  164. /* End of file */