00001 #include "glwx.h" 00002 00003 vector<GUIFont *> GUIFontManager::guiFontList; 00004 GUIFont *GUIFontManager::currentFont = NULL; 00005 GUIFont *GUIFontManager::defaultFont = NULL; 00006 00007 int GUIFontManager::getCharacterWidth(char Char, GUIFont *font) 00008 { 00009 GUIFont *currentFont = getDefaultFont(); 00010 if(!font) 00011 { 00012 if(currentFont) 00013 return currentFont->getFontObject()->getCharHorizontalGlyphs()[Char]; 00014 } 00015 else 00016 return font->getFontObject()->getCharHorizontalGlyphs()[Char]; 00017 return 0; 00018 } 00019 00020 int GUIFontManager::getCharacterWidth(char Char, int fontIndex) 00021 { 00022 GUIFont *currentFont = getFont(fontIndex); 00023 currentFont = currentFont ? currentFont : getDefaultFont(); 00024 if(currentFont) 00025 return currentFont->getFontObject()->getCharHorizontalGlyphs()[Char]; 00026 00027 return 0; 00028 } 00029 00030 void GUIFontManager::setCurrentFont(size_t index) 00031 { 00032 setCurrentFont(getFont(index)); 00033 } 00034 00035 void GUIFontManager::setCurrentFont(GUIFont *currentFont_) 00036 { 00037 if(!currentFont_ && !(currentFont_ = defaultFont)) 00038 return; 00039 00040 if(!currentFont || currentFont->operator!=(*currentFont_)) 00041 { 00042 currentFont = currentFont_; 00043 } 00044 } 00045 00046 GUIFont *GUIFontManager::getCurrentFont() 00047 { 00048 return currentFont; 00049 } 00050 00051 void GUIFontManager::setDefaultFont(size_t index) 00052 { 00053 setDefaultFont(getFont(index)); 00054 } 00055 00056 void GUIFontManager::setDefaultFont(GUIFont *defaultFont_) 00057 { 00058 defaultFont = defaultFont_; 00059 } 00060 00061 GUIFont *GUIFontManager::getDefaultFont() 00062 { 00063 return defaultFont; 00064 } 00065 00066 int GUIFontManager::findFontIndex(GUIFont *font) 00067 { 00068 if(!font) 00069 return -1; 00070 00071 for(size_t i = 0; i < guiFontList.size(); i++) 00072 if(guiFontList[i]->operator ==(*font)) 00073 return int(i); 00074 00075 return -1; 00076 } 00077 00078 GUIFont *GUIFontManager::getFont(size_t index) 00079 { 00080 return index >= guiFontList.size() ? NULL : guiFontList[index]; 00081 } 00082 00083 int GUIFontManager::addFont(const TiXmlElement *fontNode) 00084 { 00085 GUIFont *newFont = new GUIFont(); 00086 int index = -1; 00087 00088 if(newFont->loadXMLSettings(fontNode)) 00089 { 00090 index = findFontIndex(newFont); 00091 if(index >= 0) 00092 { 00093 deleteObject(newFont); 00094 } 00095 else 00096 { 00097 if(newFont->build()) 00098 { 00099 addFont(newFont); 00100 index = int(guiFontList.size() - 1); 00101 } 00102 else { 00103 deleteObject(newFont); 00104 } 00105 } 00106 } 00107 else { 00108 deleteObject(newFont); 00109 } 00110 return index; 00111 } 00112 00113 bool GUIFontManager::addFont(GUIFont *font) 00114 { 00115 if(!font) 00116 return false; 00117 00118 guiFontList.push_back(font); 00119 return true; 00120 } 00121 00122 void GUIFontManager::clear() 00123 { 00124 for(size_t i = 0; i < guiFontList.size(); i++) 00125 deleteObject(guiFontList[i]); 00126 00127 guiFontList.clear(); 00128 }