/* The SDL_rotozoom sources were copied from the SDL_gfx library and are relicensed, only for the purposes of TuxMath, to GPL. Thanks to Andreas Schiffler. SDL_rotozoom - rotozoomer LGPL (c) A. Schiffler */ #ifndef _SDL_rotozoom_h #define _SDL_rotozoom_h #include /* Set up for C function definitions, even when using C++ */ #ifdef __cplusplus extern "C" { #endif #ifndef M_PI #define M_PI 3.141592654 #endif #include "SDL.h" /* ---- Defines */ #define SMOOTHING_OFF 0 #define SMOOTHING_ON 1 /* ---- Structures */ typedef struct tColorRGBA { Uint8 r; Uint8 g; Uint8 b; Uint8 a; } tColorRGBA; typedef struct tColorY { Uint8 y; } tColorY; /* ---- Prototypes */ // #ifdef WIN32 // #ifdef BUILD_DLL // #define DLLINTERFACE __declspec(dllexport) // #else // #define DLLINTERFACE __declspec(dllimport) // #endif // #else // #define DLLINTERFACE // #endif /* NOTE inactivating above declspec stuff because we are building */ /* for our own tree */ #define DLLINTERFACE /* rotozoomSurface() Rotates and zoomes a 32bit or 8bit 'src' surface to newly created 'dst' surface. 'angle' is the rotation in degrees. 'zoom' a scaling factor. If 'smooth' is 1 then the destination 32bit surface is anti-aliased. If the surface is not 8bit or 32bit RGBA/ABGR it will be converted into a 32bit RGBA format on the fly. */ DLLINTERFACE SDL_Surface *rotozoomSurface(SDL_Surface * src, double angle, double zoom, int smooth); DLLINTERFACE SDL_Surface *rotozoomSurfaceXY (SDL_Surface * src, double angle, double zoomx, double zoomy, int smooth); /* Returns the size of the target surface for a rotozoomSurface() call */ DLLINTERFACE void rotozoomSurfaceSize(int width, int height, double angle, double zoom, int *dstwidth, int *dstheight); DLLINTERFACE void rotozoomSurfaceSizeXY (int width, int height, double angle, double zoomx, double zoomy, int *dstwidth, int *dstheight); /* zoomSurface() Zoomes a 32bit or 8bit 'src' surface to newly created 'dst' surface. 'zoomx' and 'zoomy' are scaling factors for width and height. If 'smooth' is 1 then the destination 32bit surface is anti-aliased. If the surface is not 8bit or 32bit RGBA/ABGR it will be converted into a 32bit RGBA format on the fly. */ DLLINTERFACE SDL_Surface *zoomSurface(SDL_Surface * src, double zoomx, double zoomy, int smooth); /* Returns the size of the target surface for a zoomSurface() call */ DLLINTERFACE void zoomSurfaceSize(int width, int height, double zoomx, double zoomy, int *dstwidth, int *dstheight); /* shrinkSurface() Shrinks a 32bit or 8bit 'src' surface ti a newly created 'dst' surface. 'factorx' and 'factory' are the shrinking ratios (i.e. 2=1/2 the size, 3=1/3 the size, etc.) The destination surface is antialiased by averaging the source box RGBA or Y information. If the surface is not 8bit or 32bit RGBA/ABGR it will be converted into a 32bit RGBA format on the fly. */ DLLINTERFACE SDL_Surface *shrinkSurface(SDL_Surface * src, int factorx, int factory); /* Other functions */ DLLINTERFACE SDL_Surface* rotateSurface90Degrees(SDL_Surface* pSurf, int numClockwiseTurns); /* Ends C function definitions when using C++ */ #ifdef __cplusplus } #endif #endif /* _SDL_rotozoom_h */