1 /***********************************************************
2 * Rocks'n'Diamonds -- McDuffin Strikes Back! *
3 *----------------------------------------------------------*
4 * ©1995 Artsoft Development *
6 * 33659 Bielefeld-Senne *
7 * Telefon: (0521) 493245 *
8 * eMail: aeglos@valinor.owl.de *
9 * aeglos@uni-paderborn.de *
10 * q99492@pbhrzx.uni-paderborn.de *
11 *----------------------------------------------------------*
13 ***********************************************************/
17 inline void ClearRectangle(Bitmap bitmap, int x, int y, int width, int height)
19 #ifdef USE_SDL_LIBRARY
20 SDLFillRectangle(bitmap, x, y, width, height, 0x000000);
22 XFillRectangle(display, bitmap, gc, x, y, width, height);
26 inline void BlitBitmap(Bitmap src_bitmap, Bitmap dst_bitmap,
28 int width, int height,
31 #ifdef USE_SDL_LIBRARY
32 SDLCopyArea(src_bitmap, dst_bitmap,
33 src_x, src_y, width, height, dst_x, dst_y);
35 XCopyArea(display, src_bitmap, dst_bitmap, gc,
36 src_x, src_y, width, height, dst_x, dst_y);
40 #ifndef USE_SDL_LIBRARY
41 static GC last_clip_gc = 0; /* needed for XCopyArea() through clip mask */
44 inline void SetClipMask(GC clip_gc, Pixmap clip_pixmap)
46 #ifndef USE_SDL_LIBRARY
47 XSetClipMask(display, clip_gc, clip_pixmap);
48 last_clip_gc = clip_gc;
52 inline void SetClipOrigin(GC clip_gc, int clip_x, int clip_y)
54 #ifndef USE_SDL_LIBRARY
55 XSetClipOrigin(display, clip_gc, clip_x, clip_y);
56 last_clip_gc = clip_gc;
60 inline void BlitBitmapMasked(Bitmap src_bitmap, Bitmap dst_bitmap,
62 int width, int height,
65 #ifdef USE_SDL_LIBRARY
66 SDLCopyArea(src_bitmap, dst_bitmap,
67 src_x, src_y, width, height, dst_x, dst_y);
69 XCopyArea(display, src_bitmap, dst_bitmap, last_clip_gc,
70 src_x, src_y, width, height, dst_x, dst_y);
74 inline void DrawSimpleWhiteLine(Bitmap bitmap, int from_x, int from_y,
77 #ifdef USE_SDL_LIBRARY
78 SDLDrawSimpleLine(bitmap, from_x, from_y, to_x, to_y, 0xffffff);
80 XSetForeground(display, gc, WhitePixel(display, screen));
81 XDrawLine(display, bitmap, gc, from_x, from_y, to_x, to_y);
82 XSetForeground(display, gc, BlackPixel(display, screen));
86 /* execute all pending screen drawing operations */
87 inline void FlushDisplay()
89 #ifndef USE_SDL_LIBRARY
94 /* execute and wait for all pending screen drawing operations */
95 inline void SyncDisplay()
97 #ifndef USE_SDL_LIBRARY
98 XSync(display, FALSE);
102 inline void KeyboardAutoRepeatOn()
104 #ifdef USE_SDL_LIBRARY
105 SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY / 2,
106 SDL_DEFAULT_REPEAT_INTERVAL / 2);
107 SDL_EnableUNICODE(1);
109 XAutoRepeatOn(display);
113 inline void KeyboardAutoRepeatOff()
115 #ifdef USE_SDL_LIBRARY
116 SDL_EnableKeyRepeat(0, SDL_DEFAULT_REPEAT_INTERVAL);
117 SDL_EnableUNICODE(0);
119 XAutoRepeatOff(display);
123 inline boolean QueryPointer(DrawWindow window, int *win_x, int *win_y)
125 #ifdef USE_SDL_LIBRARY
126 SDL_GetMouseState(win_x, win_y);
129 DrawWindow root, child;
133 /* if XQueryPointer() returns False, the pointer
134 is not on the same screen as the specified window */
135 return XQueryPointer(display, window, &root, &child, &root_x, &root_y,
136 win_x, win_y, &mask);
140 inline boolean PendingEvent()
142 #ifdef USE_SDL_LIBRARY
143 return (SDL_PollEvent(NULL) ? TRUE : FALSE);
145 return (XPending(display) ? TRUE : FALSE);
149 inline void NextEvent(Event *event)
151 #ifdef USE_SDL_LIBRARY
152 SDL_WaitEvent(event);
154 XNextEvent(display, event);
158 inline Key GetEventKey(KeyEvent *event, boolean with_modifiers)
160 #ifdef USE_SDL_LIBRARY
161 if (with_modifiers && event->keysym.unicode != 0)
162 return event->keysym.unicode;
164 return event->keysym.sym;
167 return XLookupKeysym(event, event->state);
169 return XLookupKeysym(event, 0);
175 #ifdef USE_SDL_LIBRARY