/* * SDL Graphics Extension * SGE internal header * * Started 000627 * * License: LGPL v2+ (see the file LICENSE) * (c)2000-2003 Anders Lindström */ /********************************************************************* * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Library General Public * * License as published by the Free Software Foundation; either * * version 2 of the License, or (at your option) any later version. * *********************************************************************/ #ifndef sge_internal_H #define sge_internal_H /* This header is included in all sge_*.h files */ #include "sge_config.h" /* * C compatibility * Thanks to Ohbayashi Ippei (ohai@kmc.gr.jp) for this clever hack! */ #ifdef _SGE_C_AND_CPP #ifdef __cplusplus #define _SGE_C /* use extern "C" on base functions */ #else #define sge_C_ONLY /* remove overloaded functions */ #define _SGE_NO_CLASSES /* no C++ classes */ #endif #endif /* * This is traditional */ #ifndef PI #define PI 3.1414926535 #endif /* * Bit flags */ #define SGE_FLAG0 0x00 #define SGE_FLAG1 0x01 #define SGE_FLAG2 0x02 #define SGE_FLAG3 0x04 #define SGE_FLAG4 0x08 #define SGE_FLAG5 0x10 #define SGE_FLAG6 0x20 #define SGE_FLAG7 0x40 #define SGE_FLAG8 0x80 /* * Define the right alpha values * (they were fliped in SDL 1.1.5+) */ #ifndef SDL_ALPHA_OPAQUE #define SDL_ALPHA_OPAQUE 0 #endif #ifndef SDL_ALPHA_TRANSPARENT #define SDL_ALPHA_TRANSPARENT 255 #endif /* * Older versions of SDL doesn't have SDL_VERSIONNUM */ #ifndef SDL_VERSIONNUM #define SDL_VERSIONNUM(X, Y, Z) \ (X)*1000 + (Y)*100 + (Z) #endif /* * Macro to get clipping */ #if SDL_VERSIONNUM(SDL_MAJOR_VERSION, SDL_MINOR_VERSION, SDL_PATCHLEVEL) >= \ SDL_VERSIONNUM(1, 1, 5) #define sge_clip_xmin(pnt) pnt->clip_rect.x #define sge_clip_xmax(pnt) pnt->clip_rect.x + pnt->clip_rect.w-1 #define sge_clip_ymin(pnt) pnt->clip_rect.y #define sge_clip_ymax(pnt) pnt->clip_rect.y + pnt->clip_rect.h-1 #else #define sge_clip_xmin(pnt) pnt->clip_minx #define sge_clip_xmax(pnt) pnt->clip_maxx #define sge_clip_ymin(pnt) pnt->clip_miny #define sge_clip_ymax(pnt) pnt->clip_maxy #endif /* * Macro to get the smallest bounding box from two (SDL_Rect) rectangles */ #define sge_RectUnion(dst_rect, rect1, rect2)\ dst_rect.x = (rect1.x < rect2.x)? rect1.x:rect2.x;\ dst_rect.y = (rect1.y < rect2.y)? rect1.y:rect2.y;\ dst_rect.w = (rect1.x + rect1.w > rect2.x + rect2.w)? rect1.x + rect1.w - dst_rect.x : rect2.x + rect2.w - dst_rect.x;\ dst_rect.h = (rect1.y + rect1.h > rect2.y + rect2.h)? rect1.y + rect1.h - dst_rect.y : rect2.y + rect2.h - dst_rect.y; /* * We need to use alpha sometimes but older versions of SDL doesn't have * alpha support. */ #if SDL_VERSIONNUM(SDL_MAJOR_VERSION, SDL_MINOR_VERSION, SDL_PATCHLEVEL) >= \ SDL_VERSIONNUM(1, 1, 5) #define sge_MapRGBA SDL_MapRGBA #define sge_GetRGBA SDL_GetRGBA #else #define sge_MapRGBA(fmt, r, g, b, a) SDL_MapRGB(fmt, r, g, b) #define sge_GetRGBA(pixel, fmt, r, g, b, a) SDL_GetRGBA(pixel, fmt, r, g, b) #endif /* * Some compilers use a special export keyword * Thanks to Seung Chan Lim (limsc@maya.com or slim@djslim.com) to pointing this out * (From SDL) */ #ifndef DECLSPEC #ifdef __BEOS__ #if defined(__GNUC__) #define DECLSPEC __declspec(dllexport) #else #define DECLSPEC __declspec(export) #endif #else #ifdef WIN32 #define DECLSPEC __declspec(dllexport) #else #define DECLSPEC #endif #endif #endif #endif /* sge_internal_H */