X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Fevents.c;h=f6442956645825d6ac8e1e1cdcd970e01fe64397;hp=17f528e9415aadc78f26f411a7d550e5292c2553;hb=20e9d89a234989e55d9d232b6e5ba5a81342ced6;hpb=97aa8b2f63cbd4c210d20264f57bae3e342b14d4 diff --git a/src/events.c b/src/events.c index 17f528e9..f6442956 100644 --- a/src/events.c +++ b/src/events.c @@ -47,6 +47,24 @@ static void HandleNoEvent(void); static void HandleEventActions(void); +// event filter to set mouse x/y position (for pointer class global animations) +// (this is especially required to ensure smooth global animation mouse pointer +// movement when the screen is updated without handling events; this can happen +// when drawing door/envelope request animations, for example) + +int FilterMouseMotionEvents(void *userdata, Event *event) +{ + if (event->type == EVENT_MOTIONNOTIFY) + { + int mouse_x = ((MotionEvent *)event)->x; + int mouse_y = ((MotionEvent *)event)->y; + + UpdateRawMousePosition(mouse_x, mouse_y); + } + + return 1; +} + // 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') @@ -74,9 +92,6 @@ static int FilterEvents(const Event *event) { ((MotionEvent *)event)->x -= video.screen_xoffset; ((MotionEvent *)event)->y -= video.screen_yoffset; - - gfx.mouse_x = ((MotionEvent *)event)->x; - gfx.mouse_y = ((MotionEvent *)event)->y; } // non-motion events are directly passed to event handler functions @@ -571,6 +586,8 @@ void HandleWindowEvent(WindowEvent *event) if (game_status == GAME_MODE_SETUP) RedrawSetupScreenAfterFullscreenToggle(); + UpdateMousePosition(); + SetWindowTitle(); } } @@ -1607,6 +1624,7 @@ void HandleUserEvent(UserEvent *event) { switch (event->code) { + case USEREVENT_ANIM_DELAY_ACTION: case USEREVENT_ANIM_EVENT_ACTION: // execute action functions until matching action was found if (DoKeysymAction(event->value1) || @@ -2119,6 +2137,8 @@ void HandleKey(Key key, int key_status) if (game_status == GAME_MODE_SETUP) RedrawSetupScreenAfterFullscreenToggle(); + UpdateMousePosition(); + // set flag to ignore repeated "key pressed" events ignore_repeated_key = TRUE; @@ -2150,6 +2170,8 @@ void HandleKey(Key key, int key_status) if (game_status == GAME_MODE_SETUP) RedrawSetupScreenAfterFullscreenToggle(); + UpdateMousePosition(); + return; }