Fixed loading textures when the window starts hidden.
The viewport automatically resets to the window size when you programmatically resize the window.
This commit is contained in:
parent
f1b459aaf7
commit
aaf23fe8af
7 changed files with 76 additions and 30 deletions
|
@ -100,7 +100,7 @@ SDL_RendererEventWatch(void *userdata, SDL_Event *event)
|
|||
renderer->WindowEvent(renderer, &event->window);
|
||||
}
|
||||
|
||||
if (event->window.event == SDL_WINDOWEVENT_SIZE_CHANGED) {
|
||||
if (event->window.event == SDL_WINDOWEVENT_RESIZED) {
|
||||
/* Try to keep the previous viewport centered */
|
||||
int w, h;
|
||||
SDL_Rect viewport;
|
||||
|
@ -116,10 +116,40 @@ SDL_RendererEventWatch(void *userdata, SDL_Event *event)
|
|||
viewport.h = renderer->viewport.h;
|
||||
SDL_RenderSetViewport(renderer, &viewport);
|
||||
}
|
||||
renderer->resized = SDL_TRUE;
|
||||
} else if (event->window.event == SDL_WINDOWEVENT_SIZE_CHANGED) {
|
||||
int w, h;
|
||||
SDL_Rect viewport;
|
||||
|
||||
if (!renderer->resized) {
|
||||
/* Window was programmatically resized, reset viewport */
|
||||
SDL_GetWindowSize(window, &w, &h);
|
||||
if (renderer->target) {
|
||||
renderer->viewport_backup.x = 0;
|
||||
renderer->viewport_backup.y = 0;
|
||||
renderer->viewport_backup.w = w;
|
||||
renderer->viewport_backup.h = h;
|
||||
} else {
|
||||
viewport.x = 0;
|
||||
viewport.y = 0;
|
||||
viewport.w = w;
|
||||
viewport.h = h;
|
||||
SDL_RenderSetViewport(renderer, &viewport);
|
||||
}
|
||||
renderer->resized = SDL_FALSE;
|
||||
}
|
||||
} else if (event->window.event == SDL_WINDOWEVENT_HIDDEN) {
|
||||
renderer->hidden = SDL_TRUE;
|
||||
} else if (event->window.event == SDL_WINDOWEVENT_SHOWN) {
|
||||
if (!(SDL_GetWindowFlags(window) & SDL_WINDOW_MINIMIZED)) {
|
||||
renderer->hidden = SDL_FALSE;
|
||||
}
|
||||
} else if (event->window.event == SDL_WINDOWEVENT_MINIMIZED) {
|
||||
renderer->minimized = SDL_TRUE;
|
||||
renderer->hidden = SDL_TRUE;
|
||||
} else if (event->window.event == SDL_WINDOWEVENT_RESTORED) {
|
||||
renderer->minimized = SDL_FALSE;
|
||||
if (!(SDL_GetWindowFlags(window) & SDL_WINDOW_HIDDEN)) {
|
||||
renderer->hidden = SDL_FALSE;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -218,10 +248,10 @@ SDL_CreateRenderer(SDL_Window * window, int index, Uint32 flags)
|
|||
renderer->magic = &renderer_magic;
|
||||
renderer->window = window;
|
||||
|
||||
if (SDL_GetWindowFlags(window) & SDL_WINDOW_MINIMIZED) {
|
||||
renderer->minimized = SDL_TRUE;
|
||||
if (SDL_GetWindowFlags(window) & (SDL_WINDOW_HIDDEN|SDL_WINDOW_MINIMIZED)) {
|
||||
renderer->hidden = SDL_TRUE;
|
||||
} else {
|
||||
renderer->minimized = SDL_FALSE;
|
||||
renderer->hidden = SDL_FALSE;
|
||||
}
|
||||
|
||||
SDL_SetWindowData(window, SDL_WINDOWRENDERDATA, renderer);
|
||||
|
@ -974,8 +1004,8 @@ SDL_RenderClear(SDL_Renderer * renderer)
|
|||
{
|
||||
CHECK_RENDERER_MAGIC(renderer, -1);
|
||||
|
||||
/* Don't draw while we're minimized */
|
||||
if (renderer->minimized) {
|
||||
/* Don't draw while we're hidden */
|
||||
if (renderer->hidden) {
|
||||
return 0;
|
||||
}
|
||||
return renderer->RenderClear(renderer);
|
||||
|
@ -1004,8 +1034,8 @@ SDL_RenderDrawPoints(SDL_Renderer * renderer,
|
|||
if (count < 1) {
|
||||
return 0;
|
||||
}
|
||||
/* Don't draw while we're minimized */
|
||||
if (renderer->minimized) {
|
||||
/* Don't draw while we're hidden */
|
||||
if (renderer->hidden) {
|
||||
return 0;
|
||||
}
|
||||
return renderer->RenderDrawPoints(renderer, points, count);
|
||||
|
@ -1036,8 +1066,8 @@ SDL_RenderDrawLines(SDL_Renderer * renderer,
|
|||
if (count < 2) {
|
||||
return 0;
|
||||
}
|
||||
/* Don't draw while we're minimized */
|
||||
if (renderer->minimized) {
|
||||
/* Don't draw while we're hidden */
|
||||
if (renderer->hidden) {
|
||||
return 0;
|
||||
}
|
||||
return renderer->RenderDrawLines(renderer, points, count);
|
||||
|
@ -1089,8 +1119,8 @@ SDL_RenderDrawRects(SDL_Renderer * renderer,
|
|||
return 0;
|
||||
}
|
||||
|
||||
/* Don't draw while we're minimized */
|
||||
if (renderer->minimized) {
|
||||
/* Don't draw while we're hidden */
|
||||
if (renderer->hidden) {
|
||||
return 0;
|
||||
}
|
||||
for (i = 0; i < count; ++i) {
|
||||
|
@ -1132,8 +1162,8 @@ SDL_RenderFillRects(SDL_Renderer * renderer,
|
|||
if (count < 1) {
|
||||
return 0;
|
||||
}
|
||||
/* Don't draw while we're minimized */
|
||||
if (renderer->minimized) {
|
||||
/* Don't draw while we're hidden */
|
||||
if (renderer->hidden) {
|
||||
return 0;
|
||||
}
|
||||
return renderer->RenderFillRects(renderer, rects, count);
|
||||
|
@ -1193,8 +1223,8 @@ SDL_RenderCopy(SDL_Renderer * renderer, SDL_Texture * texture,
|
|||
texture = texture->native;
|
||||
}
|
||||
|
||||
/* Don't draw while we're minimized */
|
||||
if (renderer->minimized) {
|
||||
/* Don't draw while we're hidden */
|
||||
if (renderer->hidden) {
|
||||
return 0;
|
||||
}
|
||||
return renderer->RenderCopy(renderer, texture, &real_srcrect,
|
||||
|
@ -1246,8 +1276,8 @@ SDL_RenderPresent(SDL_Renderer * renderer)
|
|||
{
|
||||
CHECK_RENDERER_MAGIC(renderer, );
|
||||
|
||||
/* Don't draw while we're minimized */
|
||||
if (renderer->minimized) {
|
||||
/* Don't draw while we're hidden */
|
||||
if (renderer->hidden) {
|
||||
return;
|
||||
}
|
||||
renderer->RenderPresent(renderer);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue