X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fx11.h;h=a4a0577fd1402dab9d3823c7f18e90d0a459556b;hb=de8b3ae622eae10f1caf96872fb1790f7bd9644b;hp=f27907a74246db374d81fe7a5cacc5e50f507c5d;hpb=ff56a43aa3799aa3357f4deca4d6482fc25a6a41;p=rocksndiamonds.git diff --git a/src/libgame/x11.h b/src/libgame/x11.h index f27907a7..a4a0577f 100644 --- a/src/libgame/x11.h +++ b/src/libgame/x11.h @@ -1,7 +1,7 @@ /*********************************************************** * Artsoft Retro-Game Library * *----------------------------------------------------------* -* (c) 1994-2000 Artsoft Entertainment * +* (c) 1994-2002 Artsoft Entertainment * * Holger Schemel * * Detmolder Strasse 189 * * 33604 Bielefeld * @@ -34,14 +34,25 @@ #define TARGET_STRING "X11" #endif +#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 + #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 */ +/* "Cursor" is already defined */ typedef KeySym Key; @@ -58,16 +69,28 @@ typedef XClientMessageEvent ClientMessageEvent; 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 BLACK_PIXEL BlackPixel(display, screen) +#define WHITE_PIXEL WhitePixel(display, screen) + #define EVENT_BUTTONPRESS ButtonPress #define EVENT_BUTTONRELEASE ButtonRelease #define EVENT_MOTIONNOTIFY MotionNotify @@ -276,10 +299,29 @@ struct X11DrawableInfo #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 X11CreateBitmapContent(Bitmap *, int, int, int); +inline void X11FreeBitmapPointers(Bitmap *); +inline void X11CopyArea(Bitmap *, Bitmap *, int, int, int, int, int, int, int); +inline void X11FillRectangle(Bitmap *, int, int, int, int, Pixel); +inline void X11DrawSimpleLine(Bitmap *, int, int, int, int, Pixel); +inline Pixel X11GetPixel(Bitmap *, int, int); +inline Pixel X11GetPixelFromRGB(unsigned int, unsigned int, unsigned int); + +#if defined(TARGET_X11_NATIVE) +void X11SetMouseCursor(const char **); +#endif #endif /* X11_H */