blob: cc5e7b6ff9b0095fde79696cd94a32ac6f6432cb [file] [log] [blame]
Dees_Troy51a0e822012-09-05 15:24:24 -04001// resources.hpp - Base classes for resource management of GUI
2
3#ifndef _RESOURCE_HEADER
4#define _RESOURCE_HEADER
5
Dees Troyb7ae0982013-09-10 20:47:35 +00006#include "../minzip/Zip.h"
Dees Troyb7ae0982013-09-10 20:47:35 +00007
thatf37aec22015-02-01 13:38:35 +01008extern "C" {
9#include "../minuitwrp/minui.h"
10}
11
Dees_Troy51a0e822012-09-05 15:24:24 -040012// Base Objects
13class Resource
14{
15public:
Vojtech Bocekfafb0c52013-07-25 22:53:02 +020016 Resource(xml_node<>* node, ZipArchive* pZip);
17 virtual ~Resource() {}
Dees_Troy51a0e822012-09-05 15:24:24 -040018
19public:
Vojtech Bocekfafb0c52013-07-25 22:53:02 +020020 virtual void* GetResource(void) = 0;
21 std::string GetName(void) { return mName; }
Dees_Troy51a0e822012-09-05 15:24:24 -040022
23private:
Vojtech Bocekfafb0c52013-07-25 22:53:02 +020024 std::string mName;
Dees_Troy51a0e822012-09-05 15:24:24 -040025
26protected:
Vojtech Bocekfafb0c52013-07-25 22:53:02 +020027 static int ExtractResource(ZipArchive* pZip, std::string folderName, std::string fileName, std::string fileExtn, std::string destFile);
Ethan Yonker63e414f2015-02-06 15:44:39 -060028 static void LoadImage(ZipArchive* pZip, std::string file, gr_surface* source);
29 static void CheckAndScaleImage(gr_surface source, gr_surface* destination, int retain_aspect);
Dees_Troy51a0e822012-09-05 15:24:24 -040030};
31
Dees_Troy51a0e822012-09-05 15:24:24 -040032class FontResource : public Resource
33{
34public:
Vojtech Bocek76ee9032014-09-07 15:01:56 +020035 enum Type
36 {
37 TYPE_TWRP,
38#ifndef TW_DISABLE_TTF
39 TYPE_TTF,
40#endif
41 };
42
Vojtech Bocekfafb0c52013-07-25 22:53:02 +020043 FontResource(xml_node<>* node, ZipArchive* pZip);
44 virtual ~FontResource();
Dees_Troy51a0e822012-09-05 15:24:24 -040045
46public:
Vojtech Bocekfafb0c52013-07-25 22:53:02 +020047 virtual void* GetResource(void) { return mFont; }
Dees_Troy51a0e822012-09-05 15:24:24 -040048
49protected:
Vojtech Bocekfafb0c52013-07-25 22:53:02 +020050 void* mFont;
Vojtech Bocek76ee9032014-09-07 15:01:56 +020051 Type m_type;
Dees_Troy51a0e822012-09-05 15:24:24 -040052};
53
54class ImageResource : public Resource
55{
56public:
Ethan Yonker63e414f2015-02-06 15:44:39 -060057 ImageResource(xml_node<>* node, ZipArchive* pZip, int retain_aspect);
Vojtech Bocekfafb0c52013-07-25 22:53:02 +020058 virtual ~ImageResource();
Dees_Troy51a0e822012-09-05 15:24:24 -040059
60public:
Vojtech Bocekfafb0c52013-07-25 22:53:02 +020061 virtual void* GetResource(void) { return mSurface; }
Dees_Troy51a0e822012-09-05 15:24:24 -040062
63protected:
Vojtech Bocekfafb0c52013-07-25 22:53:02 +020064 gr_surface mSurface;
Dees_Troy51a0e822012-09-05 15:24:24 -040065};
66
67class AnimationResource : public Resource
68{
69public:
Ethan Yonker63e414f2015-02-06 15:44:39 -060070 AnimationResource(xml_node<>* node, ZipArchive* pZip, int retain_aspect);
Vojtech Bocekfafb0c52013-07-25 22:53:02 +020071 virtual ~AnimationResource();
Dees_Troy51a0e822012-09-05 15:24:24 -040072
73public:
bigbiff85939e52014-11-15 21:03:52 -050074 virtual void* GetResource(void) { return mSurfaces.empty() ? NULL : mSurfaces.at(0); }
75 virtual void* GetResource(int entry) { return mSurfaces.empty() ? NULL : mSurfaces.at(entry); }
Vojtech Bocekfafb0c52013-07-25 22:53:02 +020076 virtual int GetResourceCount(void) { return mSurfaces.size(); }
Dees_Troy51a0e822012-09-05 15:24:24 -040077
78protected:
Vojtech Bocekfafb0c52013-07-25 22:53:02 +020079 std::vector<gr_surface> mSurfaces;
Dees_Troy51a0e822012-09-05 15:24:24 -040080};
81
82class ResourceManager
83{
84public:
Vojtech Bocekfafb0c52013-07-25 22:53:02 +020085 ResourceManager(xml_node<>* resList, ZipArchive* pZip);
86 virtual ~ResourceManager();
Ethan Yonker780cd392014-07-21 15:24:39 -050087 void LoadResources(xml_node<>* resList, ZipArchive* pZip);
Dees_Troy51a0e822012-09-05 15:24:24 -040088
89public:
Vojtech Bocekfafb0c52013-07-25 22:53:02 +020090 Resource* FindResource(std::string name);
Dees_Troy51a0e822012-09-05 15:24:24 -040091
92private:
Vojtech Bocekfafb0c52013-07-25 22:53:02 +020093 std::vector<Resource*> mResources;
Dees_Troy51a0e822012-09-05 15:24:24 -040094};
95
96#endif // _RESOURCE_HEADER