Пример #1
0
/* Invalidate, using window coordinates */
static void WM_InvalidateBWin1(WM_HWIN hWin, const GUI_RECT*pRect) {
  GUI_RECT r;
  WM_Obj* pWin = WM_H2P(hWin);
  WM__GetClientRectWin(pWin, &r);
  if (pRect)
    GUI__IntersectRect(&r, pRect);
  if (WM__RectIsNZ(&r)) {
    if (pWin->Status & WM_SF_INVALID) {
      GUI_MergeRect(&pWin->InvalidRect, &pWin->InvalidRect, &r);
    } else {
      pWin->InvalidRect = r;
      pWin->Status |= WM_SF_INVALID;
      WM__NumInvalidWindows++;
      /* Debug code: shows invalid areas */
      #if (WM_SHOW_INVALID)
      {
        GUI_CONTEXT Context = GUI_Context;
        WM_SelectWindow(hWin);
        GUI_SetBkColor(GUI_GREEN);
        GUI_ClearRect(r.x0, r.y0, r.x1, r.y1);
        GUI_Context = Context;
      }
      #endif


    }
  }
}
/*********************************************************************
*
*       PROGBAR_SetText
*/
void PROGBAR_SetText(PROGBAR_Handle hObj, const char* s) {
    if (hObj) {
        PROGBAR_Obj* pObj;
        const GUI_FONT GUI_UNI_PTR * pOldFont;
        GUI_RECT r1;
        char acBuffer[5];
        WM_LOCK();
        pObj = PROGBAR_H2P(hObj);
        pOldFont = GUI_SetFont(pObj->Props.pFont);
        PROGBAR__GetTextRect(pObj, &r1, PROGBAR__GetText(pObj, acBuffer));
        if (!s) {
            PROGBAR__FreeText(hObj);
            WM_InvalidateRect(hObj, &r1);
        } else {
            if (GUI__SetText(&pObj->hpText, s)) {
                GUI_RECT r2;
                PROGBAR__GetTextRect(pObj, &r2, PROGBAR__GetText(pObj, acBuffer));
                GUI_MergeRect(&r1, &r1, &r2);
                WM_InvalidateRect(hObj, &r1);
            }
        }
        GUI_SetFont(pOldFont);
        WM_UNLOCK();
    }
}
Пример #3
0
/*********************************************************************
*
*       PROGBAR_SetValue
*/
void PROGBAR_SetValue(PROGBAR_Handle hObj, int v) {
  if (hObj) {
    PROGBAR_Obj* pObj;
    WM_LOCK();
    pObj= PROGBAR_H2P(hObj);
    /* Put v into legal range */
    if (v < pObj->Min) {
	    v = pObj->Min;
    }
    if (v > pObj->Max) {
	    v = pObj->Max;
    }
    if (pObj->v != v) {
      GUI_RECT r;
      /* Get x values */
      if (v < pObj->v) {
        r.x0 = _Value2X(pObj, v);
        r.x1 = _Value2X(pObj, pObj->v);
      } else {
        r.x0 = _Value2X(pObj, pObj->v);
        r.x1 = _Value2X(pObj, v);
      }
		  r.y0    = 0;
		  r.y1    = 4095;
      if (pObj->hpText == 0) {
        const GUI_FONT GUI_UNI_PTR * pOldFont;
        char acBuffer[5];
        GUI_RECT rText;
        pOldFont = GUI_SetFont(pObj->pFont);
        _GetTextRect(pObj, &rText, _GetText(pObj, acBuffer));
        GUI_MergeRect(&r, &r, &rText);
        pObj->v = v;
        _GetTextRect(pObj, &rText, _GetText(pObj, acBuffer));
        GUI_MergeRect(&r, &r, &rText);
        GUI_SetFont(pOldFont);
      } else {
        pObj->v = v;
      }
      WM_InvalidateRect(hObj, &r);
    }
    WM_UNLOCK();
  }
}
Пример #4
0
int GUI_MEMDEV_DrawAuto(GUI_AUTODEV * pAutoDev, GUI_AUTODEV_INFO * pAutoDevInfo, GUI_CALLBACK_VOID_P * pfDraw, void * pData) {
  GUI_RECT rTemp;
  GUI_HMEM hMem = GUI_MEASDEV_Create();
  if (!hMem) {
    return 1;
  }
  GUI_MEASDEV_Select(hMem);
  /* Measure area to draw */
  if (pAutoDev->FirstCall) {
    /* Measure complete area */
    pAutoDevInfo->DrawFixed = 1;
    pfDraw(pData);
    GUI_MEASDEV_GetRect(hMem, &pAutoDev->rView);
    /* Measure variable area only */
    GUI_MEASDEV_ClearRect(hMem);
    pAutoDevInfo->DrawFixed = 0;
    pfDraw(pData);
    GUI_MEASDEV_GetRect(hMem, &pAutoDev->rPrev);
  } else {
    /* Measure variable area only */
    pfDraw(pData);
    GUI_MEASDEV_GetRect(hMem, &pAutoDev->rView);
    rTemp = pAutoDev->rView;
    GUI_MergeRect(&pAutoDev->rView, &pAutoDev->rView, &pAutoDev->rPrev);
    pAutoDev->rPrev = rTemp;
  }
  GUI_MEASDEV_Delete(hMem);



  /* Do the actual drawing */
  pAutoDevInfo->DrawFixed = 1;
  if (GUI_MEMDEV_Draw(&pAutoDev->rView, pfDraw, pData, 0, GUI_MEMDEV_NOTRANS)) {
    return 1;
  }
  pAutoDevInfo->DrawFixed = 0;
  pAutoDev->FirstCall = 0;
  return 0;
}