From b240f4a6a31842067d0e9c57031a31f784ab71f5 Mon Sep 17 00:00:00 2001 From: that Date: Mon, 14 Mar 2016 01:21:38 +0100 Subject: gui: fix font scaling for zip themes All fonts were extracted to /tmp/extract.bin which was deleted after the initial load, so reloading for scaling failed. - extract fonts to /tmp with original name and don't delete them - minor code cleanup Change-Id: If8a0f657a7ef4c418fd5cc8550a24de44a38f303 --- gui/resources.cpp | 19 +++++++++++-------- gui/resources.hpp | 11 +---------- 2 files changed, 12 insertions(+), 18 deletions(-) (limited to 'gui') diff --git a/gui/resources.cpp b/gui/resources.cpp index e7611dd9f..9c97dad18 100644 --- a/gui/resources.cpp +++ b/gui/resources.cpp @@ -54,24 +54,27 @@ int Resource::ExtractResource(ZipArchive* pZip, std::string folderName, std::str return ret; } -void Resource::LoadImage(ZipArchive* pZip, std::string file, gr_surface* source) +void Resource::LoadImage(ZipArchive* pZip, std::string file, gr_surface* surface) { + int rc = 0; if (ExtractResource(pZip, "images", file, ".png", TMP_RESOURCE_NAME) == 0) { - res_create_surface(TMP_RESOURCE_NAME, source); + rc = res_create_surface(TMP_RESOURCE_NAME, surface); unlink(TMP_RESOURCE_NAME); } else if (ExtractResource(pZip, "images", file, "", TMP_RESOURCE_NAME) == 0) { // JPG includes the .jpg extension in the filename so extension should be blank - res_create_surface(TMP_RESOURCE_NAME, source); + rc = res_create_surface(TMP_RESOURCE_NAME, surface); unlink(TMP_RESOURCE_NAME); } else if (!pZip) { // File name in xml may have included .png so try without adding .png - res_create_surface(file.c_str(), source); + rc = res_create_surface(file.c_str(), surface); } + if (rc != 0) + LOGINFO("Failed to load image from %s%s, error %d\n", file.c_str(), pZip ? " (zip)" : "", rc); } void Resource::CheckAndScaleImage(gr_surface source, gr_surface* destination, int retain_aspect) @@ -122,7 +125,6 @@ void FontResource::LoadFont(xml_node<>* node, ZipArchive* pZip) if(file.size() >= 4 && file.compare(file.size()-4, 4, ".ttf") == 0) { - m_type = TYPE_TTF; int font_size = 0; if (origFontSize != 0) { @@ -144,10 +146,11 @@ void FontResource::LoadFont(xml_node<>* node, ZipArchive* pZip) if(attr) dpi = atoi(attr->value()); - if (ExtractResource(pZip, "fonts", file, "", TMP_RESOURCE_NAME) == 0) + // we can't use TMP_RESOURCE_NAME here because the ttf subsystem is caching the name and scaling needs to reload the font + std::string tmpname = "/tmp/" + file; + if (ExtractResource(pZip, "fonts", file, "", tmpname) == 0) { - mFont = gr_ttf_loadFont(TMP_RESOURCE_NAME, font_size, dpi); - unlink(TMP_RESOURCE_NAME); + mFont = gr_ttf_loadFont(tmpname.c_str(), font_size, dpi); } else { diff --git a/gui/resources.hpp b/gui/resources.hpp index 4548c10b4..528fecc14 100644 --- a/gui/resources.hpp +++ b/gui/resources.hpp @@ -29,21 +29,13 @@ private: protected: static int ExtractResource(ZipArchive* pZip, std::string folderName, std::string fileName, std::string fileExtn, std::string destFile); - static void LoadImage(ZipArchive* pZip, std::string file, gr_surface* source); + static void LoadImage(ZipArchive* pZip, std::string file, gr_surface* surface); static void CheckAndScaleImage(gr_surface source, gr_surface* destination, int retain_aspect); }; class FontResource : public Resource { public: - enum Type - { - TYPE_TWRP, -#ifndef TW_DISABLE_TTF - TYPE_TTF, -#endif - }; - FontResource(xml_node<>* node, ZipArchive* pZip); virtual ~FontResource(); @@ -54,7 +46,6 @@ public: protected: void* mFont; - Type m_type; private: void LoadFont(xml_node<>* node, ZipArchive* pZip); -- cgit v1.2.3