Fixed crash if GetRectDisplayIndex() is called before SDL_VideoInit()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
diff --git a/src/video/SDL_video.c b/src/video/SDL_video.c
index 658058f..089b3e6 100644
--- a/src/video/SDL_video.c
+++ b/src/video/SDL_video.c
@@ -1122,25 +1122,27 @@ static int 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(¢er, 1, &display_rect, NULL)) {
- return i;
- }
+ /* Check if the window is fully enclosed */
+ if (SDL_EnclosePoints(¢er, 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;
+ }
}
}