/********************************************************************* * * GUI_USAGE_Select */ void GUI_USAGE_Select(GUI_USAGE_Handle hUsage) { GUI_MEMDEV * pDev; GUI_LOCK(); pDev = GUI_MEMDEV_H2P(GUI_Context.hDevData); pDev->hUsage = hUsage; GUI_UNLOCK(); }
/********************************************************************* * * GUI_MEMDEV_GetDataPtr */ void* GUI_MEMDEV_GetDataPtr(GUI_MEMDEV_Handle hMem) { GUI_MEMDEV* pDev; void *pData; GUI_LOCK(); /* Needed so the memory management does not complain */ pDev = GUI_MEMDEV_H2P(hMem); GUI_UNLOCK(); pData = (void*)(pDev + 1); return pData; }
/********************************************************************* * * _MarkRect */ static void _MarkRect(int x0, int y0, int x1, int y1) { GUI_MEASDEV* pDev = (GUI_MEASDEV*)(GUI_MEMDEV_H2P(GUI_Context.hDevData)); if (x0 < pDev->rUsed.x0) pDev->rUsed.x0 = x0; if (x1 > pDev->rUsed.x1) pDev->rUsed.x1 = x1; if (y1 < pDev->rUsed.y0) pDev->rUsed.y0 = y0; if (y1 > pDev->rUsed.y1) pDev->rUsed.y1 = y1; }
/********************************************************************* * * _MarkPixel */ static void _MarkPixel(int x, int y) { GUI_MEASDEV* pDev = (GUI_MEASDEV*)(GUI_MEMDEV_H2P(GUI_Context.hDevData)); if (x < pDev->rUsed.x0) pDev->rUsed.x0 = x; if (x > pDev->rUsed.x1) pDev->rUsed.x1 = x; if (y < pDev->rUsed.y0) pDev->rUsed.y0 = y; if (y > pDev->rUsed.y1) pDev->rUsed.y1 = y; }
/********************************************************************* * * _XY2PTR */ static PIXELINDEX* _XY2PTR(int x, int y) { GUI_MEMDEV* pDev = GUI_MEMDEV_H2P(GUI_Context.hDevData); U8 *pData = (U8*)(pDev + 1); #if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL if ((x >= pDev->x0+pDev->XSize) | (x<pDev->x0) | (y >= pDev->y0+pDev->YSize) | (y<pDev->y0)) { GUI_DEBUG_ERROROUT2("_XY2PTR: parameters out of bounds",x,y); } #endif pData += (GUI_ALLOC_DATATYPE_U)(y - pDev->y0) * (GUI_ALLOC_DATATYPE_U)pDev->BytesPerLine; return ((PIXELINDEX*)pData) + x - pDev->x0; }
/********************************************************************* * * GUI_MEMDEV_Clear */ void GUI_MEMDEV_Clear(GUI_MEMDEV_Handle hMem) { if (!hMem) { if ((hMem = GUI_Context.hDevData) == 0) { return; } } { GUI_MEMDEV* pDev; GUI_USAGE_h hUsage; GUI_LOCK(); pDev = GUI_MEMDEV_H2P(hMem); /* Convert to pointer */ hUsage = pDev->hUsage; if (hUsage) { GUI_USAGE* pUsage = GUI_USAGE_H2P(hUsage); GUI_USAGE_Clear(pUsage); } GUI_UNLOCK(); } }
/********************************************************************* * * _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); } } } } }