// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
// 02111-1307, USA.
-
#ifndef SUPERTUX_TEXTURE_H
#define SUPERTUX_TEXTURE_H
#include <list>
#ifndef NOOPENGL
-#include "SDL_opengl.h"
+#include <SDL_opengl.h>
#endif
#include "SDL.h"
-#include "../math/vector.h"
-#include "../video/screen.h"
+#include "math/vector.h"
+#include "video/screen.h"
namespace SuperTux
{
/// types of filters
enum {
- MASK_FILTER
+ HORIZONTAL_FLIP_FILTER,
+ MASK_FILTER,
+ NONE_FILTER
};
/** This class holds all the data necessary to construct a surface */
ConstructorType type;
SDL_Surface* surface;
std::string file;
+
+ struct Filter { int type; Color color; };
+ std::vector<Filter> applied_filters;
+
bool use_alpha;
int x;
int y;
/** Reload the surface, which is necesarry in case of a mode swich */
void reload();
- void resize(int widht, int height);
-
- void apply_mask(Color color);
+ void apply_filter(int filter, Color color = Color(0,0,0));
};
/** Surface implementation, all implementation have to inherit from
virtual int draw_stretched(float x, float y, int w, int h, Uint8 alpha, Uint32 effect = NONE_EFFECT) = 0;
- int resize(int w_, int h_);
-
SDL_Surface* get_sdl_surface() const; // @evil@ try to avoid this function
- virtual void apply_mask(Color color) = 0;
+ virtual void apply_filter(int filter, Color color = Color(0,0,0)) = 0;
};
class SurfaceSDL : public SurfaceImpl
public:
SurfaceSDL(SDL_Surface* surf, bool use_alpha);
SurfaceSDL(const std::string& file, bool use_alpha);
- SurfaceSDL(const std::string& file, int x, int y, int w, int h, bool use_alpha);
+ SurfaceSDL(const std::string& file, int x, int y, int w_, int h_, bool use_alpha);
SurfaceSDL(Color top_gradient, Color bottom_gradient, int w, int h);
virtual ~SurfaceSDL();
int draw_part(float sx, float sy, float x, float y, float w, float h, Uint8 alpha, Uint32 effect = NONE_EFFECT);
int draw_stretched(float x, float y, int w, int h, Uint8 alpha, Uint32 effect = NONE_EFFECT);
- void apply_mask(Color color);
+ void apply_filter(int filter, Color color);
};
#ifndef NOOPENGL
int draw_part(float sx, float sy, float x, float y, float w, float h, Uint8 alpha, Uint32 effect = NONE_EFFECT);
int draw_stretched(float x, float y, int w, int h, Uint8 alpha, Uint32 effect = NONE_EFFECT);
- void apply_mask(Color color);
+ void apply_filter(int filter, Color color);
private:
void create_gl(SDL_Surface * surf, GLuint * tex);