void CGUI::Xeromyces_ReadSprite(XMBElement Element, CXeromyces* pFile) { CGUISprite* Sprite = new CGUISprite; // Get name, we know it exists because of DTD requirements CStr name = Element.GetAttributes().GetNamedItem(pFile->GetAttributeID("name")); if (m_Sprites.find(name) != m_Sprites.end()) LOGWARNING("GUI sprite name '%s' used more than once; first definition will be discarded", name.c_str()); SGUIImageEffects* effects = NULL; for (XMBElement child : Element.GetChildNodes()) { CStr ElementName(pFile->GetElementString(child.GetNodeName())); if (ElementName == "image") Xeromyces_ReadImage(child, pFile, *Sprite); else if (ElementName == "effect") { if (effects) LOGERROR("GUI <sprite> must not have more than one <effect>"); else { effects = new SGUIImageEffects; Xeromyces_ReadEffects(child, pFile, *effects); } } else debug_warn(L"Invalid data - DTD shouldn't allow this"); } // Apply the effects to every image (unless the image overrides it with // different effects) if (effects) for (SGUIImage* const& img : Sprite->m_Images) if (!img->m_Effects) img->m_Effects = new SGUIImageEffects(*effects); // do a copy just so it can be deleted correctly later delete effects; m_Sprites[name] = Sprite; }
void CGUI::Xeromyces_ReadSprite(XMBElement Element, CXeromyces* pFile) { // Sprite object we're adding CGUISprite* Sprite = new CGUISprite; // and what will be its reference name CStr name; // // Read Attributes // // Get name, we know it exists because of DTD requirements name = Element.GetAttributes().GetNamedItem( pFile->GetAttributeID("name") ); if (m_Sprites.find(name) != m_Sprites.end()) LOGWARNING(L"GUI sprite name '%hs' used more than once; first definition will be discarded", name.c_str()); // // Read Children (the images) // SGUIImageEffects* effects = NULL; // Iterate children XMBElementList children = Element.GetChildNodes(); for (int i=0; i<children.Count; ++i) { // Get node XMBElement child = children.Item(i); CStr ElementName (pFile->GetElementString(child.GetNodeName())); if (ElementName == "image") { Xeromyces_ReadImage(child, pFile, *Sprite); } else if (ElementName == "effect") { if (effects) { LOGERROR(L"GUI <sprite> must not have more than one <effect>"); } else { effects = new SGUIImageEffects; Xeromyces_ReadEffects(child, pFile, *effects); } } else { debug_warn(L"Invalid data - DTD shouldn't allow this"); } } // Apply the effects to every image (unless the image overrides it with // different effects) if (effects) for (std::vector<SGUIImage*>::iterator it = Sprite->m_Images.begin(); it != Sprite->m_Images.end(); ++it) if (! (*it)->m_Effects) (*it)->m_Effects = new SGUIImageEffects(*effects); // do a copy just so it can be deleted correctly later delete effects; // // Add Sprite // m_Sprites[name] = Sprite; }