Beispiel #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;
}
Beispiel #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);
  
}
Beispiel #3
0
bool bWidgetDraw(xWidget *pxW){
  if(!pxW)
    return FALSE;
  
  if(pxW->bValid)
    return FALSE;
  
  if(pxW->pusBgPicture){
    bFramebufferPicture(pxW->usX0, pxW->usY0, pxW->pusBgPicture);
    return TRUE;
  } 
  
  if(!pxW->bTransparent){
    vFramebufferRectangle(pxW->usX0, pxW->usY0, pxW->usX1, pxW->usY1, pxW->usBgColor, TRUE);
    return TRUE;
  }
  
  return FALSE;
}
Beispiel #4
0
bool prvDraw(xConsole *pxW){
  xConsoleProps *xP;
  u16 usX, usY;
  
  char cCharOffs = 0;
  u8   ucPrintChar;
  
  u16  usMaxCharPrint;
  
  bool bClearRow = FALSE;
  
  bool bRedraw = FALSE;
  
  xP = pxW->pvProp;
  
  usMaxCharPrint = xP->ucChXCount * xP->ucChXCount;
    
  if(!xP->xqConsole)
    return FALSE;
  
  while(xQueueReceive( xP->xqConsole, &( ucPrintChar ), 0 ) == pdTRUE){
        
    bRedraw = TRUE;
    
    cCharOffs = (CHAR_PLACE_WIDTH - ucFontGetCharW(ucPrintChar, CONSOLE_FONT)) / 2;
    
    usX = xP->ucCaretX * CHAR_PLACE_WIDTH + pxW->usX0;
    usY = xP->ucCaretY * CHAR_PLACE_HEIGHT + pxW->usY0;
    
    usX += cCharOffs;
    
    if(ucPrintChar != '\n' && ucPrintChar != '\r') {
      vFramebufferPutChar(usX, usY, ucPrintChar, EM_GUI_SMALL_FONT, CONSOLE_COLOR_FG, CONSOLE_COLOR_BG, FALSE);
      xP->ucCaretX++;
    }
    else{
      xP->ucCaretX = 0;
      xP->ucCaretY++;
      bClearRow = TRUE;
    }
    
    if(xP->ucCaretX >= xP->ucChXCount){
      xP->ucCaretX = 0;
      xP->ucCaretY++;
      bClearRow = TRUE;
    }
    
    if(xP->ucCaretY >= xP->ucChYCount){
      xP->ucCaretY = 0;
      bClearRow = TRUE;
      xP->usScroll = 1;
    }
    
    if(xP->usScroll){
      xP->usScroll = CHAR_PLACE_WIDTH * (xP->ucCaretY + 1);
    }
    
    if(xP->usScroll > usWidgetGetH(pxW))
      xP->usScroll = 1;
    
    vFramebufferScroll(xP->usScroll);
    
    //Был перенос строки
    if(bClearRow){
      usX = xP->ucCaretX * CHAR_PLACE_WIDTH + pxW->usX0;
      usY = xP->ucCaretY * CHAR_PLACE_HEIGHT + pxW->usY0;
      if(xP->ucCaretY != xP->ucChXCount - 1)
        vFramebufferRectangle(pxW->usX0, usY, pxW->usX1, usY + CHAR_PLACE_HEIGHT, CONSOLE_COLOR_BG, TRUE);
      else
        vFramebufferRectangle(pxW->usX0, usY, pxW->usX1, usY + CHAR_PLACE_HEIGHT, CONSOLE_COLOR_BG, TRUE);
      bClearRow = FALSE;
    }
        
    if(!usMaxCharPrint)
      break;
    usMaxCharPrint--;
  }
  
  return bRedraw;
}