/********************************************************************* * SEGGER MICROCONTROLLER SYSTEME GmbH * * Solutions for real time microcontroller applications * ********************************************************************** * * * (c) 1996 - 2004 SEGGER Microcontroller Systeme GmbH * * * * Internet: www.segger.com Support: support@segger.com * * * ********************************************************************** ***** emWin - Graphical user interface for embedded applications ***** emWin is protected by international copyright laws. Knowledge of the source code may not be used to write a similar product. This file may only be used in accordance with a license and should not be re- distributed in any way. We appreciate your understanding and fairness. ---------------------------------------------------------------------- File : GUIDEV_WriteAlpha.C Purpose : Implementation of memory devices ---------------------------END-OF-HEADER------------------------------ */ #include #include "GUI_Private.h" #include "GUIDebug.h" /* Memory device capabilities are compiled only if support for them is enabled.*/ #if GUI_SUPPORT_MEMDEV /********************************************************************* * * Static routines * ********************************************************************** */ /********************************************************************* * * _WriteAlphaToActiveAt */ static void _WriteAlphaToActiveAt(GUI_MEMDEV_Handle hMem, int Intens, int x, int y) { /* Make sure the memory handle is valid */ if (hMem) { GUI_MEMDEV * pDev = GUI_MEMDEV_H2P(hMem); GUI_USAGE_h hUsage = pDev->hUsage; GUI_USAGE* pUsage; int YSize = pDev->YSize; int yi; if (hUsage) { pUsage = GUI_USAGE_H2P(hUsage); for (yi = 0; yi < YSize; yi++) { int xOff = 0; int XSize; XSize = GUI_USAGE_GetNextDirty(pUsage, &xOff, yi); /* Draw the partial line which needs to be drawn */ for (; XSize; ) { U8* pData; pData = (U8*)GUI_MEMDEV__XY2PTREx(pDev, xOff, yi); do { LCD_COLOR Color, BkColor; int xPos, yPos, Index; if (pDev->BitsPerPixel == 8) { Index = *pData++; } else { Index = *(U16*)pData; pData += 2; } Color = LCD_Index2Color(Index); xPos = xOff + x; yPos = yi +y; BkColor = LCD_GetPixelColor(xPos, yPos); Color = LCD_MixColors256(Color, BkColor, Intens); Index = LCD_Color2Index(Color); LCD_SetPixelIndex(xPos, yPos, Index); xOff++; } while (--XSize); XSize = GUI_USAGE_GetNextDirty(pUsage, &xOff, yi); } } } } } /********************************************************************* * * Exported routines * ********************************************************************** */ /********************************************************************* * * GUI_MEMDEV_WriteAlphaAt */ void GUI_MEMDEV_WriteAlphaAt(GUI_MEMDEV_Handle hMem, int Alpha, int x, int y) { if (hMem) { GUI_MEMDEV* pDevData; #if (GUI_WINSUPPORT) GUI_RECT r; #endif GUI_LOCK(); pDevData = (GUI_MEMDEV*) GUI_ALLOC_h2p(hMem); /* Convert to pointer */ if (x == GUI_POS_AUTO) { x = pDevData->x0; y = pDevData->y0; } #if (GUI_WINSUPPORT) r.x1 = (r.x0 = x) + pDevData->XSize-1; r.y1 = (r.y0 = y) + pDevData->YSize-1;; WM_ITERATE_START(&r) { _WriteAlphaToActiveAt(hMem, Alpha, x,y); } WM_ITERATE_END(); #else _WriteAlphaToActiveAt(hMem, Alpha, x,y); #endif GUI_UNLOCK(); } } /********************************************************************* * * GUI_MEMDEV_WriteAlpha */ void GUI_MEMDEV_WriteAlpha(GUI_MEMDEV_Handle hMem, int Alpha) { GUI_MEMDEV_WriteAlphaAt(hMem, Alpha, GUI_POS_AUTO, GUI_POS_AUTO); } #else void GUIDEV_WriteAlpha_C(void) {} #endif /* GUI_SUPPORT_MEMDEV */ /*************************** end of file ****************************/