Bläddra i källkod

surface: SDL_RotateSurface should update SDL_PROP_SURFACE_ROTATION_FLOAT.

Fixes #14616.
Ryan C. Gordon 1 vecka sedan
förälder
incheckning
5813d0ec0a
2 ändrade filer med 16 tillägg och 0 borttagningar
  1. 8 0
      include/SDL3/SDL_surface.h
  2. 8 0
      src/video/SDL_surface.c

+ 8 - 0
include/SDL3/SDL_surface.h

@@ -1027,6 +1027,14 @@ extern SDL_DECLSPEC bool SDLCALL SDL_FlipSurface(SDL_Surface *surface, SDL_FlipM
  * larger than the original, with the background filled in with the colorkey,
  * if available, or RGBA 255/255/255/0 if not.
  *
+ * If `surface` has the SDL_PROP_SURFACE_ROTATION_FLOAT property set on it,
+ * the new copy will have the adjusted value set: if the rotation property is
+ * 90 and `angle` was 30, the new surface will have a property value of 60
+ * (that is: to be upright vs gravity, this surface needs to rotate 60 more
+ * degrees). However, note that further rotations on the new surface in this
+ * example will produce unexpected results, since the image will have resized
+ * and padded to accommodate the not-90 degree angle.
+ *
  * \param surface the surface to rotate.
  * \param angle the rotation angle, in degrees.
  * \returns a rotated copy of the surface or NULL on failure; call

+ 8 - 0
src/video/SDL_surface.c

@@ -2198,6 +2198,14 @@ SDL_Surface *SDL_RotateSurface(SDL_Surface *surface, float angle)
             SDL_DestroySurface(convert);
         }
     }
+
+    if (rotated) {
+        if (SDL_HasProperty(surface->props, SDL_PROP_SURFACE_ROTATION_FLOAT)) {
+            const float rotation = (SDL_GetNumberProperty(surface->props, SDL_PROP_SURFACE_ROTATION_FLOAT, 0) - angle);
+            SDL_SetFloatProperty(SDL_GetSurfaceProperties(rotated), SDL_PROP_SURFACE_ROTATION_FLOAT, rotation);
+        }
+    }
+
     return rotated;
 }