rnd-20030404-4-src
[rocksndiamonds.git] / src / events.c
index 332dcca21ea8adcc1dacc6a92a2b4fd69976a7cd..b5be2a1610394fd4e33fa3078d2e3e5124eeff8c 100644 (file)
 
 
 /* event filter especially needed for SDL event filtering due to
-   delay problems with lots of mouse motion events when mouse
-   button not pressed */
+   delay problems with lots of mouse motion events when mouse button
+   not pressed (X11 can handle this with 'PointerMotionHintMask') */
 
 int FilterMouseMotionEvents(const Event *event)
 {
+  /* non-motion events are directly passed to event handler functions */
   if (event->type != EVENT_MOTIONNOTIFY)
     return 1;
 
-  /* get mouse motion events without pressed button only in level editor */
+  /* when playing, display a different mouse pointer inside the playfield */
+  if (game_status == PLAYING)
+  {
+    static boolean inside_field = FALSE;
+    MotionEvent *motion = (MotionEvent *)event;
+
+    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);
+    }
+  }
+
+  /* skip mouse motion events without pressed button outside level editor */
   if (button_status == MB_RELEASED && game_status != LEVELED)
     return 0;
   else