00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef FIFE_VIDEO_RENDERBACKENDS_SDL_SDLIMAGE_H
00023 #define FIFE_VIDEO_RENDERBACKENDS_SDL_SDLIMAGE_H
00024
00025
00026
00027
00028 #include <SDL_video.h>
00029
00030
00031
00032
00033
00034 #include "video/image.h"
00035
00036 namespace FIFE {
00037
00040 class SDLImage : public Image {
00041 public:
00042 SDLImage(IResourceLoader* loader = 0);
00043 SDLImage(const std::string& name, IResourceLoader* loader = 0);
00044 SDLImage(SDL_Surface* surface);
00045 SDLImage(const std::string& name, SDL_Surface* surface);
00046 SDLImage(const uint8_t* data, uint32_t width, uint32_t height);
00047 SDLImage(const std::string& name, const uint8_t* data, uint32_t width, uint32_t height);
00048
00049 virtual ~SDLImage();
00050 virtual void invalidate() {};
00051 virtual void setSurface(SDL_Surface* surface);
00052 virtual void render(const Rect& rect, uint8_t alpha = 255, uint8_t const* rgb = 0);
00053 virtual size_t getSize();
00054 virtual void useSharedImage(const ImagePtr& shared, const Rect& region);
00055 virtual void forceLoadInternal();
00056 virtual void load();
00057 virtual void free();
00058
00059 private:
00060
00061 void finalize();
00062
00068 SDL_Surface* optimize(SDL_Surface* surface);
00069
00070 void resetSdlimage();
00071 void validateShared();
00072
00073
00074 Uint8 m_last_alpha;
00075
00076 bool m_finalized;
00077 SDL_Color m_colorkey;
00078
00079 SDL_Surface* m_zoom_surface;
00080 float m_scale_x;
00081 float m_scale_y;
00082
00083 ImagePtr m_atlas_img;
00084
00085 std::string m_atlas_name;
00086 };
00087
00088 }
00089
00090 #endif