From 5be965131c1b6f513ea3eaf7624973c2c8f88f29 Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Fri, 12 Jul 2024 17:56:34 +1000 Subject: [PATCH] Dreamcast: Wheel support for mice --- src/Game.c | 8 +++++++- src/Game.h | 2 ++ src/VirtualCursor.h | 2 +- src/VirtualKeyboard.h | 8 ++++++-- src/Window.h | 2 -- src/Window_3DS.c | 1 - src/Window_Android.c | 2 -- src/Window_BeOS.cpp | 1 - src/Window_Dreamcast.c | 9 ++++----- src/Window_GCWii.c | 4 ---- src/Window_MacClassic.c | 1 - src/Window_N64.c | 1 - src/Window_NDS.c | 2 -- src/Window_PS1.c | 1 - src/Window_PS2.c | 10 ++++------ src/Window_PS3.c | 4 ---- src/Window_PSP.c | 4 ---- src/Window_PSVita.c | 1 - src/Window_SDL2.c | 1 - src/Window_SDL3.c | 1 - src/Window_Saturn.c | 1 - src/Window_Switch.c | 1 - src/Window_Terminal.c | 1 - src/Window_Web.c | 2 -- src/Window_WiiU.cpp | 1 - src/Window_Win.c | 1 - src/Window_X11.c | 2 -- src/Window_Xbox.c | 4 ---- src/Window_Xbox360.c | 4 ---- src/Window_cocoa.m | 1 - src/interop_ios.m | 2 -- 31 files changed, 24 insertions(+), 61 deletions(-) diff --git a/src/Game.c b/src/Game.c index 7d36af7a3..37ae59c0f 100644 --- a/src/Game.c +++ b/src/Game.c @@ -64,6 +64,7 @@ cc_bool Game_Anaglyph3D; cc_bool Game_ViewBobbing, Game_HideGui; cc_bool Game_BreakableLiquids, Game_ScreenshotRequested; struct GameVersion Game_Version; +Game_Draw2DHook Game_Draw2DHooks[4]; static char usernameBuffer[STRING_SIZE]; static char mppassBuffer[STRING_SIZE]; @@ -657,6 +658,7 @@ static void LimitFPS(void) { #endif static CC_INLINE void Game_DrawFrame(float delta, float t) { + int i; UpdateViewMatrix(); if (!Gui_GetBlocksWorld()) { @@ -675,7 +677,11 @@ static CC_INLINE void Game_DrawFrame(float delta, float t) { Gfx_Begin2D(Game.Width, Game.Height); Gui_RenderGui(delta); - OnscreenKeyboard_Draw3D(); + for (i = 0; i < Array_Elems(Game_Draw2DHooks); i++) + { + if (Game_Draw2DHooks[i]) Game_Draw2DHooks[i](); + } + /* TODO find a better solution than this */ #ifdef CC_BUILD_3DS if (Game_Anaglyph3D) { diff --git a/src/Game.h b/src/Game.h index d34d61540..170e07ecb 100644 --- a/src/Game.h +++ b/src/Game.h @@ -21,6 +21,8 @@ extern cc_bool Game_UseCPEBlocks; extern cc_string Game_Username; extern cc_string Game_Mppass; +typedef void (*Game_Draw2DHook)(void); +extern Game_Draw2DHook Game_Draw2DHooks[4]; #ifdef CC_BUILD_SPLITSCREEN extern int Game_NumLocalPlayers; diff --git a/src/VirtualCursor.h b/src/VirtualCursor.h index 261e698ce..a30d3b9cd 100644 --- a/src/VirtualCursor.h +++ b/src/VirtualCursor.h @@ -21,7 +21,7 @@ static void VirtualCursor_Display2D(struct Context2D* ctx) { x - CURSOR_SIZE, y - CURSOR_EXTENT, CURSOR_SIZE * 3, CURSOR_EXTENT * 2); } -static void VirtualCursor_SetPosition(int x, int y) { +static void VirtualCursor_SetPositionm(int x, int y) { x = max(0, min(x, Window_Main.Width - 1)); y = max(0, min(y, Window_Main.Height - 1)); vc_hooked = true; diff --git a/src/VirtualKeyboard.h b/src/VirtualKeyboard.h index 03a7e279f..125ee6892 100644 --- a/src/VirtualKeyboard.h +++ b/src/VirtualKeyboard.h @@ -9,6 +9,7 @@ #include "LBackend.h" #include "Window.h" #include "Graphics.h" +#include "Game.h" static cc_bool kb_inited, kb_shift, kb_needsHook; static struct FontDesc kb_font; @@ -305,7 +306,7 @@ static void VirtualKeyboard_Display2D(struct Context2D* real_ctx) { } static void VirtualKeyboard_Close2D(void) { - LBackend_Hooks[0] = NULL; + LBackend_Hooks[0] = NULL; LBackend_Redraw(); } @@ -321,7 +322,9 @@ static void VirtualKeyboard_MarkDirty3D(void) { static void VirtualKeyboard_Close3D(void) { Gfx_DeleteTexture(&kb_texture.ID); + Game_Draw2DHooks[0] = NULL; } + static void VirtualKeyboard_MakeTexture(void) { struct Context2D ctx; int width = VirtualKeyboard_Width(); @@ -399,7 +402,8 @@ static void VirtualKeyboard_Open(struct OpenKeyboardArgs* args, cc_bool launcher Window_Main.SoftKeyboardFocus = true; Input.DownHook = VirtualKeyboard_ProcessDown; - LBackend_Hooks[0] = VirtualKeyboard_Display2D; + LBackend_Hooks[0] = VirtualKeyboard_Display2D; + Game_Draw2DHooks[0] = VirtualKeyboard_Display3D; } static void VirtualKeyboard_SetText(const cc_string* text) { diff --git a/src/Window.h b/src/Window.h index 525992269..f1dbf098a 100644 --- a/src/Window.h +++ b/src/Window.h @@ -215,8 +215,6 @@ void OnscreenKeyboard_Open(struct OpenKeyboardArgs* args); /* As such, this is necessary to ensure the HTML input is consistent with */ /* whatever text input widget is actually being displayed on screen. */ void OnscreenKeyboard_SetText(const cc_string* text); -void OnscreenKeyboard_Draw2D(Rect2D* r, struct Bitmap* bmp); -void OnscreenKeyboard_Draw3D(void); /* Hides/Removes the previously displayed on-screen keyboard. */ void OnscreenKeyboard_Close(void); /* Locks/Unlocks the landscape orientation. */ diff --git a/src/Window_3DS.c b/src/Window_3DS.c index 47c252a04..b049acb52 100644 --- a/src/Window_3DS.c +++ b/src/Window_3DS.c @@ -279,7 +279,6 @@ void OnscreenKeyboard_Open(struct OpenKeyboardArgs* args) { OnscreenTextChanged(output); } void OnscreenKeyboard_SetText(const cc_string* text) { } -void OnscreenKeyboard_Draw3D(void) { } void OnscreenKeyboard_Close(void) { DisplayInfo.ShowingSoftKeyboard = false; diff --git a/src/Window_Android.c b/src/Window_Android.c index 9ea46bfe9..03cd60fd2 100644 --- a/src/Window_Android.c +++ b/src/Window_Android.c @@ -547,8 +547,6 @@ void OnscreenKeyboard_SetText(const cc_string* text) { (*env)->DeleteLocalRef(env, args[0].l); } -void OnscreenKeyboard_Draw3D(void) { } - void OnscreenKeyboard_Close(void) { JNIEnv* env; JavaGetCurrentEnv(env); diff --git a/src/Window_BeOS.cpp b/src/Window_BeOS.cpp index 0f3cab12b..4faaa4dce 100644 --- a/src/Window_BeOS.cpp +++ b/src/Window_BeOS.cpp @@ -681,7 +681,6 @@ void Window_FreeFramebuffer(struct Bitmap* bmp) { void OnscreenKeyboard_Open(struct OpenKeyboardArgs* args) { } void OnscreenKeyboard_SetText(const cc_string* text) { } -void OnscreenKeyboard_Draw3D(void) { } void OnscreenKeyboard_Close(void) { } void Window_EnableRawMouse(void) { diff --git a/src/Window_Dreamcast.c b/src/Window_Dreamcast.c index 95cd373f6..7acc25122 100644 --- a/src/Window_Dreamcast.c +++ b/src/Window_Dreamcast.c @@ -202,6 +202,7 @@ static void ProcessMouseInput(float delta) { Input_SetNonRepeatable(CCMOUSE_L, mods & MOUSE_LEFTBUTTON); Input_SetNonRepeatable(CCMOUSE_R, mods & MOUSE_RIGHTBUTTON); Input_SetNonRepeatable(CCMOUSE_M, mods & MOUSE_SIDEBUTTON); + Mouse_ScrollVWheel(-state->dz * 0.5f); if (!vc_hooked) { Pointer_SetPosition(0, Window_Main.Width / 2, Window_Main.Height / 2); @@ -219,7 +220,9 @@ void Window_ProcessEvents(float delta) { ProcessMouseInput(delta); } -void Cursor_SetPosition(int x, int y) { } /* TODO: Dreamcast mouse support */ +void Cursor_SetPosition(int x, int y) { + if (vc_hooked) VirtualCursor_SetPosition(x, y); +} void Window_EnableRawMouse(void) { Input.RawMode = true; } void Window_DisableRawMouse(void) { Input.RawMode = false; } @@ -347,10 +350,6 @@ void OnscreenKeyboard_SetText(const cc_string* text) { VirtualKeyboard_SetText(text); } -void OnscreenKeyboard_Draw3D(void) { - VirtualKeyboard_Display3D(); -} - void OnscreenKeyboard_Close(void) { VirtualKeyboard_Close(); } diff --git a/src/Window_GCWii.c b/src/Window_GCWii.c index 62f7e24f8..388230ddd 100644 --- a/src/Window_GCWii.c +++ b/src/Window_GCWii.c @@ -526,10 +526,6 @@ void OnscreenKeyboard_SetText(const cc_string* text) { VirtualKeyboard_SetText(text); } -void OnscreenKeyboard_Draw3D(void) { - VirtualKeyboard_Display3D(); -} - void OnscreenKeyboard_Close(void) { VirtualKeyboard_Close(); } diff --git a/src/Window_MacClassic.c b/src/Window_MacClassic.c index 9aabbde00..0c08e0351 100644 --- a/src/Window_MacClassic.c +++ b/src/Window_MacClassic.c @@ -518,7 +518,6 @@ void Window_FreeFramebuffer(struct Bitmap* bmp) { void OnscreenKeyboard_Open(struct OpenKeyboardArgs* args) { } void OnscreenKeyboard_SetText(const cc_string* text) { } -void OnscreenKeyboard_Draw3D(void) { } void OnscreenKeyboard_Close(void) { } void Window_EnableRawMouse(void) { diff --git a/src/Window_N64.c b/src/Window_N64.c index 352aee9a6..a2ec5d368 100644 --- a/src/Window_N64.c +++ b/src/Window_N64.c @@ -184,7 +184,6 @@ void Window_FreeFramebuffer(struct Bitmap* bmp) { *#########################################################################################################################*/ void OnscreenKeyboard_Open(struct OpenKeyboardArgs* args) { /* TODO implement */ } void OnscreenKeyboard_SetText(const cc_string* text) { } -void OnscreenKeyboard_Draw3D(void) { } void OnscreenKeyboard_Close(void) { /* TODO implement */ } diff --git a/src/Window_NDS.c b/src/Window_NDS.c index 6592ce516..c81597768 100644 --- a/src/Window_NDS.c +++ b/src/Window_NDS.c @@ -323,8 +323,6 @@ void OnscreenKeyboard_Open(struct OpenKeyboardArgs* args) { void OnscreenKeyboard_SetText(const cc_string* text) { } -void OnscreenKeyboard_Draw3D(void) { } - void OnscreenKeyboard_Close(void) { keyboardHide(); if (!DisplayInfo.ShowingSoftKeyboard) return; diff --git a/src/Window_PS1.c b/src/Window_PS1.c index 8534904a1..5a65d24b9 100644 --- a/src/Window_PS1.c +++ b/src/Window_PS1.c @@ -193,7 +193,6 @@ void Window_FreeFramebuffer(struct Bitmap* bmp) { *#########################################################################################################################*/ void OnscreenKeyboard_Open(struct OpenKeyboardArgs* args) { /* TODO implement */ } void OnscreenKeyboard_SetText(const cc_string* text) { } -void OnscreenKeyboard_Draw3D(void) { } void OnscreenKeyboard_Close(void) { /* TODO implement */ } diff --git a/src/Window_PS2.c b/src/Window_PS2.c index b0f388521..5a42bb278 100644 --- a/src/Window_PS2.c +++ b/src/Window_PS2.c @@ -150,7 +150,7 @@ static void ProcessMouseInput(float delta) { Input_SetNonRepeatable(CCMOUSE_L, mData.buttons & PS2MOUSE_BTN1); Input_SetNonRepeatable(CCMOUSE_R, mData.buttons & PS2MOUSE_BTN2); Input_SetNonRepeatable(CCMOUSE_M, mData.buttons & PS2MOUSE_BTN3); - Mouse_ScrollVWheel(mData.wheel); + Mouse_ScrollVWheel(mData.wheel * 0.5f); if (!vc_hooked) { Pointer_SetPosition(0, Window_Main.Width / 2, Window_Main.Height / 2); @@ -177,7 +177,9 @@ void Window_ProcessEvents(float delta) { ProcessKeyboardInput(); } -void Cursor_SetPosition(int x, int y) { } // Makes no sense for PS Vita +void Cursor_SetPosition(int x, int y) { + if (vc_hooked) VirtualCursor_SetPosition(x, y); +} void Window_EnableRawMouse(void) { Input.RawMode = true; } void Window_UpdateRawMouse(void) { } @@ -321,10 +323,6 @@ void OnscreenKeyboard_SetText(const cc_string* text) { VirtualKeyboard_SetText(text); } -void OnscreenKeyboard_Draw3D(void) { - VirtualKeyboard_Display3D(); -} - void OnscreenKeyboard_Close(void) { VirtualKeyboard_Close(); } diff --git a/src/Window_PS3.c b/src/Window_PS3.c index 51f6c28cb..1fa2e3df3 100644 --- a/src/Window_PS3.c +++ b/src/Window_PS3.c @@ -378,10 +378,6 @@ void OnscreenKeyboard_SetText(const cc_string* text) { VirtualKeyboard_SetText(text); } -void OnscreenKeyboard_Draw3D(void) { - VirtualKeyboard_Display3D(); -} - void OnscreenKeyboard_Close(void) { VirtualKeyboard_Close(); } diff --git a/src/Window_PSP.c b/src/Window_PSP.c index a2091bd0a..9364448ea 100644 --- a/src/Window_PSP.c +++ b/src/Window_PSP.c @@ -179,10 +179,6 @@ void OnscreenKeyboard_SetText(const cc_string* text) { VirtualKeyboard_SetText(text); } -void OnscreenKeyboard_Draw3D(void) { - VirtualKeyboard_Display3D(); -} - void OnscreenKeyboard_Close(void) { VirtualKeyboard_Close(); } diff --git a/src/Window_PSVita.c b/src/Window_PSVita.c index c7d6f04b2..a206d2677 100644 --- a/src/Window_PSVita.c +++ b/src/Window_PSVita.c @@ -351,7 +351,6 @@ void OnscreenKeyboard_Open(struct OpenKeyboardArgs* args) { /* TODO implement */ } void OnscreenKeyboard_SetText(const cc_string* text) { } -void OnscreenKeyboard_Draw3D(void) { } void OnscreenKeyboard_Close(void) { /* TODO implement */ } diff --git a/src/Window_SDL2.c b/src/Window_SDL2.c index 7f11de2dd..dc2053d53 100644 --- a/src/Window_SDL2.c +++ b/src/Window_SDL2.c @@ -445,7 +445,6 @@ void Window_FreeFramebuffer(struct Bitmap* bmp) { void OnscreenKeyboard_Open(struct OpenKeyboardArgs* args) { SDL_StartTextInput(); } void OnscreenKeyboard_SetText(const cc_string* text) { } -void OnscreenKeyboard_Draw3D(void) { } void OnscreenKeyboard_Close(void) { SDL_StopTextInput(); } void Window_EnableRawMouse(void) { diff --git a/src/Window_SDL3.c b/src/Window_SDL3.c index e4d715498..e4207063a 100644 --- a/src/Window_SDL3.c +++ b/src/Window_SDL3.c @@ -477,7 +477,6 @@ void Window_FreeFramebuffer(struct Bitmap* bmp) { void OnscreenKeyboard_Open(struct OpenKeyboardArgs* args) { SDL_StartTextInput(win_handle); } void OnscreenKeyboard_SetText(const cc_string* text) { } -void OnscreenKeyboard_Draw3D(void) { } void OnscreenKeyboard_Close(void) { SDL_StopTextInput(win_handle); } void Window_EnableRawMouse(void) { diff --git a/src/Window_Saturn.c b/src/Window_Saturn.c index f10bb3738..0246ef83e 100644 --- a/src/Window_Saturn.c +++ b/src/Window_Saturn.c @@ -233,7 +233,6 @@ void Window_FreeFramebuffer(struct Bitmap* bmp) { *#########################################################################################################################*/ void OnscreenKeyboard_Open(struct OpenKeyboardArgs* args) { /* TODO implement */ } void OnscreenKeyboard_SetText(const cc_string* text) { } -void OnscreenKeyboard_Draw3D(void) { } void OnscreenKeyboard_Close(void) { /* TODO implement */ } diff --git a/src/Window_Switch.c b/src/Window_Switch.c index 960606f96..805e9b5c2 100644 --- a/src/Window_Switch.c +++ b/src/Window_Switch.c @@ -291,7 +291,6 @@ void OnscreenKeyboard_Open(struct OpenKeyboardArgs* args) { swkbdClose(&kbd); } void OnscreenKeyboard_SetText(const cc_string* text) { } -void OnscreenKeyboard_Draw3D(void) { } void OnscreenKeyboard_Close(void) { /* TODO implement */ } diff --git a/src/Window_Terminal.c b/src/Window_Terminal.c index fa955cdce..159b9a2fc 100644 --- a/src/Window_Terminal.c +++ b/src/Window_Terminal.c @@ -540,7 +540,6 @@ void Window_FreeFramebuffer(struct Bitmap* bmp) { void OnscreenKeyboard_Open(struct OpenKeyboardArgs* args) { } void OnscreenKeyboard_SetText(const cc_string* text) { } -void OnscreenKeyboard_Draw3D(void) { } void OnscreenKeyboard_Close(void) { } void Window_EnableRawMouse(void) { diff --git a/src/Window_Web.c b/src/Window_Web.c index ddbb96d17..4a974e62e 100644 --- a/src/Window_Web.c +++ b/src/Window_Web.c @@ -724,8 +724,6 @@ void OnscreenKeyboard_SetText(const cc_string* text) { interop_SetKeyboardText(str); } -void OnscreenKeyboard_Draw3D(void) { } - void OnscreenKeyboard_Close(void) { keyboardOpen = false; if (!Input_TouchMode) return; diff --git a/src/Window_WiiU.cpp b/src/Window_WiiU.cpp index 3ea1bf9f6..5defedf78 100644 --- a/src/Window_WiiU.cpp +++ b/src/Window_WiiU.cpp @@ -602,7 +602,6 @@ static void OnscreenKeyboard_DrawDRC(void) { void OnscreenKeyboard_SetText(const cc_string* text) { } -void OnscreenKeyboard_Draw3D(void) { } void OnscreenKeyboard_Close(void) { if (!keyboardOpen) return; diff --git a/src/Window_Win.c b/src/Window_Win.c index b4414e085..475096761 100644 --- a/src/Window_Win.c +++ b/src/Window_Win.c @@ -754,7 +754,6 @@ static void InitRawMouse(void) { void OnscreenKeyboard_Open(struct OpenKeyboardArgs* args) { } void OnscreenKeyboard_SetText(const cc_string* text) { } -void OnscreenKeyboard_Draw3D(void) { } void OnscreenKeyboard_Close(void) { } void Window_EnableRawMouse(void) { diff --git a/src/Window_X11.c b/src/Window_X11.c index 04b3704df..49d868554 100644 --- a/src/Window_X11.c +++ b/src/Window_X11.c @@ -1198,8 +1198,6 @@ void Window_FreeFramebuffer(struct Bitmap* bmp) { void OnscreenKeyboard_Open(struct OpenKeyboardArgs* args) { } void OnscreenKeyboard_SetText(const cc_string* text) { } -void OnscreenKeyboard_Draw2D(Rect2D* r, struct Bitmap* bmp) { } -void OnscreenKeyboard_Draw3D(void) { } void OnscreenKeyboard_Close(void) { } static cc_bool rawMouseInited, rawMouseSupported; diff --git a/src/Window_Xbox.c b/src/Window_Xbox.c index 0e23db23f..3b128c18f 100644 --- a/src/Window_Xbox.c +++ b/src/Window_Xbox.c @@ -231,10 +231,6 @@ void OnscreenKeyboard_SetText(const cc_string* text) { VirtualKeyboard_SetText(text); } -void OnscreenKeyboard_Draw3D(void) { - VirtualKeyboard_Display3D(); -} - void OnscreenKeyboard_Close(void) { VirtualKeyboard_Close(); } diff --git a/src/Window_Xbox360.c b/src/Window_Xbox360.c index c7a137ef9..432d24d18 100644 --- a/src/Window_Xbox360.c +++ b/src/Window_Xbox360.c @@ -193,10 +193,6 @@ void OnscreenKeyboard_SetText(const cc_string* text) { VirtualKeyboard_SetText(text); } -void OnscreenKeyboard_Draw3D(void) { - VirtualKeyboard_Display3D(); -} - void OnscreenKeyboard_Close(void) { VirtualKeyboard_Close(); } diff --git a/src/Window_cocoa.m b/src/Window_cocoa.m index 9d14a0ac3..34a8b2083 100644 --- a/src/Window_cocoa.m +++ b/src/Window_cocoa.m @@ -761,7 +761,6 @@ void Window_FreeFramebuffer(struct Bitmap* bmp) { void OnscreenKeyboard_Open(struct OpenKeyboardArgs* args) { } void OnscreenKeyboard_SetText(const cc_string* text) { } -void OnscreenKeyboard_Draw3D(void) { } void OnscreenKeyboard_Close(void) { } diff --git a/src/interop_ios.m b/src/interop_ios.m index a327f7311..93934bff2 100644 --- a/src/interop_ios.m +++ b/src/interop_ios.m @@ -539,8 +539,6 @@ void OnscreenKeyboard_SetText(const cc_string* text) { text_input.text = str; } -void OnscreenKeyboard_Draw3D(void) { } - void OnscreenKeyboard_Close(void) { DisplayInfo.ShowingSoftKeyboard = false; [text_input resignFirstResponder];