/*********************************************************************
*
*       GUI_USAGE_DecUseCnt
*
* Purpose: Decrements the usage count and deletes the usage object if
*          the counter reaches 0.
*/
void GUI_USAGE_DecUseCnt(GUI_USAGE_Handle  hUsage) {
    GUI_USAGE* pThis;
    GUI_LOCK();
    pThis = GUI_USAGE_H2P(hUsage);
    if (--pThis->UseCnt == 0) {
        GUI_ALLOC_Free(hUsage);
    }
    GUI_UNLOCK();
}
Example #2
0
/*********************************************************************
*
*       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();
  }
}
Example #3
0
/*********************************************************************
*
*       _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);
        }
      }
    }
  }
}