#define KEY_RELEASED FALSE
#define KEY_PRESSED TRUE
+
+/* event filter especially needed for SDL event filtering due to
+ delay problems with lots of mouse motion events when mouse
+ button not pressed */
+
+int EventFilter(const Event *event)
+{
+ if (event->type != EVENT_MOTIONNOTIFY)
+ return 1;
+
+ /* get mouse motion events without pressed button only in level editor */
+ if (button_status == MB_RELEASED && game_status != LEVELED)
+ return 0;
+ else
+ return 1;
+}
+
void EventLoop(void)
{
while(1)
NextEvent(&event);
- switch(event.type)
+ if (EventFilter(&event))
{
- case EVENT_BUTTONPRESS:
- case EVENT_BUTTONRELEASE:
- HandleButtonEvent((ButtonEvent *) &event);
- break;
-
- case EVENT_MOTIONNOTIFY:
- HandleMotionEvent((MotionEvent *) &event);
- break;
-
- case EVENT_KEYPRESS:
- case EVENT_KEYRELEASE:
- HandleKeyEvent((KeyEvent *) &event);
- break;
-
- default:
- HandleOtherEvents(&event);
- break;
+ switch(event.type)
+ {
+ case EVENT_BUTTONPRESS:
+ case EVENT_BUTTONRELEASE:
+ HandleButtonEvent((ButtonEvent *) &event);
+ break;
+
+ case EVENT_MOTIONNOTIFY:
+ HandleMotionEvent((MotionEvent *) &event);
+ break;
+
+ case EVENT_KEYPRESS:
+ case EVENT_KEYRELEASE:
+ HandleKeyEvent((KeyEvent *) &event);
+ break;
+
+ default:
+ HandleOtherEvents(&event);
+ break;
+ }
}
}
HandleClientMessageEvent((ClientMessageEvent *) event);
break;
+#ifdef USE_SDL_LIBRARY
+ case SDL_JOYAXISMOTION:
+ case SDL_JOYBUTTONDOWN:
+ case SDL_JOYBUTTONUP:
+ HandleJoystickEvent(event);
+ break;
+#endif
+
default:
break;
}
void HandleExposeEvent(ExposeEvent *event)
{
+#ifndef USE_SDL_LIBRARY
int x = event->x, y = event->y;
int width = event->width, height = event->height;
BlitBitmap(drawto, window, x,y, width,height, x,y);
FlushDisplay();
+#endif
}
void HandleButtonEvent(ButtonEvent *event)
void HandleMotionEvent(MotionEvent *event)
{
- int win_x, win_y;
-
- if (!QueryPointer(window, &win_x, &win_y))
+ if (!PointerInWindow(window))
return; /* window and pointer are on different screens */
- if (!button_status && game_status != LEVELED)
+#if 0
+ if (button_status == MB_RELEASED && game_status != LEVELED)
return;
+#endif
motion_status = TRUE;
- HandleButton(win_x, win_y, button_status);
+ HandleButton(event->x, event->y, button_status);
}
void HandleKeyEvent(KeyEvent *event)
GAME_FRAME_DELAY * 100 / GameFrameDelay, GameFrameDelay);
break;
+ case KEY_d:
+ if (options.debug)
+ {
+ options.debug = FALSE;
+ printf("debug mode disabled\n");
+ }
+ else
+ {
+ options.debug = TRUE;
+ printf("debug mode enabled\n");
+ }
+ break;
+
+ case KEY_s:
+ if (!global.fps_slowdown)
+ {
+ global.fps_slowdown = TRUE;
+ global.fps_slowdown_factor = 2;
+ printf("fps slowdown enabled -- display only every 2nd frame\n");
+ }
+ else if (global.fps_slowdown_factor == 2)
+ {
+ global.fps_slowdown_factor = 4;
+ printf("fps slowdown enabled -- display only every 4th frame\n");
+ }
+ else
+ {
+ global.fps_slowdown = FALSE;
+ global.fps_slowdown_factor = 1;
+ printf("fps slowdown disabled\n");
+ }
+ break;
#if 0
case KEY_a:
return;
}
-#ifndef MSDOS
+#if !defined(MSDOS) && !defined(WIN32)
if (options.network)
HandleNetworking();
#endif