diff options
Diffstat (limited to 'src/libs/graphics/tfb_draw.h')
-rw-r--r-- | src/libs/graphics/tfb_draw.h | 199 |
1 files changed, 199 insertions, 0 deletions
diff --git a/src/libs/graphics/tfb_draw.h b/src/libs/graphics/tfb_draw.h new file mode 100644 index 0000000..11de5b0 --- /dev/null +++ b/src/libs/graphics/tfb_draw.h @@ -0,0 +1,199 @@ +//Copyright Paul Reiche, Fred Ford. 1992-2002 + +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef TFB_DRAW_H +#define TFB_DRAW_H + +#include "libs/threadlib.h" + + +typedef void *TFB_Canvas; + +typedef enum { + TFB_SCREEN_MAIN, + TFB_SCREEN_EXTRA, + TFB_SCREEN_TRANSITION, + + TFB_GFX_NUMSCREENS +} SCREEN; + +#include "libs/graphics/gfx_common.h" +#include "libs/graphics/cmap.h" + +typedef struct tfb_image +{ + TFB_Canvas NormalImg; + TFB_Canvas ScaledImg; + TFB_Canvas MipmapImg; + TFB_Canvas FilledImg; + int colormap_index; + int colormap_version; + HOT_SPOT NormalHs; + HOT_SPOT MipmapHs; + HOT_SPOT last_scale_hs; + int last_scale; + int last_scale_type; + Color last_fill; + EXTENT extent; + Mutex mutex; + BOOLEAN dirty; +} TFB_Image; + +typedef struct tfb_char +{ + EXTENT extent; + EXTENT disp; + // Display extent + HOT_SPOT HotSpot; + BYTE* data; + DWORD pitch; + // Pitch is for storing all chars of a page + // in one rectangular pixel matrix +} TFB_Char; + +// we do not support paletted format for now +typedef struct tfb_pixelformat +{ + int BitsPerPixel; + int BytesPerPixel; + DWORD Rmask, Gmask, Bmask, Amask; + DWORD Rshift, Gshift, Bshift, Ashift; + DWORD Rloss, Gloss, Bloss, Aloss; +} TFB_PixelFormat; + +// Drawing commands + +void TFB_DrawScreen_Line (int x1, int y1, int x2, int y2, Color color, + DrawMode, SCREEN dest); +void TFB_DrawScreen_Rect (RECT *rect, Color, DrawMode, SCREEN dest); +void TFB_DrawScreen_Image (TFB_Image *img, int x, int y, int scale, + int scaleMode, TFB_ColorMap *, DrawMode, SCREEN dest); +void TFB_DrawScreen_Copy (const RECT *r, SCREEN src, SCREEN dest); +void TFB_DrawScreen_FilledImage (TFB_Image *img, int x, int y, int scale, + int scaleMode, Color, DrawMode, SCREEN dest); +void TFB_DrawScreen_FontChar (TFB_Char *, TFB_Image *backing, int x, int y, + DrawMode, SCREEN dest); + +void TFB_DrawScreen_CopyToImage (TFB_Image *img, const RECT *r, SCREEN src); +void TFB_DrawScreen_SetMipmap (TFB_Image *img, TFB_Image *mmimg, int hotx, + int hoty); +void TFB_DrawScreen_DeleteImage (TFB_Image *img); +void TFB_DrawScreen_DeleteData (void *); +void TFB_DrawScreen_WaitForSignal (void); +void TFB_DrawScreen_ReinitVideo (int driver, int flags, int width, int height); +void TFB_DrawScreen_Callback (void (*callback) (void *arg), void *arg); + +TFB_Image *TFB_DrawImage_New (TFB_Canvas canvas); +TFB_Image *TFB_DrawImage_CreateForScreen (int w, int h, BOOLEAN withalpha); +TFB_Image *TFB_DrawImage_New_Rotated (TFB_Image *img, int angle); +void TFB_DrawImage_SetMipmap (TFB_Image *img, TFB_Image *mmimg, int hotx, + int hoty); +void TFB_DrawImage_Delete (TFB_Image *image); +void TFB_DrawImage_FixScaling (TFB_Image *image, int target, int type); +BOOLEAN TFB_DrawImage_Intersect (TFB_Image *img1, POINT img1org, + TFB_Image *img2, POINT img2org, const RECT *interRect); +void TFB_DrawImage_CopyRect (TFB_Image *source, const RECT *srcRect, + TFB_Image *target, POINT dstPt); + +void TFB_DrawImage_Line (int x1, int y1, int x2, int y2, Color color, + DrawMode, TFB_Image *target); +void TFB_DrawImage_Rect (RECT *rect, Color, DrawMode, TFB_Image *target); +void TFB_DrawImage_Image (TFB_Image *img, int x, int y, int scale, + int scaleMode, TFB_ColorMap *, DrawMode, TFB_Image *target); +void TFB_DrawImage_FilledImage (TFB_Image *img, int x, int y, int scale, + int scaleMode, Color, DrawMode, TFB_Image *target); +void TFB_DrawImage_FontChar (TFB_Char *, TFB_Image *backing, int x, int y, + DrawMode, TFB_Image *target); + +TFB_Canvas TFB_DrawCanvas_LoadFromFile (void *dir, const char *fileName); +TFB_Canvas TFB_DrawCanvas_New_TrueColor (int w, int h, BOOLEAN hasalpha); +TFB_Canvas TFB_DrawCanvas_New_ForScreen (int w, int h, BOOLEAN withalpha); +TFB_Canvas TFB_DrawCanvas_New_Paletted (int w, int h, Color palette[256], + int transparent_index); +TFB_Canvas TFB_DrawCanvas_New_ScaleTarget (TFB_Canvas canvas, + TFB_Canvas oldcanvas, int type, int last_type); +TFB_Canvas TFB_DrawCanvas_New_RotationTarget (TFB_Canvas src, int angle); +TFB_Canvas TFB_DrawCanvas_ToScreenFormat (TFB_Canvas canvas); +BOOLEAN TFB_DrawCanvas_IsPaletted (TFB_Canvas canvas); +void TFB_DrawCanvas_Rescale_Nearest (TFB_Canvas src, TFB_Canvas dst, + int scale, HOT_SPOT* src_hs, EXTENT* size, HOT_SPOT* dst_hs); +void TFB_DrawCanvas_Rescale_Bilinear (TFB_Canvas src, TFB_Canvas dst, + int scale, HOT_SPOT* src_hs, EXTENT* size, HOT_SPOT* dst_hs); +void TFB_DrawCanvas_Rescale_Trilinear (TFB_Canvas src, TFB_Canvas mipmap, + TFB_Canvas dst, int scale, HOT_SPOT* src_hs, HOT_SPOT* mm_hs, + EXTENT* size, HOT_SPOT* dst_hs); +void TFB_DrawCanvas_GetScaledExtent (TFB_Canvas src_canvas, HOT_SPOT* src_hs, + TFB_Canvas src_mipmap, HOT_SPOT* mm_hs, + int scale, int type, EXTENT *size, HOT_SPOT *hs); +void TFB_DrawCanvas_Rotate (TFB_Canvas src, TFB_Canvas dst, int angle, + EXTENT size); +void TFB_DrawCanvas_GetRotatedExtent (TFB_Canvas src, int angle, EXTENT *size); +void TFB_DrawCanvas_GetExtent (TFB_Canvas canvas, EXTENT *size); +void TFB_DrawCanvas_SetClipRect (TFB_Canvas canvas, const RECT *clipRect); + +void TFB_DrawCanvas_Delete (TFB_Canvas canvas); + +void TFB_DrawCanvas_Line (int x1, int y1, int x2, int y2, Color color, + DrawMode, TFB_Canvas target); +void TFB_DrawCanvas_Rect (RECT *rect, Color, DrawMode, TFB_Canvas target); +void TFB_DrawCanvas_Image (TFB_Image *img, int x, int y, int scale, + int scaleMode, TFB_ColorMap *, DrawMode, TFB_Canvas target); +void TFB_DrawCanvas_FilledImage (TFB_Image *img, int x, int y, int scale, + int scaleMode, Color, DrawMode, TFB_Canvas target); +void TFB_DrawCanvas_FontChar (TFB_Char *, TFB_Image *backing, int x, int y, + DrawMode, TFB_Canvas target); +void TFB_DrawCanvas_CopyRect (TFB_Canvas source, const RECT *srcRect, + TFB_Canvas target, POINT dstPt); + +BOOLEAN TFB_DrawCanvas_GetFontCharData (TFB_Canvas canvas, BYTE *outData, + unsigned dataPitch); +Color *TFB_DrawCanvas_ExtractPalette (TFB_Canvas canvas); +void TFB_DrawCanvas_SetPalette (TFB_Canvas target, Color palette[256]); +int TFB_DrawCanvas_GetTransparentIndex (TFB_Canvas canvas); +void TFB_DrawCanvas_SetTransparentIndex (TFB_Canvas canvas, int i, + BOOLEAN rleaccel); +BOOLEAN TFB_DrawCanvas_GetTransparentColor (TFB_Canvas canvas, + Color *color); +void TFB_DrawCanvas_SetTransparentColor (TFB_Canvas canvas, + Color color, BOOLEAN rleaccel); +void TFB_DrawCanvas_CopyTransparencyInfo (TFB_Canvas src, TFB_Canvas dst); +void TFB_DrawCanvas_Initialize (void); +void TFB_DrawCanvas_Lock (TFB_Canvas canvas); +void TFB_DrawCanvas_Unlock (TFB_Canvas canvas); +void TFB_DrawCanvas_GetScreenFormat (TFB_PixelFormat *fmt); +int TFB_DrawCanvas_GetStride (TFB_Canvas canvas); +void *TFB_DrawCanvas_GetLine (TFB_Canvas canvas, int line); +Color TFB_DrawCanvas_GetPixel (TFB_Canvas canvas, int x, int y); +BOOLEAN TFB_DrawCanvas_Intersect (TFB_Canvas canvas1, POINT c1org, + TFB_Canvas canvas2, POINT c2org, const RECT *interRect); + +BOOLEAN TFB_DrawCanvas_GetPixelColors (TFB_Canvas, Color *pixels, + int width, int height); +BOOLEAN TFB_DrawCanvas_SetPixelColors (TFB_Canvas, const Color *pixels, + int width, int height); +BOOLEAN TFB_DrawCanvas_GetPixelIndexes (TFB_Canvas, BYTE *data, + int width, int height); +BOOLEAN TFB_DrawCanvas_SetPixelIndexes (TFB_Canvas, const BYTE *data, + int width, int height); + +const char *TFB_DrawCanvas_GetError (void); + +TFB_Canvas TFB_GetScreenCanvas (SCREEN screen); + +#endif + |