Ejemplo n.º 1
0
void GUIFrame::addOrReplaceTexCoordsInfo(GUITexCoordDescriptor &info)
{
  for (size_t t = 0; t < texCoords.size(); t++)
    if (texCoords[t].getType() == info.getType())
    {
      texCoords[t].setTexCoords(info.getTexCoords());
      return;
    }
  texCoords.push_back(info);
}
Ejemplo n.º 2
0
bool GUIFrame::loadXMLSettings(XMLElement *element)
{

  if (!element || element->getName() != "Panel")
    return Logger::writeErrorLog("Need a Panel node in the xml file");
    
  XMLElement *child       =  NULL,
                             *subChild    =  NULL;
  bool        defaultFont = true;
  
  if (child = element->getChildByName("Texture"))
  {
    elementsTexture.loadXMLSettings(child);
    if (subChild = child->getChildByName("path"))
    {
      const String &path = child->getValue();
      Image texture;
      if (texture.load(path.getBytes()))
      {
        GUITexCoordDescriptor::setTextureHeight(texture.getHeight());
        GUITexCoordDescriptor::setTextureWidth(texture.getWidth());
      }
    }
  }
  
  for (size_t i = 0; i < element->getChildrenCount(); i++)
  {
    if (!(child = element->getChild(i)))
      continue;
      
    const String &elementName = child->getName();
    if (elementName == "Font")
    {
      int fontIndex = GUIFontManager::addFont(child);
      if (defaultFont && fontIndex >= 0)
      {
        GUIFontManager::setDefaultFont(fontIndex);
        defaultFont = false;
      }
      continue;
    }
    
    if (elementName == "TexCoordsDesc")
    {
      GUITexCoordDescriptor descriptor;
      descriptor.loadXMLSettings(child);
      addOrReplaceTexCoordsInfo(descriptor);
    }
  }
  return   GUIPanel::loadXMLSettings(element);
}
Ejemplo n.º 3
0
bool GUIFrame::loadXMLSettings(const TiXmlElement *element) 
{
  if(!XMLArbiter::inspectElementInfo(element, "Panel"))
    return Logger::writeErrorLog("Need a Panel node in the xml file");

  bool defaultFont = true;

  for(const TiXmlElement *child = element->FirstChildElement();	
      child;
   	  child = child->NextSiblingElement() )
  {
    std::string elementName  = child->Value();

    if(!elementName.size())
      continue;
    
    if(elementName == "Font")
    {
      int fontIndex = GUIFontManager::addFont(child);
      if(defaultFont && fontIndex >= 0)
      {
        GUIFontManager::setDefaultFont(fontIndex);
        defaultFont = false;
      }
      continue;
    }
 
    if(elementName == "Texture")
    {
      if(elementsTexture.loadXMLSettings(child))
      {
        GUITexCoordDescriptor::setTextureHeight(elementsTexture.getHeight());
        GUITexCoordDescriptor::setTextureWidth(elementsTexture.getWidth());
      }
      continue;
    }

    if(elementName == "TexCoordsDesc")
    {
      GUITexCoordDescriptor descriptor;
      descriptor.loadXMLSettings(child);
      addOrReplaceTexCoordsInfo(descriptor);
      continue;
    }
  }
  return   GUIPanel::loadXMLSettings(element);
}
Ejemplo n.º 4
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);
}