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

uCOS

开发平台:

C/C++

  1. /*********************************************************************
  2. *                SEGGER MICROCONTROLLER SYSTEME GmbH                 *
  3. *        Solutions for real time microcontroller applications        *
  4. **********************************************************************
  5. *                                                                    *
  6. *        (c) 2002         SEGGER Microcontroller Systeme GmbH        *
  7. *                                                                    *
  8. *        Internet: www.segger.com    Support:  support@segger.com    *
  9. *                                                                    *
  10. **********************************************************************
  11. **** emWin/GSC Grafical user interface for embedded applications ****
  12. emWin is protected by international copyright laws. Knowledge of the
  13. source code may not be used to write a similar product. This file may
  14. only be used in accordance with a license and should not be re-
  15. distributed in any way. We appreciate your understanding and fairness.
  16. ----------------------------------------------------------------------
  17. File        : LCDAA.c
  18. Purpose     : Low level antialiasing routines.
  19. ---------------------------END-OF-HEADER------------------------------
  20. */
  21. #define LCD_C
  22. #include <stddef.h>           /* needed for definition of NULL */
  23. #include "LCD.H"
  24. #include "GUI_Private.H"
  25. #include "LCD_Private.h"
  26. /*
  27.         *********************************************************
  28.         *                                                       *
  29.         *       Macros for internal use                         *
  30.         *                                                       *
  31.         *********************************************************
  32. */
  33. #define RETURN_IF_Y_OUT() 
  34.   if (y < GUI_Context.ClipRect.y0)                     
  35.     return;                                            
  36.   if (y > GUI_Context.ClipRect.y1)                     
  37.     return;
  38. #define RETURN_IF_X_OUT() 
  39.   if (x < GUI_Context.ClipRect.x0) return;             
  40.   if (x > GUI_Context.ClipRect.x1) return;
  41. #define CLIP_X() 
  42.   if (x0 < GUI_Context.ClipRect.x0) { x0 = GUI_Context.ClipRect.x0; } 
  43.   if (x1 > GUI_Context.ClipRect.x1) { x1 = GUI_Context.ClipRect.x1; }
  44. #define CLIP_Y() 
  45.   if (y0 < GUI_Context.ClipRect.y0) { y0 = GUI_Context.ClipRect.y0; } 
  46.   if (y1 > GUI_Context.ClipRect.y1) { y1 = GUI_Context.ClipRect.y1; }
  47. /*
  48.         *********************************************************
  49.         *                                                       *
  50.         *           Antialiasing (opt)                          *
  51.         *                                                       *
  52.         *********************************************************
  53. */
  54. LCD_COLOR LCD_AA_MixColors(LCD_COLOR Color, LCD_COLOR BkColor, U8 Intens) {
  55.   /* Calc Color seperations for FgColor first */
  56.   I32 R = (Color&0xff)*Intens;
  57.   I32 G = (Color&0xff00)*Intens;
  58.   I32 B = (Color&0xff0000)*Intens;
  59.   /* Add Color seperations for BkColor */
  60.   Intens = 15-Intens;
  61.   R += (BkColor&0xff)*Intens;
  62.   G += (BkColor&0xff00)*Intens;
  63.   B += (BkColor&0xff0000)*Intens;
  64.   R = (R/15)&0xff;
  65.   G = (G/15)&0xff00;
  66.   B = (B/15)&0xff0000;
  67.   Color = R+G+B;
  68.   return Color;
  69. }
  70. /* Draw 1-pixel with Foreground color */
  71. void LCD_SetPixelAA(int x, int y, U8 Intens) {
  72.   if (Intens == 0)
  73.     return;
  74.   RETURN_IF_Y_OUT();
  75.   RETURN_IF_X_OUT();
  76.   if (Intens >= 15) {
  77.     LCDDEV_L0_SetPixelIndex(x,y, LCD_COLORINDEX);
  78.   } else {
  79.     LCD_COLOR Color = LCD_Index2Color(LCD_COLORINDEX);
  80.     LCD_COLOR BkColor =  LCD_GetPixelColor(x,y);
  81.     Color = LCD_AA_MixColors(Color, BkColor, Intens);
  82.     LCDDEV_L0_SetPixelIndex(x,y, LCD_Color2Index(Color));
  83.   }
  84. }
  85. /* Draw 1-pixel with Foreground and background color */
  86. void LCD_SetPixelAA_NoTrans(int x, int y, U8 Intens) {
  87.   RETURN_IF_Y_OUT();
  88.   RETURN_IF_X_OUT();
  89.   if (Intens == 0) {
  90.     LCDDEV_L0_SetPixelIndex(x,y, LCD_BKCOLORINDEX);
  91.   } else if (Intens == 15) {
  92.     LCDDEV_L0_SetPixelIndex(x,y, LCD_COLORINDEX);
  93.   } else {
  94.     LCD_COLOR Color = LCD_AA_MixColors(LCD_Index2Color(LCD_COLORINDEX),
  95.                                    LCD_Index2Color(LCD_BKCOLORINDEX),
  96.                                    Intens);
  97.     LCDDEV_L0_SetPixelIndex(x,y,LCD_Color2Index(Color));
  98.   }
  99. }