X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fevents.c;h=b5be2a1610394fd4e33fa3078d2e3e5124eeff8c;hb=de8b3ae622eae10f1caf96872fb1790f7bd9644b;hp=bb28e127eae468ce34303bc5fe507ca545f38aae;hpb=c9735f4510c07f163fc103d61ba4e0d2010c2032;p=rocksndiamonds.git diff --git a/src/events.c b/src/events.c index bb28e127..b5be2a16 100644 --- a/src/events.c +++ b/src/events.c @@ -30,15 +30,31 @@ /* 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 @@ -546,14 +562,14 @@ void HandleKey(Key key, int key_status) TapeTogglePause(TAPE_TOGGLE_MANUAL); } - +#if 0 #ifndef DEBUG if (game_status == PLAYING && (tape.playing || tape.pausing)) return; #endif - +#endif HandleGadgetsKeyInput(key);