diff options
Diffstat (limited to 'gui/resources.cpp')
-rw-r--r-- | gui/resources.cpp | 67 |
1 files changed, 61 insertions, 6 deletions
diff --git a/gui/resources.cpp b/gui/resources.cpp index 8d430b1ec..4fce0ca44 100644 --- a/gui/resources.cpp +++ b/gui/resources.cpp @@ -65,27 +65,82 @@ FontResource::FontResource(xml_node<>* node, ZipArchive* pZip) : Resource(node, pZip) { std::string file; + xml_attribute<>* attr; mFont = NULL; if (!node) return; - if (node->first_attribute("filename")) - file = node->first_attribute("filename")->value(); + attr = node->first_attribute("filename"); + if (!attr) + return; + + file = attr->value(); - if (ExtractResource(pZip, "fonts", file, ".dat", TMP_RESOURCE_NAME) == 0) +#ifndef TW_DISABLE_TTF + if(file.size() >= 4 && file.compare(file.size()-4, 4, ".ttf") == 0) { - mFont = gr_loadFont(TMP_RESOURCE_NAME); - unlink(TMP_RESOURCE_NAME); + m_type = TYPE_TTF; + + attr = node->first_attribute("size"); + if(!attr) + return; + + int size = atoi(attr->value()); + int dpi = 300; + + attr = node->first_attribute("dpi"); + if(attr) + dpi = atoi(attr->value()); + + if (ExtractResource(pZip, "fonts", file, "", TMP_RESOURCE_NAME) == 0) + { + mFont = gr_ttf_loadFont(TMP_RESOURCE_NAME, size, dpi); + unlink(TMP_RESOURCE_NAME); + } + else + { + file = std::string("/res/fonts/") + file; + mFont = gr_ttf_loadFont(file.c_str(), size, dpi); + } } else +#endif { - mFont = gr_loadFont(file.c_str()); + m_type = TYPE_TWRP; + + if(file.size() >= 4 && file.compare(file.size()-4, 4, ".ttf") == 0) + { + attr = node->first_attribute("fallback"); + if (!attr) + return; + + file = attr->value(); + } + + if (ExtractResource(pZip, "fonts", file, ".dat", TMP_RESOURCE_NAME) == 0) + { + mFont = gr_loadFont(TMP_RESOURCE_NAME); + unlink(TMP_RESOURCE_NAME); + } + else + { + mFont = gr_loadFont(file.c_str()); + } } } FontResource::~FontResource() { + if(mFont) + { +#ifndef TW_DISABLE_TTF + if(m_type == TYPE_TTF) + gr_ttf_freeFont(mFont); + else +#endif + gr_freeFont(mFont); + } } ImageResource::ImageResource(xml_node<>* node, ZipArchive* pZip) |