From 6eda520f64dd751ebbb8aba4b065f76a9eb1ce1f Mon Sep 17 00:00:00 2001 From: Cameron Cawley Date: Wed, 25 May 2022 21:40:28 +0100 Subject: [PATCH] riscos: Add a basic implementation of SDL_ShowCursor() --- src/video/riscos/SDL_riscosmodes.c | 5 +- src/video/riscos/SDL_riscosmouse.c | 88 ++++++++++++++++++++++++++++++ src/video/riscos/SDL_riscosmouse.h | 30 ++++++++++ src/video/riscos/SDL_riscosvideo.c | 5 ++ 4 files changed, 126 insertions(+), 2 deletions(-) create mode 100644 src/video/riscos/SDL_riscosmouse.c create mode 100644 src/video/riscos/SDL_riscosmouse.h diff --git a/src/video/riscos/SDL_riscosmodes.c b/src/video/riscos/SDL_riscosmodes.c index 0e87c140e..9500b2229 100644 --- a/src/video/riscos/SDL_riscosmodes.c +++ b/src/video/riscos/SDL_riscosmodes.c @@ -23,6 +23,7 @@ #if SDL_VIDEO_DRIVER_RISCOS #include "../SDL_sysvideo.h" +#include "../../events/SDL_mouse_c.h" #include "SDL_riscosvideo.h" #include "SDL_riscosmodes.h" @@ -304,8 +305,8 @@ RISCOS_SetDisplayMode(_THIS, SDL_VideoDisplay * display, SDL_DisplayMode * mode) _kernel_oswrch(disable_cursor[i]); } - /* Turn the mouse pointer on */ - /* _kernel_osbyte(106, 1, 0); */ + /* Update cursor visibility, since it may have been disabled by the mode change. */ + SDL_SetCursor(NULL); return 0; } diff --git a/src/video/riscos/SDL_riscosmouse.c b/src/video/riscos/SDL_riscosmouse.c new file mode 100644 index 000000000..072f8a7a1 --- /dev/null +++ b/src/video/riscos/SDL_riscosmouse.c @@ -0,0 +1,88 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ +#include "../../SDL_internal.h" + +#if SDL_VIDEO_DRIVER_RISCOS + +#include "../../events/SDL_mouse_c.h" + +#include + + +static SDL_Cursor * +RISCOS_CreateDefaultCursor() +{ + SDL_Cursor *cursor; + + cursor = SDL_calloc(1, sizeof(*cursor)); + if (cursor) { + /* NULL is used to indicate the default cursor */ + cursor->driverdata = NULL; + } else { + SDL_OutOfMemory(); + } + + return cursor; +} + +static void +RISCOS_FreeCursor(SDL_Cursor * cursor) +{ + SDL_free(cursor); +} + +static int +RISCOS_ShowCursor(SDL_Cursor * cursor) +{ + if (cursor) { + /* Turn the mouse pointer on */ + _kernel_osbyte(106, 1, 0); + } else { + /* Turn the mouse pointer off */ + _kernel_osbyte(106, 0, 0); + } + + return 0; +} + +int +RISCOS_InitMouse(_THIS) +{ + SDL_Mouse *mouse = SDL_GetMouse(); + + /* mouse->CreateCursor = RISCOS_CreateCursor; */ + /* mouse->CreateSystemCursor = RISCOS_CreateSystemCursor; */ + mouse->ShowCursor = RISCOS_ShowCursor; + mouse->FreeCursor = RISCOS_FreeCursor; + /* mouse->WarpMouse = RISCOS_WarpMouse; */ + /* mouse->WarpMouseGlobal = RISCOS_WarpMouseGlobal; */ + /* mouse->SetRelativeMouseMode = RISCOS_SetRelativeMouseMode; */ + /* mouse->CaptureMouse = RISCOS_CaptureMouse; */ + /* mouse->GetGlobalMouseState = RISCOS_GetGlobalMouseState; */ + + SDL_SetDefaultCursor(RISCOS_CreateDefaultCursor()); + + return 0; +} + +#endif /* SDL_VIDEO_DRIVER_RISCOS */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/src/video/riscos/SDL_riscosmouse.h b/src/video/riscos/SDL_riscosmouse.h new file mode 100644 index 000000000..3048d7d2c --- /dev/null +++ b/src/video/riscos/SDL_riscosmouse.h @@ -0,0 +1,30 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2022 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ +#include "../../SDL_internal.h" + +#ifndef SDL_riscosmouse_h_ +#define SDL_riscosmouse_h_ + +extern int RISCOS_InitMouse(_THIS); + +#endif /* SDL_riscosmouse_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/src/video/riscos/SDL_riscosvideo.c b/src/video/riscos/SDL_riscosvideo.c index 1d8bd3d95..ebd4952a5 100644 --- a/src/video/riscos/SDL_riscosvideo.c +++ b/src/video/riscos/SDL_riscosvideo.c @@ -31,6 +31,7 @@ #include "SDL_riscosvideo.h" #include "SDL_riscosevents_c.h" #include "SDL_riscosframebuffer_c.h" +#include "SDL_riscosmouse.h" #include "SDL_riscosmodes.h" #include "SDL_riscoswindow.h" @@ -105,6 +106,10 @@ RISCOS_VideoInit(_THIS) return -1; } + if (RISCOS_InitMouse(_this) < 0) { + return -1; + } + if (RISCOS_InitModes(_this) < 0) { return -1; }