render: Fixed a FIXME for SDL_SetRenderViewport with a negative size.

This commit is contained in:
Ryan C. Gordon 2024-09-25 12:32:50 -04:00
parent 54459def69
commit 7a6a0becb8
2 changed files with 11 additions and 1 deletions

View file

@ -1400,12 +1400,20 @@ extern SDL_DECLSPEC bool SDLCALL SDL_ConvertEventToRenderCoordinates(SDL_Rendere
/** /**
* Set the drawing area for rendering on the current target. * Set the drawing area for rendering on the current target.
* *
* Drawing will clip to this area (separately from any clipping done with
* SDL_SetRenderClipRect), and the top left of the area will become
* coordinate (0, 0) for future drawing commands.
*
* The area's width and height must be >= 0.
*
* \param renderer the rendering context. * \param renderer the rendering context.
* \param rect the SDL_Rect structure representing the drawing area, or NULL * \param rect the SDL_Rect structure representing the drawing area, or NULL
* to set the viewport to the entire target. * to set the viewport to the entire target.
* \returns true on success or false on failure; call SDL_GetError() for more * \returns true on success or false on failure; call SDL_GetError() for more
* information. * information.
* *
* \threadsafety You may only call this function from the main thread.
*
* \since This function is available since SDL 3.0.0. * \since This function is available since SDL 3.0.0.
* *
* \sa SDL_GetRenderViewport * \sa SDL_GetRenderViewport

View file

@ -2932,7 +2932,9 @@ bool SDL_SetRenderViewport(SDL_Renderer *renderer, const SDL_Rect *rect)
CHECK_RENDERER_MAGIC(renderer, false); CHECK_RENDERER_MAGIC(renderer, false);
if (rect) { if (rect) {
// !!! FIXME: fail if rect->w or rect->h are negative (we use this to mean "the whole viewport"). if ((rect->w < 0) || (rect->h < 0)) {
return SDL_SetError("rect has a negative size");
}
SDL_copyp(&renderer->view->viewport, rect); SDL_copyp(&renderer->view->viewport, rect);
} else { } else {
renderer->view->viewport.x = 0; renderer->view->viewport.x = 0;