/***********************************************************
* Artsoft Retro-Game Library *
*----------------------------------------------------------*
-* (c) 1994-2001 Artsoft Entertainment *
+* (c) 1994-2006 Artsoft Entertainment *
* Holger Schemel *
* Detmolder Strasse 189 *
* 33604 Bielefeld *
#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
+#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;
-/* "Pixel" is already defined in X11/Intrinsic.h */
+/* "Pixel" is already defined */
+/* "Cursor" is already defined */
typedef KeySym Key;
+typedef unsigned int KeyMod;
typedef XEvent Event;
typedef XButtonEvent ButtonEvent;
{
char *source_filename;
- int width, height;
+ unsigned int width, height;
Drawable drawable;
Drawable clip_mask;
GC gc; /* GC for normal drawing (inheritated from 'window') */
GC clip_gc; /* can be 'stored_clip_gc' or one-tile-only clip GC */
};
-struct XY
+struct MouseCursorInfo
{
- short x, y;
+ 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
#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
#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 */