rnd-20030403-3-src
[rocksndiamonds.git] / src / libgame / x11.h
index ca1247c50bc0a2c1459ae6eba6b1186d6e0b96a6..b0a503653e500652f2e9054401b7fae37c551252 100644 (file)
@@ -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
 #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 Pixmap                 Bitmap;
-typedef Window                 DrawWindow;
-typedef Drawable               DrawBuffer;
+typedef struct X11DrawableInfo Bitmap;
+typedef struct X11DrawableInfo DrawWindow;
+typedef struct X11DrawableInfo DrawBuffer;
+/* "Pixel" is already defined in X11/Intrinsic.h */
 
 typedef KeySym                 Key;
 
@@ -55,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
@@ -265,9 +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 X11InitBufferedDisplay(DrawBuffer *, DrawWindow *);
+inline void X11InitVideoDisplay(void);
+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 */