Added properties to various SDL objects

The following objects now have properties that can be user modified:
* SDL_AudioStream
* SDL_Gamepad
* SDL_Joystick
* SDL_RWops
* SDL_Renderer
* SDL_Sensor
* SDL_Surface
* SDL_Texture
* SDL_Window
This commit is contained in:
Sam Lantinga 2023-10-11 16:59:51 -07:00
parent 973c8b3273
commit 4368f70ff9
32 changed files with 434 additions and 292 deletions

View file

@ -929,7 +929,7 @@ SDL_Renderer *SDL_CreateRenderer(SDL_Window *window, const char *name, Uint32 fl
renderer->hidden = SDL_FALSE;
}
SDL_SetWindowData(window, SDL_WINDOWRENDERDATA, renderer);
SDL_SetProperty(SDL_GetWindowProperties(window), SDL_WINDOWRENDERDATA, renderer, NULL, NULL);
SDL_SetRenderViewport(renderer, NULL);
@ -994,7 +994,7 @@ SDL_Renderer *SDL_CreateSoftwareRenderer(SDL_Surface *surface)
SDL_Renderer *SDL_GetRenderer(SDL_Window *window)
{
return (SDL_Renderer *)SDL_GetWindowData(window, SDL_WINDOWRENDERDATA);
return (SDL_Renderer *)SDL_GetProperty(SDL_GetWindowProperties(window), SDL_WINDOWRENDERDATA);
}
SDL_Window *SDL_GetRenderWindow(SDL_Renderer *renderer)
@ -1007,10 +1007,20 @@ int SDL_GetRendererInfo(SDL_Renderer *renderer, SDL_RendererInfo *info)
{
CHECK_RENDERER_MAGIC(renderer, -1);
*info = renderer->info;
SDL_copyp(info, &renderer->info);
return 0;
}
SDL_PropertiesID SDL_GetRendererProperties(SDL_Renderer *renderer)
{
CHECK_RENDERER_MAGIC(renderer, 0);
if (renderer->props == 0) {
renderer->props = SDL_CreateProperties();
}
return renderer->props;
}
int SDL_GetRenderOutputSize(SDL_Renderer *renderer, int *w, int *h)
{
CHECK_RENDERER_MAGIC(renderer, -1);
@ -1365,6 +1375,16 @@ SDL_Texture *SDL_CreateTextureFromSurface(SDL_Renderer *renderer, SDL_Surface *s
return texture;
}
SDL_PropertiesID SDL_GetTextureProperties(SDL_Texture *texture)
{
CHECK_TEXTURE_MAGIC(texture, 0);
if (texture->props == 0) {
texture->props = SDL_CreateProperties();
}
return texture->props;
}
int SDL_QueryTexture(SDL_Texture *texture, Uint32 *format, int *access, int *w, int *h)
{
CHECK_TEXTURE_MAGIC(texture, -1);
@ -1497,21 +1517,6 @@ int SDL_GetTextureScaleMode(SDL_Texture *texture, SDL_ScaleMode *scaleMode)
return 0;
}
int SDL_SetTextureUserData(SDL_Texture *texture, void *userdata)
{
CHECK_TEXTURE_MAGIC(texture, -1);
texture->userdata = userdata;
return 0;
}
void *SDL_GetTextureUserData(SDL_Texture *texture)
{
CHECK_TEXTURE_MAGIC(texture, NULL);
return texture->userdata;
}
#if SDL_HAVE_YUV
static int SDL_UpdateTextureYUV(SDL_Texture *texture, const SDL_Rect *rect,
const void *pixels, int pitch)
@ -4021,6 +4026,8 @@ static int SDL_DestroyTextureInternal(SDL_Texture *texture, SDL_bool is_destroyi
CHECK_TEXTURE_MAGIC(texture, -1);
SDL_DestroyProperties(texture->props);
renderer = texture->renderer;
if (is_destroying) {
/* Renderer get destroyed, avoid to queue more commands */
@ -4103,6 +4110,8 @@ void SDL_DestroyRenderer(SDL_Renderer *renderer)
{
CHECK_RENDERER_MAGIC(renderer,);
SDL_DestroyProperties(renderer->props);
SDL_DelEventWatch(SDL_RendererEventWatch, renderer);
SDL_DiscardAllCommands(renderer);
@ -4118,7 +4127,7 @@ void SDL_DestroyRenderer(SDL_Renderer *renderer)
SDL_free(renderer->vertex_data);
if (renderer->window) {
SDL_SetWindowData(renderer->window, SDL_WINDOWRENDERDATA, NULL);
SDL_ClearProperty(SDL_GetWindowProperties(renderer->window), SDL_WINDOWRENDERDATA);
}
/* It's no longer magical... */