From 72acec07a4d5f1a2c3e1815856065c5fd7338309 Mon Sep 17 00:00:00 2001
From: Sam Lantinga <[EMAIL REDACTED]>
Date: Tue, 25 Mar 2025 10:47:12 -0700
Subject: [PATCH] Match SDL2 return values for SDL_GetShapedWindowMode()
Fixes https://github.com/libsdl-org/sdl2-compat/issues/416
---
src/sdl2_compat.c | 18 +++++++++++++++---
1 file changed, 15 insertions(+), 3 deletions(-)
diff --git a/src/sdl2_compat.c b/src/sdl2_compat.c
index f50a4d6..b2d3c20 100644
--- a/src/sdl2_compat.c
+++ b/src/sdl2_compat.c
@@ -5509,13 +5509,25 @@ SDL_SetWindowShape(SDL_Window *window, SDL2_Surface *shape, SDL_WindowShapeMode
SDL_DECLSPEC int SDLCALL
SDL_GetShapedWindowMode(SDL_Window *window, SDL_WindowShapeMode *shape_mode)
{
- SDL_WindowShapeMode *property = (SDL_WindowShapeMode *)SDL3_GetPointerProperty(SDL3_GetWindowProperties(window), PROP_WINDOW_SHAPE_MODE_POINTER, NULL);
- if (!property) {
+ SDL_WindowShapeMode *property;
+
+ if (!SDL_IsShapedWindow(window)) {
return SDL_NONSHAPEABLE_WINDOW;
}
+ property = (SDL_WindowShapeMode *)SDL3_GetPointerProperty(SDL3_GetWindowProperties(window), PROP_WINDOW_SHAPE_MODE_POINTER, NULL);
+ if (!shape_mode && !property) {
+ return SDL_WINDOW_LACKS_SHAPE;
+ }
if (shape_mode) {
- SDL3_copyp(shape_mode, property);
+ if (property) {
+ SDL3_copyp(shape_mode, property);
+ } else {
+ /* Default parameters */
+ SDL_zerop(shape_mode);
+ shape_mode->mode = ShapeModeDefault;
+ shape_mode->parameters.binarizationCutoff = 1;
+ }
}
return 0;
}