user11914177
user11914177

Reputation: 955

SDL_WINDOWEVENT_SIZE_CHANGED and SDL_WINDOWEVENT_RESIZED not working?

I'm trying to detect, when the size of a SDL2 window changed. But neither SDL_WINDOWEVENT_RESIZED nor SDL_WINDOWEVENT_SIZE_CHANGED are working, at least on MacOS. This is my code:

SDL_Init(SDL_INIT_VIDEO);
SDL_Window *win = SDL_CreateWindow("", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 100, 100, SDL_WINDOW_RESIZABLE);
SDL_Renderer *ren = SDL_CreateRenderer(win, 0, 0);

bool running = true;
SDL_Event event;
while (running) {
    while(SDL_PollEvent(&event) != 0) {
        if(event.type == SDL_QUIT) {
            running = false;
        }

        if(event.type == SDL_WINDOWEVENT_SIZE_CHANGED) {
            return 3;
        }

        if(event.type == SDL_WINDOWEVENT_RESIZED) {
            return 4;
        }
    }

    SDL_RenderClear(ren);
}
SDL_DestroyRenderer(ren);
SDL_DestroyWindow(win);
SDL_Quit();
return 0;

When running the program and resizing the window nothing happens. Am I doing something wrong or is it a bug?

Edit: I looked up the documentation on window events(https://wiki.libsdl.org/SDL_WindowEvent). It says to write something like this:

event.window.type == SDL_WINDOWEVENT_SIZE_CHANGED 

But this also isn't working.

Upvotes: 2

Views: 1721

Answers (1)

keltar
keltar

Reputation: 18399

SDL_WINDOWEVENT_* are not event types but SDL_WindowEventID. That is, if your event.type is SDL_WINDOWEVENT, you can access window union field for extra data, including event, e.g.

while(SDL_PollEvent(&event)) {
    if(event.type == SDL_WINDOWEVENT) {
        if(event.window.event == SDL_WINDOWEVENT_SIZE_CHANGED) {
            // ...
        }
    }
}

Upvotes: 5

Related Questions