00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00033 #ifndef PG_SURFACECACHE_H
00034 #define PG_SURFACECACHE_H
00035
00036 #include "paragui.h"
00037 #include "pgcolor.h"
00038 #include "pgdraw.h"
00039 #include <string>
00040
00041 typedef struct {
00042 int refcount;
00043 SDL_Surface* surface;
00044 std::string key;
00045 }
00046 pg_surface_cache_t;
00047
00048
00057 class DECLSPEC PG_SurfaceCache {
00058 public:
00059
00060 PG_SurfaceCache();
00061
00062 virtual ~PG_SurfaceCache();
00063
00080 void CreateKey(std::string &key, Uint16 w, Uint16 h,
00081 PG_Gradient* gradient, SDL_Surface* background,
00082 PG_Draw::BkMode bkmode, Uint8 blend);
00083
00089 SDL_Surface* FindSurface(const std::string &key);
00090
00105 SDL_Surface* AddSurface(const std::string &key, SDL_Surface* surface);
00106
00116 void DeleteSurface(SDL_Surface* surface, bool bDeleteIfNotExists = true);
00117
00122 void IncRef(const std::string &key);
00123
00125 void Cleanup();
00126
00127 private:
00128
00129 DLLLOCAL pg_surface_cache_t* FindByKey(const std::string &key);
00130
00131 DLLLOCAL pg_surface_cache_t* FindBySurface(SDL_Surface* surface);
00132
00133 void* my_surfacemap;
00134 void* my_surfacemap_index;
00135 };
00136
00137 #endif // SURFACECACHE_H