Exemple #1
0
static bool prvDraw(xWidget *pxW){
  xProgressBarProps *xP;

  if (!(xP = pxWidgetGetProps(pxW, WidgetProgressBar)))
    return FALSE;

  if(pxW->bValid)
    return FALSE;
// Draw:
  bWidgetDraw(pxW);

  u16 usXfrom = pxW->usX0 + 1;
  u16 usXto = pxW->usX0 + ((pxW->usX1 - 1 - pxW->usX0) * xP->usExProc) / 100;
  u16 usYfrom = pxW->usY0 + usWidgetGetH(xP->pxBarLabel);
  u16 usYto = pxW->usY1 - 1;

  vFramebufferRectangle(pxW->usX0, usYfrom, pxW->usX1 - 1, usYto, 0, FALSE);

  usYfrom++;
  usYto--;
  while (usXfrom <= usXto - 1){
    vFramebufferVLine(usXfrom, usYfrom, usYto, xP->usBarColor);
    ++usXfrom;
  }

  return TRUE;
}
Exemple #2
0
void vWidgetDraw(xWidget *pxW){
  if(!pxW)
    return;
  
  bool bRedrawed = FALSE;
  
  //We don't need to redraw widget and children tree if it is not visible
  if(!pxW->bVisible)
    return;
  
  if(pxW->bInvalidateParent)
    return;
  
  //Проверка ближайших детей на предмет установленного флага bWidgetInvalidateParent
  if(pxW->pxChild){
    xWidget *pxWidChild = pxW->pxChild;
    while(pxWidChild){
      if(pxWidChild->bInvalidateParent){
        pxWidChild->bInvalidateParent = FALSE;
        pxW->bInvalidate = TRUE;
      }
      pxWidChild = pxWidChild->pxNextSibling;
    }
  }
  
  //анализ флага инвалидации
  if(pxW->bInvalidate){
    prvInvalidateChilds(pxW);
    pxW->bValid = FALSE;
    pxW->bInvalidate = FALSE;
  }
  
  if(pxW->pxDrawHandler)
    bRedrawed = pxW->pxDrawHandler(pxW);
  else
    bRedrawed = bWidgetDraw(pxW);
  
  if(pxW->pxChild){
    xWidget *pxWidChild = pxW->pxChild;
    while(pxWidChild){
      vWidgetDraw(pxWidChild);
      pxWidChild = pxWidChild->pxNextSibling;
    }
  }
  
  //Валидируем виджет
  pxW->bValid = TRUE;

  if(bInterfaceGetDebug() && bRedrawed)
    vFramebufferRectangle(pxW->usX0, pxW->usY0, pxW->usX1, pxW->usY1, rand(), FALSE);
  
}