GUICheckBox::GUICheckBox(const char *cbs) : GUIAlphaElement(cbs)
{
  setMinAlphaMark(0.0f);
  setDimensions(20, 20);
  setAlphaMark(1.0f);
  setBGColor(0.8f, 0.8f, 0.8f);
  setChecked(false);
  widgetType = CHECK_BOX;
  
  secondaryTexDesc = CHECK_BOX_MARK;
  primaryTexDesc   = CHECK_BOX;
  markOffset       = 0;
  markRatio        = 0.85f;
  extra            = 0;
}
Esempio n. 2
0
GUICheckBox::GUICheckBox(const std::string &callback) :  GUIAlphaElement(callback)
{
  setMinAlphaMark(0.0f);
  setDimensions(20, 20);
  setAlphaMark(1.0f);
  setBGColor(0.8f, 0.8f, 0.8f);
  setChecked(false);
  widgetType = WT_CHECK_BOX;

  secondaryTexDesc = WT_CHECK_BOX_MARK;
  primaryTexDesc   = WT_CHECK_BOX;
  markOffset       = 0;
  markRatio        = 0.85f;
  extra            = 0;
}
void GUICheckBox::render(float clockTick)
{
  if (!parent || !visible)
    return;
    
  modifyCurrentAlpha(clockTick);
  getCenter();
  
  GUITexCoordDescriptor *descriptor     = parent->getTexCoordsInfo(primaryTexDesc),
                                          *descriptorCB   = parent->getTexCoordsInfo(secondaryTexDesc);
                                          
  int yCenter = (windowBounds.y + windowBounds.w)/2;
  
  glEnable(GL_BLEND);
  glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
  glColor4fv(color);
  
  if (descriptor)
  {
    const Tuple4f &texCoords = descriptor->getTexCoords();
    parent->enableGUITexture();
    
    glBegin(GL_TRIANGLE_STRIP);
    glTexCoord2f(texCoords.x, texCoords.y);
    glVertex2i(windowBounds.x, windowBounds.y);
    
    glTexCoord2f(texCoords.x, texCoords.w);
    glVertex2i(windowBounds.x, windowBounds.w);
    
    glTexCoord2f(texCoords.z, texCoords.y);
    glVertex2i(windowBounds.x + extra, windowBounds.y);
    
    glTexCoord2f(texCoords.z, texCoords.w);
    glVertex2i(windowBounds.x + extra, windowBounds.w);
    glEnd();
    
    parent->disableGUITexture();
  }
  else
  {
    glBegin(GL_TRIANGLE_STRIP);
    glVertex2i(windowBounds.x, windowBounds.y);
    glVertex2i(windowBounds.x, windowBounds.w);
    glVertex2i(windowBounds.x + extra, windowBounds.y);
    glVertex2i(windowBounds.x + extra, windowBounds.w);
    glEnd();
  }
  
  if (!checked)
    setAlphaMark(alphaMark - clockTick*alphaFadeScale*4.0f);
  else
    setAlphaMark(alphaMark + clockTick*alphaFadeScale*4.0f);
    
  if (alphaMark != minAlphaMark)
  {
    glColor4f(1.0f, 1.0f, 1.0f, alphaMark);
    
    if (descriptorCB)
    {
      const Tuple4f &texCoords = descriptorCB->getTexCoords();
      parent->enableGUITexture();
      
      glBegin(GL_TRIANGLE_STRIP);
      glTexCoord2f(texCoords.x, texCoords.y);
      glVertex2i(windowBounds.x + markOffset, windowBounds.y + markOffset);
      
      glTexCoord2f(texCoords.x, texCoords.w);
      glVertex2i(windowBounds.x + markOffset, windowBounds.w - markOffset);
      
      glTexCoord2f(texCoords.z, texCoords.y);
      glVertex2i(windowBounds.x - markOffset + extra, windowBounds.y + markOffset);
      
      glTexCoord2f(texCoords.z, texCoords.w);
      glVertex2i(windowBounds.x - markOffset + extra, windowBounds.w - markOffset);
      glEnd();
      
      parent->disableGUITexture();
    }
    else
    {
      glBegin(GL_TRIANGLE_STRIP);
      glVertex2i(windowBounds.x + markOffset, windowBounds.y + markOffset);
      glVertex2i(windowBounds.x + markOffset, windowBounds.w - markOffset);
      glVertex2i(windowBounds.x - markOffset + extra, windowBounds.y + markOffset);
      glVertex2i(windowBounds.x - markOffset + extra, windowBounds.w - markOffset);
      glEnd();
    }
  }
  
  glDisable(GL_BLEND);
  label.printCenteredY(windowBounds.x + extra + 2, yCenter);
}