From f6e0228a241d63761208d8e64d292745d03fd07e Mon Sep 17 00:00:00 2001 From: Holger Schemel Date: Fri, 15 Oct 2021 13:28:11 +0200 Subject: [PATCH] added showing mouse cursor for levels with mouse click custom elements --- src/events.c | 23 ++++++++++++++++++++--- src/events.h | 2 ++ src/game.c | 2 ++ 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/src/events.c b/src/events.c index 13723bfa..4a1ecbfe 100644 --- a/src/events.c +++ b/src/events.c @@ -38,6 +38,7 @@ static boolean cursor_inside_playfield = FALSE; static int cursor_mode_last = CURSOR_DEFAULT; static unsigned int special_cursor_delay = 0; static unsigned int special_cursor_delay_value = 1000; +static boolean special_cursor_enabled = FALSE; static boolean stop_processing_events = FALSE; @@ -48,6 +49,11 @@ static void HandleNoEvent(void); static void HandleEventActions(void); +void SetPlayfieldMouseCursorEnabled(boolean enabled) +{ + special_cursor_enabled = enabled; +} + // 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 @@ -340,11 +346,10 @@ static void HandleMouseCursor(void) if (gfx.cursor_mode != CURSOR_PLAYFIELD && cursor_inside_playfield && + special_cursor_enabled && DelayReached(&special_cursor_delay, special_cursor_delay_value)) { - if (level.game_engine_type != GAME_ENGINE_TYPE_MM || - tile_cursor.enabled) - SetMouseCursor(CURSOR_PLAYFIELD); + SetMouseCursor(CURSOR_PLAYFIELD); } } else if (gfx.cursor_mode != CURSOR_DEFAULT) @@ -524,6 +529,10 @@ void HandleButtonEvent(ButtonEvent *event) // for any mouse button event, disable playfield tile cursor SetTileCursorEnabled(FALSE); + // for any mouse button event, disable playfield mouse cursor + if (cursor_inside_playfield) + SetPlayfieldMouseCursorEnabled(FALSE); + #if defined(HAS_SCREEN_KEYBOARD) if (video.shifted_up) event->y += video.shifted_up_pos; @@ -2156,6 +2165,10 @@ void HandleKey(Key key, int key_status) // for MM style levels, handle in-game keyboard input in HandleJoystick() if (level.game_engine_type == GAME_ENGINE_TYPE_MM) joy |= key_action; + + // for any keyboard event, enable playfield mouse cursor + if (key_action && key_status == KEY_PRESSED) + SetPlayfieldMouseCursorEnabled(TRUE); } } else @@ -2599,6 +2612,10 @@ void HandleJoystick(void) SetTileCursorEnabled(TRUE); } + // for any joystick event, enable playfield mouse cursor + if (dx || dy || button) + SetPlayfieldMouseCursorEnabled(TRUE); + if (joytest && !button && !DelayReached(&joytest_delay, joytest_delay_value)) { // delay joystick/keyboard actions if axes/keys continually pressed diff --git a/src/events.h b/src/events.h index 30a64877..3887f3fd 100644 --- a/src/events.h +++ b/src/events.h @@ -21,6 +21,8 @@ #define USEREVENT_GADGET_PRESSED 3 +void SetPlayfieldMouseCursorEnabled(boolean); + int FilterMouseMotionEvents(void *, Event *); boolean NextValidEvent(Event *); void StopProcessingEvents(void); diff --git a/src/game.c b/src/game.c index efc81e4e..550c76e5 100644 --- a/src/game.c +++ b/src/game.c @@ -4479,6 +4479,8 @@ void InitGame(void) if (setup.sound_music) PlayLevelMusic(); } + + SetPlayfieldMouseCursorEnabled(!game.use_mouse_actions); } void UpdateEngineValues(int actual_scroll_x, int actual_scroll_y, -- 2.34.1