When the window is resized, the viewport is automatically reset.

This resolves lots of confusion around resizable windows.  Most people don't expect a viewport to be implicitly set when the renderer is created and then not to be reset to the window size if the window is resized.

Added common test command line parameters --logical WxH and --scale N to test the render logical size and scaling APIs.
This commit is contained in:
Sam Lantinga
2013-05-29 03:22:19 -07:00
parent 23f33cb76c
commit 028c19b92b
5 changed files with 40 additions and 44 deletions

View File

@@ -110,29 +110,11 @@ SDL_RendererEventWatch(void *userdata, SDL_Event *event)
renderer->WindowEvent(renderer, &event->window);
}
if (event->window.event == SDL_WINDOWEVENT_RESIZED) {
if (renderer->logical_w) {
/* We'll update the renderer in the SIZE_CHANGED event */
} else {
/* Try to keep the previous viewport centered */
int w, h;
SDL_GetWindowSize(window, &w, &h);
if (renderer->target) {
renderer->viewport_backup.x = (w - renderer->viewport_backup.w) / 2;
renderer->viewport_backup.y = (h - renderer->viewport_backup.h) / 2;
} else {
renderer->viewport.x = (w - renderer->viewport.w) / 2;
renderer->viewport.y = (h - renderer->viewport.h) / 2;
renderer->UpdateViewport(renderer);
}
}
renderer->resized = SDL_TRUE;
} else if (event->window.event == SDL_WINDOWEVENT_SIZE_CHANGED) {
if (event->window.event == SDL_WINDOWEVENT_SIZE_CHANGED) {
if (renderer->logical_w) {
UpdateLogicalSize(renderer);
} else if (!renderer->resized) {
/* Window was programmatically resized, reset viewport */
} else {
/* Window was resized, reset viewport */
int w, h;
SDL_GetWindowSize(window, &w, &h);
@@ -149,7 +131,6 @@ SDL_RendererEventWatch(void *userdata, SDL_Event *event)
renderer->UpdateViewport(renderer);
}
}
renderer->resized = SDL_FALSE;
} else if (event->window.event == SDL_WINDOWEVENT_HIDDEN) {
renderer->hidden = SDL_TRUE;
} else if (event->window.event == SDL_WINDOWEVENT_SHOWN) {

View File

@@ -123,7 +123,6 @@ struct SDL_Renderer
/* The window associated with the renderer */
SDL_Window *window;
SDL_bool hidden;
SDL_bool resized;
/* The logical resolution for rendering */
int logical_w;