From b6226508974a855f69641143fca28746e9e434fa Mon Sep 17 00:00:00 2001
From: Ozkan Sezer <[EMAIL REDACTED]>
Date: Wed, 28 Jul 2021 14:22:20 +0300
Subject: [PATCH] provide a default cursor
Fixes https://github.com/libsdl-org/sdl12-compat/issues/125
---
src/SDL12_compat.c | 13 ++++-
src/default_cursor.h | 114 +++++++++++++++++++++++++++++++++++++++++++
2 files changed, 126 insertions(+), 1 deletion(-)
create mode 100644 src/default_cursor.h
diff --git a/src/SDL12_compat.c b/src/SDL12_compat.c
index 89663af..44823f0 100644
--- a/src/SDL12_compat.c
+++ b/src/SDL12_compat.c
@@ -1710,6 +1710,10 @@ Init12VidModes(void)
return 0;
}
+/* we should have a default cursor */
+#include "default_cursor.h"
+DECLSPEC void SDLCALL SDL_FreeCursor(SDL12_Cursor *);
+
static int
Init12Video(void)
{
@@ -1897,7 +1901,7 @@ Quit12Video(void)
VideoInfoVfmt20 = NULL;
EventFilter12 = NULL;
EventQueueAvailable = EventQueueHead = EventQueueTail = NULL;
- CurrentCursor12 = NULL;
+ SDL_FreeCursor(CurrentCursor12);
VideoModes = NULL;
VideoModesCount = 0;
}
@@ -3788,6 +3792,9 @@ SDL_ListModes(const SDL12_PixelFormat *format12, Uint32 flags)
DECLSPEC void SDLCALL
SDL_FreeCursor(SDL12_Cursor *cursor12)
{
+ if (cursor12 == CurrentCursor12) {
+ CurrentCursor12 = NULL;
+ }
if (cursor12) {
if (cursor12->wm_cursor) {
SDL20_FreeCursor(cursor12->wm_cursor);
@@ -3857,6 +3864,10 @@ SDL_SetCursor(SDL12_Cursor *cursor)
DECLSPEC SDL12_Cursor * SDLCALL
SDL_GetCursor(void)
{
+ if (!CurrentCursor12) {
+ CurrentCursor12 = SDL_CreateCursor(default_cdata, default_cmask,
+ DEFAULT_CWIDTH, DEFAULT_CHEIGHT, DEFAULT_CHOTX, DEFAULT_CHOTY);
+ }
return CurrentCursor12;
}
diff --git a/src/default_cursor.h b/src/default_cursor.h
new file mode 100644
index 0000000..0a888f4
--- /dev/null
+++ b/src/default_cursor.h
@@ -0,0 +1,114 @@
+/*
+ Simple DirectMedia Layer
+ Copyright (C) 1997-2021 Sam Lantinga <slouken@libsdl.org>
+
+ 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.
+*/
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Default cursor - it happens to be the Mac cursor, but could be anything */
+
+#define DEFAULT_CWIDTH 16
+#define DEFAULT_CHEIGHT 16
+#define DEFAULT_CHOTX 0
+#define DEFAULT_CHOTY 0
+
+/* Added a real MacOS cursor, at the request of Luc-Olivier de Charrire */
+#define USE_MACOS_CURSOR
+
+#ifdef USE_MACOS_CURSOR
+
+static unsigned char default_cdata[] = {
+ 0x00, 0x00,
+ 0x40, 0x00,
+ 0x60, 0x00,
+ 0x70, 0x00,
+ 0x78, 0x00,
+ 0x7C, 0x00,
+ 0x7E, 0x00,
+ 0x7F, 0x00,
+ 0x7F, 0x80,
+ 0x7C, 0x00,
+ 0x6C, 0x00,
+ 0x46, 0x00,
+ 0x06, 0x00,
+ 0x03, 0x00,
+ 0x03, 0x00,
+ 0x00, 0x00
+};
+
+static unsigned char default_cmask[] = {
+ 0xC0, 0x00,
+ 0xE0, 0x00,
+ 0xF0, 0x00,
+ 0xF8, 0x00,
+ 0xFC, 0x00,
+ 0xFE, 0x00,
+ 0xFF, 0x00,
+ 0xFF, 0x80,
+ 0xFF, 0xC0,
+ 0xFF, 0xE0,
+ 0xFE, 0x00,
+ 0xEF, 0x00,
+ 0xCF, 0x00,
+ 0x87, 0x80,
+ 0x07, 0x80,
+ 0x03, 0x00
+};
+
+#else
+
+static unsigned char default_cdata[] = {
+ 0x00, 0x00,
+ 0x40, 0x00,
+ 0x60, 0x00,
+ 0x70, 0x00,
+ 0x78, 0x00,
+ 0x7C, 0x00,
+ 0x7E, 0x00,
+ 0x7F, 0x00,
+ 0x7F, 0x80,
+ 0x7C, 0x00,
+ 0x6C, 0x00,
+ 0x46, 0x00,
+ 0x06, 0x00,
+ 0x03, 0x00,
+ 0x03, 0x00,
+ 0x00, 0x00
+};
+
+static unsigned char default_cmask[] = {
+ 0x40, 0x00,
+ 0xE0, 0x00,
+ 0xF0, 0x00,
+ 0xF8, 0x00,
+ 0xFC, 0x00,
+ 0xFE, 0x00,
+ 0xFF, 0x00,
+ 0xFF, 0x80,
+ 0xFF, 0xC0,
+ 0xFF, 0x80,
+ 0xFE, 0x00,
+ 0xEF, 0x00,
+ 0x4F, 0x00,
+ 0x07, 0x80,
+ 0x07, 0x80,
+ 0x03, 0x00
+};
+
+#endif /* USE_MACOS_CURSOR */
+/* vi: set ts=4 sw=4 expandtab: */