XmlFontFile.cpp 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. #include "core/Logger.h"
  2. #include "core/UiManager.h"
  3. #include "core/UiFont.h"
  4. #include "core/XmlFontFile.h"
  5. XmlFontFile::XmlFontFile(const Ogre::String& file):
  6. XmlFile(file)
  7. {
  8. }
  9. XmlFontFile::~XmlFontFile()
  10. {
  11. }
  12. void
  13. XmlFontFile::LoadFont()
  14. {
  15. TiXmlNode* node = m_File.RootElement();
  16. if(node == nullptr || node->ValueStr() != "font")
  17. {
  18. LOG_ERROR(m_File.ValueStr() + " is not a valid font file! No <font> in root.");
  19. return;
  20. }
  21. Ogre::String name = GetString(node, "name", "");
  22. Ogre::String language = GetString( node, "language", "" );
  23. Ogre::String image = GetString(node, "image", "");
  24. Ogre::Vector2 size = GetVector2(node, "image_size", Ogre::Vector2::ZERO);
  25. int height = GetInt(node, "height", 0);
  26. if(name != "" && image != "" && size.x != 0 && size.y != 0)
  27. {
  28. UiFont* font = new UiFont( name, language );
  29. font->SetImage(image, (int)size.x, (int)size.y);
  30. font->SetHeight(height);
  31. node = node->FirstChild();
  32. while(node != nullptr)
  33. {
  34. if(node->Type() == TiXmlNode::TINYXML_ELEMENT && node->ValueStr() == "char")
  35. {
  36. UiCharData data;
  37. Ogre::UTFString name = GetUTFString(node, "name", "");
  38. if(name != "")
  39. {
  40. data.char_code = *(name.c_str());
  41. }
  42. data.x = GetInt(node, "x", 0);
  43. data.y = GetInt(node, "y", 0);
  44. data.width = GetInt(node, "width", 0);
  45. data.height = GetInt(node, "height", 0);
  46. data.pre = GetInt(node, "pre", 0);
  47. data.post = GetInt(node, "post", 0);
  48. font->AddCharData(data);
  49. }
  50. node = node->NextSibling();
  51. }
  52. UiManager::getSingleton().AddFont(font);
  53. }
  54. }