diff --git a/include/SDL3/SDL_surface.h b/include/SDL3/SDL_surface.h index 69f4d69ca9..afd7a82d18 100644 --- a/include/SDL3/SDL_surface.h +++ b/include/SDL3/SDL_surface.h @@ -96,9 +96,10 @@ typedef enum SDL_ScaleMode */ typedef enum SDL_FlipMode { - SDL_FLIP_NONE, /**< Do not flip */ - SDL_FLIP_HORIZONTAL, /**< flip horizontally */ - SDL_FLIP_VERTICAL /**< flip vertically */ + SDL_FLIP_NONE, /**< Do not flip */ + SDL_FLIP_HORIZONTAL, /**< flip horizontally */ + SDL_FLIP_VERTICAL, /**< flip vertically */ + SDL_FLIP_HORIZONTAL_AND_VERTICAL, /**< flip horizontally and vertically (not a diagonal flip) */ } SDL_FlipMode; #ifndef SDL_INTERNAL diff --git a/src/video/SDL_surface.c b/src/video/SDL_surface.c index a8f8353236..dc897fbab9 100644 --- a/src/video/SDL_surface.c +++ b/src/video/SDL_surface.c @@ -1874,14 +1874,23 @@ bool SDL_FlipSurface(SDL_Surface *surface, SDL_FlipMode flip) return true; } + bool result = true; switch (flip) { case SDL_FLIP_HORIZONTAL: - return SDL_FlipSurfaceHorizontal(surface); + result = SDL_FlipSurfaceHorizontal(surface); + break; case SDL_FLIP_VERTICAL: - return SDL_FlipSurfaceVertical(surface); + result = SDL_FlipSurfaceVertical(surface); + break; + case SDL_FLIP_HORIZONTAL_AND_VERTICAL: + result &= SDL_FlipSurfaceHorizontal(surface); + result &= SDL_FlipSurfaceVertical(surface); + break; default: - return SDL_InvalidParamError("flip"); + result = SDL_InvalidParamError("flip"); + break; } + return result; } SDL_Surface *SDL_ConvertSurfaceAndColorspace(SDL_Surface *surface, SDL_PixelFormat format, SDL_Palette *palette, SDL_Colorspace colorspace, SDL_PropertiesID props)