Fixed crash if GetRectDisplayIndex() is called before SDL_VideoInit()

(cherry picked from commit d87048fd5a7dff55c4cb205dd29e527c9cc51225)
This commit is contained in:
Sam Lantinga 2022-11-30 14:37:34 -08:00
parent 45c7d838d4
commit 2879f2aeba
1 changed files with 18 additions and 16 deletions

View File

@ -1157,25 +1157,27 @@ GetRectDisplayIndex(int x, int y, int w, int h)
center.x = x + w / 2;
center.y = y + h / 2;
for (i = 0; i < _this->num_displays; ++i) {
SDL_Rect display_rect;
SDL_GetDisplayBounds(i, &display_rect);
if (_this) {
for (i = 0; i < _this->num_displays; ++i) {
SDL_Rect display_rect;
SDL_GetDisplayBounds(i, &display_rect);
/* Check if the window is fully enclosed */
if (SDL_EnclosePoints(&center, 1, &display_rect, NULL)) {
return i;
}
/* Check if the window is fully enclosed */
if (SDL_EnclosePoints(&center, 1, &display_rect, NULL)) {
return i;
}
/* Snap window center to the display rect */
closest_point_on_display = center;
SDL_GetClosestPointOnRect(&display_rect, &closest_point_on_display);
/* Snap window center to the display rect */
closest_point_on_display = center;
SDL_GetClosestPointOnRect(&display_rect, &closest_point_on_display);
delta.x = center.x - closest_point_on_display.x;
delta.y = center.y - closest_point_on_display.y;
dist = (delta.x*delta.x + delta.y*delta.y);
if (dist < closest_dist) {
closest = i;
closest_dist = dist;
delta.x = center.x - closest_point_on_display.x;
delta.y = center.y - closest_point_on_display.y;
dist = (delta.x * delta.x + delta.y * delta.y);
if (dist < closest_dist) {
closest = i;
closest_dist = dist;
}
}
}