Files
android_bootable_recovery/gui/resources.hpp
T
Ethan Yonker 63e414fc8a Scale the GUI to fit the screen
With this patch set, if needed, we scale the images during early
boot. TTF support is needed to properly scale the font. No font
scaling is done on the old style fixed width font used in the
console.

Special thanks to _that for figuring out the scaling and blending
function calls to make this possible.

Change-Id: If2f79bef16d6db2e1298bfc3d00c9bcca2bee37a
2015-02-10 14:11:50 -06:00

97 lines
2.0 KiB
C++

// resources.hpp - Base classes for resource management of GUI
#ifndef _RESOURCE_HEADER
#define _RESOURCE_HEADER
#include "../minzip/Zip.h"
extern "C" {
#include "../minuitwrp/minui.h"
}
// Base Objects
class Resource
{
public:
Resource(xml_node<>* node, ZipArchive* pZip);
virtual ~Resource() {}
public:
virtual void* GetResource(void) = 0;
std::string GetName(void) { return mName; }
private:
std::string mName;
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 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();
public:
virtual void* GetResource(void) { return mFont; }
protected:
void* mFont;
Type m_type;
};
class ImageResource : public Resource
{
public:
ImageResource(xml_node<>* node, ZipArchive* pZip, int retain_aspect);
virtual ~ImageResource();
public:
virtual void* GetResource(void) { return mSurface; }
protected:
gr_surface mSurface;
};
class AnimationResource : public Resource
{
public:
AnimationResource(xml_node<>* node, ZipArchive* pZip, int retain_aspect);
virtual ~AnimationResource();
public:
virtual void* GetResource(void) { return mSurfaces.empty() ? NULL : mSurfaces.at(0); }
virtual void* GetResource(int entry) { return mSurfaces.empty() ? NULL : mSurfaces.at(entry); }
virtual int GetResourceCount(void) { return mSurfaces.size(); }
protected:
std::vector<gr_surface> mSurfaces;
};
class ResourceManager
{
public:
ResourceManager(xml_node<>* resList, ZipArchive* pZip);
virtual ~ResourceManager();
void LoadResources(xml_node<>* resList, ZipArchive* pZip);
public:
Resource* FindResource(std::string name);
private:
std::vector<Resource*> mResources;
};
#endif // _RESOURCE_HEADER