#define KEY_PRESSED TRUE
+static boolean cursor_inside_playfield = FALSE;
+static boolean playfield_cursor_set = FALSE;
+static unsigned long playfield_cursor_delay = 0;
+
+
/* event filter especially needed for SDL event filtering due to
delay problems with lots of mouse motion events when mouse button
not pressed (X11 can handle this with 'PointerMotionHintMask') */
int FilterMouseMotionEvents(const Event *event)
{
+ MotionEvent *motion;
+
/* non-motion events are directly passed to event handler functions */
if (event->type != EVENT_MOTIONNOTIFY)
return 1;
- /* when playing, display a different mouse pointer inside the playfield */
- if (game_status == PLAYING)
- {
- static boolean inside_field = FALSE;
- MotionEvent *motion = (MotionEvent *)event;
+ motion = (MotionEvent *)event;
+ cursor_inside_playfield = (motion->x >= SX && motion->x < SX + SXSIZE &&
+ motion->y >= SY && motion->y < SY + SYSIZE);
- if ((motion->x >= SX && motion->x < SX + SXSIZE &&
- motion->y >= SY && motion->y < SY + SYSIZE) != inside_field)
- {
- inside_field = !inside_field;
-
- SetMouseCursor(inside_field ? CURSOR_PLAYFIELD : CURSOR_DEFAULT);
- }
+ if (game_status == PLAYING && playfield_cursor_set)
+ {
+ SetMouseCursor(CURSOR_DEFAULT);
+ playfield_cursor_set = FALSE;
+ DelayReached(&playfield_cursor_delay, 0);
}
/* skip mouse motion events without pressed button outside level editor */
}
}
else
+ {
+ /* when playing, display a special mouse pointer inside the playfield */
+ if (game_status == PLAYING)
+ {
+ if (!playfield_cursor_set && cursor_inside_playfield &&
+ DelayReached(&playfield_cursor_delay, 1000))
+ {
+ SetMouseCursor(CURSOR_PLAYFIELD);
+ playfield_cursor_set = TRUE;
+ }
+ }
+ else if (playfield_cursor_set)
+ {
+ SetMouseCursor(CURSOR_DEFAULT);
+ playfield_cursor_set = FALSE;
+ }
+
HandleNoEvent();
+ }
/* don't use all CPU time when idle; the main loop while playing
has its own synchronization and is CPU friendly, too */
printf(" MovPos[%d][%d] == %d\n", x,y, MovPos[x][y]);
printf(" MovDir[%d][%d] == %d\n", x,y, MovDir[x][y]);
printf(" MovDelay[%d][%d] == %d\n", x,y, MovDelay[x][y]);
+ printf(" GfxElement[%d][%d] == %d\n", x,y, GfxElement[x][y]);
printf("\n");
}
}