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); }
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); }
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); }
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); }