X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fx11.h;h=b0a503653e500652f2e9054401b7fae37c551252;hb=e4bf86b0ac3fd50612eee1439beba2fbaaa7cd09;hp=dc40776669fe84676a606ff6e7258aa3374ee804;hpb=621b6a2c4781c9c3e2f5849f9c184a906e0ce5b6;p=rocksndiamonds.git diff --git a/src/libgame/x11.h b/src/libgame/x11.h index dc407766..b0a50365 100644 --- a/src/libgame/x11.h +++ b/src/libgame/x11.h @@ -1,15 +1,14 @@ /*********************************************************** -* Rocks'n'Diamonds -- McDuffin Strikes Back! * +* Artsoft Retro-Game Library * *----------------------------------------------------------* -* ©1995 Artsoft Development * -* Holger Schemel * -* 33659 Bielefeld-Senne * -* Telefon: (0521) 493245 * -* eMail: aeglos@valinor.owl.de * -* aeglos@uni-paderborn.de * -* q99492@pbhrzx.uni-paderborn.de * +* (c) 1994-2002 Artsoft Entertainment * +* Holger Schemel * +* Detmolder Strasse 189 * +* 33604 Bielefeld * +* Germany * +* e-mail: info@artsoft.org * *----------------------------------------------------------* -* x11.h * +* x11.h * ***********************************************************/ #ifndef X11_H @@ -35,26 +34,24 @@ #define TARGET_STRING "X11" #endif -#define FULLSCREEN_STATUS FULLSCREEN_NOT_AVAILABLE - - -/* structure definitions */ +#if defined(PLATFORM_UNIX) +/* This triggers some stuff that is needed because X11 (XSetClipOrigin(), + to be precise) is often very slow when preparing a masked XCopyArea() + for big Pixmaps. + To prevent this, small (tile-sized) mask Pixmaps are created which will + then be set much faster with XSetClipOrigin() and speed things up a lot. */ +#define TARGET_X11_NATIVE_PERFORMANCE_WORKAROUND +#endif -struct X11DrawableInfo -{ - Drawable drawable; - Drawable clip_mask; - GC gc; /* GC for normal drawing (inheritated from 'window') */ - GC stored_clip_gc; /* GC for masked drawing (used for whole Pixmap) */ - GC clip_gc; /* can be 'stored_clip_gc' or one-tile-only clip GC */ -}; +#define FULLSCREEN_STATUS FULLSCREEN_NOT_AVAILABLE /* X11 type definitions */ -typedef struct X11DrawableInfo *Bitmap; -typedef struct X11DrawableInfo *DrawWindow; -typedef struct X11DrawableInfo *DrawBuffer; +typedef struct X11DrawableInfo Bitmap; +typedef struct X11DrawableInfo DrawWindow; +typedef struct X11DrawableInfo DrawBuffer; +/* "Pixel" is already defined in X11/Intrinsic.h */ typedef KeySym Key; @@ -67,6 +64,27 @@ typedef XFocusChangeEvent FocusChangeEvent; typedef XClientMessageEvent ClientMessageEvent; +/* structure definitions */ + +struct X11DrawableInfo +{ + char *source_filename; + + int width, height; + Drawable drawable; + Drawable clip_mask; + GC gc; /* GC for normal drawing (inheritated from 'window') */ + GC line_gc[2]; /* GC for foreground and background line drawing */ + GC stored_clip_gc; /* GC for masked drawing (used for whole Pixmap) */ + GC clip_gc; /* can be 'stored_clip_gc' or one-tile-only clip GC */ +}; + +struct XY +{ + short x, y; +}; + + /* X11 symbol definitions */ #define EVENT_BUTTONPRESS ButtonPress @@ -277,10 +295,22 @@ typedef XClientMessageEvent ClientMessageEvent; #define KSYM_F23 XK_F23 #define KSYM_F24 XK_F24 +#define KSYM_FKEY_FIRST KSYM_F1 +#define KSYM_FKEY_LAST KSYM_F24 +#define KSYM_NUM_FKEYS (KSYM_FKEY_LAST - KSYM_FKEY_FIRST + 1) + /* X11 function definitions */ inline void X11InitVideoDisplay(void); -inline void X11InitVideoBuffer(DrawBuffer *, DrawWindow *); +inline void X11InitVideoBuffer(DrawBuffer **, DrawWindow **); + +void X11ZoomBitmap(Bitmap *, Bitmap *); +Bitmap *X11LoadImage(char *); + +inline void X11CopyArea(Bitmap *, Bitmap *, int, int, int, int, int, int, int); +inline void X11FillRectangle(Bitmap *, int, int, int, int, Pixel); +inline Pixel X11GetPixel(Bitmap *, int, int); +inline Pixel X11GetPixelFromRGB(unsigned int, unsigned int, unsigned int); #endif /* X11_H */