Resizing a window can have significant implications for the graphical content displayed within it. Here’s how it typically affects rendering:
If your content is rendered using fixed coordinates or dimensions, resizing will stretch or shrink the content to fit the new window size.
For example, if a rectangle spans from (0, 0)
to (200, 200)
in a 400x400 window and the window is resized to 800x800, it will occupy only one-fourth of the space unless adjustments are made.
Modern applications often re-render content based on the new size. This ensures that the content scales appropriately.
Using SDL, you might handle this in the event loop by responding to SDL_WINDOWEVENT_SIZE_CHANGED
or SDL_WINDOWEVENT_RESIZED
.
Here’s an example that redraws content upon resizing:
#include <SDL.h>
#include <iostream>
void DrawRectangle(SDL_Renderer*, int, int) {/*...*/};
int main() {
SDL_Init(SDL_INIT_VIDEO);
SDL_Window* window =
SDL_CreateWindow("Resize Example",
SDL_WINDOWPOS_CENTERED,
SDL_WINDOWPOS_CENTERED,
400, 400,
SDL_WINDOW_RESIZABLE);
SDL_Renderer* renderer =
SDL_CreateRenderer(
window, -1, SDL_RENDERER_ACCELERATED);
bool running = true;
SDL_Event event;
while (running) {
while (SDL_PollEvent(&event)) {
if (event.type == SDL_QUIT) {
running = false;
}
if (event.type == SDL_WINDOWEVENT &&
(event.window.event ==
SDL_WINDOWEVENT_SIZE_CHANGED ||
event.window.event ==
SDL_WINDOWEVENT_RESIZED)) {
int width, height;
SDL_GetWindowSize(window, &width,
&height);
SDL_SetRenderDrawColor(
renderer, 0, 0, 0, 255);
SDL_RenderClear(renderer);
DrawRectangle(renderer, width, height);
SDL_RenderPresent(renderer);
}
}
}
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
}
On resizing the window, the rectangle redraws proportionally in the new dimensions.
By properly handling resizing, you can ensure a polished experience for users regardless of window size.
Answers to questions are automatically generated and may not have been reviewed.
Learn how to resize, constrain, and manage SDL2 windows
Comprehensive course covering advanced concepts, and how to use them on large-scale projects.
View Course