mirror of
https://github.com/libsdl-org/SDL.git
synced 2025-05-16 17:58:27 +00:00
Added SDL_GetRenderSafeArea()
This commit is contained in:
parent
eb09264076
commit
cf8b158ccb
7 changed files with 81 additions and 4 deletions
|
@ -2999,6 +2999,53 @@ static void GetRenderViewportSize(SDL_Renderer *renderer, SDL_FRect *rect)
|
|||
}
|
||||
}
|
||||
|
||||
int SDL_GetRenderSafeArea(SDL_Renderer *renderer, SDL_Rect *rect)
|
||||
{
|
||||
if (rect) {
|
||||
SDL_zerop(rect);
|
||||
}
|
||||
|
||||
CHECK_RENDERER_MAGIC(renderer, -1);
|
||||
|
||||
if (renderer->target || !renderer->window) {
|
||||
// The entire viewport is safe for rendering
|
||||
return SDL_GetRenderViewport(renderer, rect);
|
||||
}
|
||||
|
||||
if (rect) {
|
||||
// Get the window safe rect
|
||||
SDL_Rect safe;
|
||||
if (SDL_GetWindowSafeArea(renderer->window, &safe) < 0) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
// Convert the coordinates into the render space
|
||||
float minx = (float)safe.x;
|
||||
float miny = (float)safe.y;
|
||||
float maxx = (float)safe.x + safe.w;
|
||||
float maxy = (float)safe.y + safe.h;
|
||||
if (SDL_RenderCoordinatesFromWindow(renderer, minx, miny, &minx, &miny) < 0 ||
|
||||
SDL_RenderCoordinatesFromWindow(renderer, maxx, maxy, &maxx, &maxy) < 0) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
rect->x = (int)SDL_ceilf(minx);
|
||||
rect->y = (int)SDL_ceilf(miny);
|
||||
rect->w = (int)SDL_ceilf(maxx - minx);
|
||||
rect->h = (int)SDL_ceilf(maxy - miny);
|
||||
|
||||
// Clip with the viewport
|
||||
SDL_Rect viewport;
|
||||
if (SDL_GetRenderViewport(renderer, &viewport) < 0) {
|
||||
return -1;
|
||||
}
|
||||
if (!SDL_GetRectIntersection(rect, &viewport, rect)) {
|
||||
return SDL_SetError("No safe area within viewport");
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int SDL_SetRenderClipRect(SDL_Renderer *renderer, const SDL_Rect *rect)
|
||||
{
|
||||
CHECK_RENDERER_MAGIC(renderer, -1)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue