X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fx11.h;h=dc22d353d50af81e00266b27375034dd7399b0a0;hb=a7c06161253796a30a0237a7f5a044f459c8cf35;hp=f48584215ffb9440e2f5f60cd3d8c11155b1e7b3;hpb=1465ca1ffdf2104d25b9a46ca9bf8a3f175403fd;p=rocksndiamonds.git diff --git a/src/libgame/x11.h b/src/libgame/x11.h index f4858421..dc22d353 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-2006 Artsoft Entertainment * +* Holger Schemel * +* Detmolder Strasse 189 * +* 33604 Bielefeld * +* Germany * +* e-mail: info@artsoft.org * *----------------------------------------------------------* -* x11.h * +* x11.h * ***********************************************************/ #ifndef X11_H @@ -35,16 +34,32 @@ #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 WINDOW_SCALING_STATUS WINDOW_SCALING_NOT_AVAILABLE #define FULLSCREEN_STATUS FULLSCREEN_NOT_AVAILABLE +#define CURSOR_MAX_WIDTH 32 +#define CURSOR_MAX_HEIGHT 32 + /* 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; +typedef unsigned int KeyMod; typedef XEvent Event; typedef XButtonEvent ButtonEvent; @@ -59,16 +74,32 @@ typedef XClientMessageEvent ClientMessageEvent; struct X11DrawableInfo { + char *source_filename; + + unsigned 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 MouseCursorInfo +{ + int width, height; + int hot_x, hot_y; + + char data[CURSOR_MAX_WIDTH * CURSOR_MAX_HEIGHT / 8]; + char mask[CURSOR_MAX_WIDTH * CURSOR_MAX_HEIGHT / 8]; +}; + /* 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 @@ -168,6 +199,7 @@ struct X11DrawableInfo #define KSYM_braceright XK_braceright #define KSYM_asciitilde XK_asciitilde +#define KSYM_degree XK_degree #define KSYM_Adiaeresis XK_Adiaeresis #define KSYM_Odiaeresis XK_Odiaeresis #define KSYM_Udiaeresis XK_Udiaeresis @@ -277,10 +309,49 @@ 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) + +#define KMOD_None None +#define KMOD_Shift_L 0x0001 +#define KMOD_Shift_R 0x0002 +#define KMOD_Control_L 0x0040 +#define KMOD_Control_R 0x0080 +#define KMOD_Meta_L 0x0400 +#define KMOD_Meta_R 0x0800 +#define KMOD_Alt_L 0x0100 +#define KMOD_Alt_R 0x0200 + +#define KMOD_Shift (KMOD_Shift_L | KMOD_Shift_R) +#define KMOD_Control (KMOD_Control_L | KMOD_Control_R) +#define KMOD_Meta (KMOD_Meta_L | KMOD_Meta_R) +#define KMOD_Alt (KMOD_Alt_L | KMOD_Alt_R) + /* X11 function definitions */ -inline void X11InitVideoDisplay(void); -inline void X11InitVideoBuffer(DrawBuffer *, DrawWindow *); +void X11InitVideoDisplay(void); +void X11InitVideoBuffer(DrawBuffer **, DrawWindow **); + +void X11CloseWindow(DrawWindow *); + +void X11ZoomBitmap(Bitmap *, Bitmap *); +Bitmap *X11LoadImage(char *); + +void X11CreateBitmapContent(Bitmap *, int, int, int); +void X11FreeBitmapPointers(Bitmap *); +void X11CopyArea(Bitmap *, Bitmap *, int, int, int, int, int, int, int); +void X11FillRectangle(Bitmap *, int, int, int, int, Pixel); +void X11FadeRectangle(Bitmap *, int, int, int, int, int, int, int, + void (*draw_border_function)(void)); +void X11DrawSimpleLine(Bitmap *, int, int, int, int, Pixel); +Pixel X11GetPixel(Bitmap *, int, int); +Pixel X11GetPixelFromRGB(unsigned int, unsigned int, unsigned int); +void X11DestroyImage(XImage *); + +#if defined(TARGET_X11_NATIVE) +void X11SetMouseCursor(struct MouseCursorInfo *); +#endif #endif /* X11_H */